群体协同算法中药复方优化方法【附代码】

博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。

✅成品或者定制,扫描文章底部微信二维码。


(1) 以群体协同算法为核心的中药复方靶点网络模块划分方法

中药复方是中医药治疗疾病的主要形式,其多成分、多靶点、多通路的作用特点决定了复方的整体效应难以用简单的线性叠加来解释。传统的中药复方研究多依赖于临床经验和动物实验,缺乏系统的理论指导和定量分析工具。随着网络药理学的兴起,将中药复方的成分、靶点和疾病之间的关系构建为复杂网络,通过网络分析方法挖掘复方的作用机制成为研究热点。然而,现有的网络分析方法多关注单个节点或节点对之间的关系,忽视了中药复方作用的群体效应特征,即多个成分协同作用于多个靶点群从而发挥整体疗效的特点。

群体协同算法的提出正是为了解决这一问题。与传统的社区发现算法不同,群体协同算法以最大化群体间的协同作用为目标,寻找网络中具有紧密功能关联的节点群组。在中药复方靶点网络中,这些群组代表了共同参与某一生物功能或通路的成分靶点集合。群体协同模块度是衡量模块划分质量的核心指标,它不仅考虑模块内部的连接紧密程度,还考虑模块与疾病靶点群之间的关联强度。高群体协同模块度意味着识别出的成分群与疾病靶点群之间存在密切的调控关系,这些成分群可能是复方发挥疗效的核心功能单元。

算法的具体实现采用了类似Louvain优化的两阶段迭代策略。第一阶段是局部优化阶段,遍历网络中的每个节点,尝试将其移动到相邻模块中,计算移动前后群体协同模块度的变化,如果模块度增加则执行移动操作。这一过程反复进行直到没有节点移动能够增加模块度为止。第二阶段是网络聚合阶段,将第一阶段识别出的各个模块压缩为超节点,构建新的简化网络,然后在简化网络上重复第一阶段的操作。两个阶段交替进行直到模块结构稳定。这种层次化的优化策略既保证了算法的计算效率,又能够发现不同尺度上的模块结构。

为了验证群体协同算法的性能优势,在多个不同类型的网络上进行了对比实验。首先选取两个公开的高质量蛋白质相互作用网络作为测试基准,这些网络已有经过生物学验证的功能模块注释,可以作为评价模块划分准确性的金标准。其次在中药复方左金片的成分靶点网络上进行测试,该复方组成简单、作用机制研究较为清楚,便于验证算法结果的生物学合理性。最后在痰瘀同治方抗心肌缺血再灌注损伤的靶点网络上进行应用研究。与经典的GN算法、基于贪婪策略的CNM算法、基于标签传播的LPA算法以及基于局部扩展的LFM算法进行比较,群体协同算法在所有测试网络上均获得了最高的模块度值,表明该算法能够识别出结构更加紧密的功能模块,为后续的复方优化奠定了坚实基础。

(2) 基于君臣佐使配伍理论的网络加权方法与核心节点筛选策略

君臣佐使是中医方剂学的核心配伍理论,描述了复方中各味药物的主次地位和功能分工。君药针对主病或主证发挥主要治疗作用,是复方的核心药物;臣药辅助君药加强治疗作用或针对兼证发挥作用;佐药协助君臣药治疗兼证、制约君臣药的毒性或烈性、或作为反佐以防止药物拒药;使药引导诸药直达病所或调和诸药。这一理论蕴含了复方中药物重要性差异的思想,将其引入网络分析可以更好地反映复方的组织结构特征。

基于君臣佐使理论的网络加权方法为复方靶点网络中的边赋予不同的权重值,权重大小反映该连接的重要程度。具体而言,根据复方中各药物的君臣佐使属性,为其对应的成分节点和靶点节点之间的连接边赋予相应权重。君药来源的成分与靶点之间的连接权重最高,臣药次之,佐药再次,使药最低。权重值的具体数值需要综合考虑临床经验和网络分析结果。研究中设计了多种权重分配方案进行对比测试,最终确定君臣佐使的权重比为20:10:6:4时,网络模块划分的质量最优,该方案既体现了君药的核心地位,又保持了各层级药物之间的合理差距。

加权网络与非加权网络的模块划分结果存在显著差异,验证了君臣佐使思想对复方结构的实质影响。在非加权网络中,所有连接边被同等对待,模块划分主要依据拓扑结构特征,可能无法准确反映药物的功能主次关系。引入君臣佐使权重后,君药来源的成分与靶点形成的连接在模块划分中占据更重要的地位,更容易被归入同一核心模块,而使药来源的成分则可能被分配到边缘模块或作为模块间的桥接节点。这种划分结果更符合中医药理论对复方组织结构的认识,表明加权方法能够有效整合传统医学知识和现代网络分析技术。

核心节点的筛选是从模块划分结果中提取优化方的关键步骤。传统的节点重要性评价指标如度中心性和接近中心性主要基于网络拓扑结构,未考虑边的权重信息。为此提出了加权接近中心性指标,该指标在计算节点到其他节点的路径长度时将边的权重纳入考量,权重大的边对应较短的路径长度。这样处理使得与君药成分连接紧密的靶点获得较高的中心性评分,更可能被选为核心节点。综合加权接近中心性、度中心性和传统接近中心性三个指标,采用排名聚合方法筛选出综合评分最高的核心节点集合。根据核心节点回溯其对应的药物成分,进而确定核心药物组合,形成优化方案。

(3) 痰瘀同治方优化及基因富集与动物实验验证

痰瘀同治方是治疗心肌缺血再灌注损伤的有效复方,由十三味中药组成,临床疗效确切但组方较为复杂。应用群体协同算法对该方进行优化,目标是在保持疗效的前提下精简组方,提高临床应用的便利性。首先构建痰瘀同治方抗心肌缺血再灌注损伤的成分靶点疾病三层网络,成分层包含复方中各药物的化学成分,靶点层包含这些成分的作用靶点蛋白,疾病层包含心肌缺血再灌注损伤的相关基因。根据中医专家意见确定各药物的君臣佐使属性,按照确定的权重比例对网络进行加权处理。

在加权网络上运行群体协同算法进行模块划分,最终识别出十三个群体协同模块,总模块度达到零点五五三七,表明模块划分质量较高。对各模块的成分构成和靶点分布进行分析,识别出与疾病靶点群关联最紧密的核心模块。基于加权接近中心性指标结合度中心性和接近中心性,从核心模块中筛选关键节点,回溯确定核心药物组合。根据筛选结果拟定两个优化方案,优化方一包含六味药物,优化方二包含七味药物,均保留了原方中的君药和主要臣药,精简了部分佐使药物。

基因富集分析从分子机制层面验证优化方案的合理性。将原方、优化方一和优化方二的靶点分别进行基因本体功能富集分析和通路富集分析。基因本体富集结果显示,三个方案富集到的生物过程、分子功能和细胞组分高度重叠,重叠率均超过百分之九十四,排名前三十的富集条目基本一致,包括氧化应激响应、炎症反应调节、细胞凋亡调控等与心肌保护密切相关的生物功能。通路富集分析结果同样显示高度一致性,三个方案富集到的信号通路重叠率超过百分之九十八,主要涉及心肌细胞凋亡通路、炎症信号通路、氧化应激通路等。这些结果表明优化方案与原方在分子作用机制层面具有高度相似性,支持优化方案的有效性。

import numpy as np import networkx as nx from collections import defaultdict import random class CollaborativeModularityOptimizer: def __init__(self, graph, disease_targets, weights=None): self.graph = graph self.disease_targets = set(disease_targets) self.weights = weights if weights else {e: 1.0 for e in graph.edges()} self.node_to_community = {node: i for i, node in enumerate(graph.nodes())} self.communities = {i: {node} for i, node in enumerate(graph.nodes())} def calculate_collaborative_modularity(self): m = sum(self.weights.values()) Q = 0.0 for comm_id, comm_nodes in self.communities.items(): if len(comm_nodes) == 0: continue internal_weight = 0.0 disease_connection = 0.0 for u in comm_nodes: for v in self.graph.neighbors(u): if v in comm_nodes: internal_weight += self.weights.get((u, v), self.weights.get((v, u), 1.0)) if v in self.disease_targets: disease_connection += self.weights.get((u, v), self.weights.get((v, u), 1.0)) node_degrees = sum(self.graph.degree(n, weight='weight') for n in comm_nodes) Q += (internal_weight / (2 * m)) - (node_degrees / (2 * m)) ** 2 Q += 0.1 * disease_connection / m return Q def move_node(self, node, target_community): source_community = self.node_to_community[node] if source_community == target_community: return 0.0 old_Q = self.calculate_collaborative_modularity() self.communities[source_community].remove(node) self.communities[target_community].add(node) self.node_to_community[node] = target_community new_Q = self.calculate_collaborative_modularity() delta_Q = new_Q - old_Q if delta_Q <= 0: self.communities[target_community].remove(node) self.communities[source_community].add(node) self.node_to_community[node] = source_community return 0.0 return delta_Q def local_optimization(self): improved = True while improved: improved = False nodes = list(self.graph.nodes()) random.shuffle(nodes) for node in nodes: neighbor_communities = set() for neighbor in self.graph.neighbors(node): neighbor_communities.add(self.node_to_community[neighbor]) best_delta = 0.0 best_community = self.node_to_community[node] for comm in neighbor_communities: delta = self.move_node(node, comm) if delta > best_delta: best_delta = delta best_community = comm improved = True def aggregate_network(self): new_graph = nx.Graph() comm_ids = [c for c, nodes in self.communities.items() if len(nodes) > 0] for comm_id in comm_ids: new_graph.add_node(comm_id) for u, v in self.graph.edges(): comm_u = self.node_to_community[u] comm_v = self.node_to_community[v] w = self.weights.get((u, v), self.weights.get((v, u), 1.0)) if new_graph.has_edge(comm_u, comm_v): new_graph[comm_u][comm_v]['weight'] += w else: new_graph.add_edge(comm_u, comm_v, weight=w) return new_graph def run_louvain_style(self, max_iterations=100): for iteration in range(max_iterations): old_modularity = self.calculate_collaborative_modularity() self.local_optimization() new_modularity = self.calculate_collaborative_modularity() if abs(new_modularity - old_modularity) < 1e-6: break return self.get_partition() def get_partition(self): partition = {} for node, comm_id in self.node_to_community.items(): if comm_id not in partition: partition[comm_id] = [] partition[comm_id].append(node) return {k: v for k, v in partition.items() if len(v) > 0} def assign_junchen_weights(drug_roles, compound_target_edges): role_weights = {'jun': 20, 'chen': 10, 'zuo': 6, 'shi': 4} edge_weights = {} for compound, target in compound_target_edges: drug = compound.split('_')[0] role = drug_roles.get(drug, 'shi') edge_weights[(compound, target)] = role_weights[role] return edge_weights def calculate_weighted_closeness_centrality(graph, weights): centrality = {} nodes = list(graph.nodes()) for node in nodes: total_distance = 0.0 reachable = 0 for other in nodes: if node != other: try: path = nx.shortest_path(graph, node, other) path_weight = sum(1.0 / weights.get((path[i], path[i+1]), weights.get((path[i+1], path[i]), 1.0)) for i in range(len(path)-1)) total_distance += path_weight reachable += 1 except nx.NetworkXNoPath: continue if reachable > 0 and total_distance > 0: centrality[node] = reachable / total_distance else: centrality[node] = 0.0 return centrality def identify_core_nodes(graph, weights, partition, top_k=20): wcc = calculate_weighted_closeness_centrality(graph, weights) dc = dict(graph.degree()) cc = nx.closeness_centrality(graph) scores = {} for node in graph.nodes(): scores[node] = (wcc.get(node, 0) + dc.get(node, 0) / max(dc.values()) + cc.get(node, 0)) / 3 sorted_nodes = sorted(scores.items(), key=lambda x: x[1], reverse=True) return [node for node, score in sorted_nodes[:top_k]] def optimize_formula(compounds, targets, disease_targets, drug_roles, compound_drug_map): G = nx.Graph() G.add_nodes_from(compounds) G.add_nodes_from(targets) edges = [(c, t) for c in compounds for t in targets if random.random() > 0.7] G.add_edges_from(edges) weights = assign_junchen_weights(drug_roles, edges) optimizer = CollaborativeModularityOptimizer(G, disease_targets, weights) partition = optimizer.run_louvain_style() modularity = optimizer.calculate_collaborative_modularity() core_nodes = identify_core_nodes(G, weights, partition) core_drugs = set() for node in core_nodes: if node in compound_drug_map: core_drugs.add(compound_drug_map[node]) return list(core_drugs), partition, modularity if __name__ == "__main__": drugs = ['HuangQi', 'DanShen', 'ChuanXiong', 'GanCao', 'DangGui', 'TaoRen'] drug_roles = {'HuangQi': 'jun', 'DanShen': 'chen', 'ChuanXiong': 'chen', 'GanCao': 'shi', 'DangGui': 'zuo', 'TaoRen': 'zuo'} compounds = [f"{drug}_comp{i}" for drug in drugs for i in range(5)] targets = [f"Target_{i}" for i in range(50)] disease_targets = targets[:20] compound_drug_map = {c: c.split('_')[0] for c in compounds} optimized_drugs, partition, Q = optimize_formula( compounds, targets, disease_targets, drug_roles, compound_drug_map) print(f"Modularity: {Q:.4f}") print(f"Number of modules: {len(partition)}") print(f"Optimized formula drugs: {optimized_drugs}")


成品代码50-200,定制300起,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1118144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

能否连接数据库?探索VibeThinker与外部系统的交互

VibeThinker-1.5B-APP 与外部系统交互的边界探索 在如今大模型动辄千亿参数、训练成本高企的背景下&#xff0c;一个仅15亿参数的小模型却在数学推理和算法任务中频频“越级挑战”成功——这听起来像技术界的黑马故事&#xff0c;而 VibeThinker-1.5B-APP 正是其中的代表。 它不…

HMMT25成绩突破50分:VibeThinker展现超强竞赛解题潜力

VibeThinker-1.5B&#xff1a;小模型如何在HMMT25突破50分大关&#xff1f; 在当前AI大模型争相“卷参数”的时代&#xff0c;一个仅15亿参数的模型却悄然打破了人们对推理能力与规模强相关的固有认知。微博开源的 VibeThinker-1.5B-APP 在极具挑战性的数学竞赛基准 HMMT25 上取…

【从零到精通】Docker跨平台自动化测试的7个黄金法则

第一章&#xff1a;Docker跨平台测试的基石与核心价值Docker 通过容器化技术为跨平台测试提供了高度一致的运行环境&#xff0c;解决了“在我机器上能跑”的经典难题。其核心价值在于将应用及其依赖打包成轻量级、可移植的容器镜像&#xff0c;确保在任意支持 Docker 的操作系统…

机器人冲压应用市场剖析:哪家品牌能脱颖而出成为优选? - 品牌推荐大师

全球智能服务机器人市场规模预计将从2022年的235亿美元增长至2028年的628亿美元,复合年增长率达17.8%。中国机器人冲压应用行业市场规模增长显著,2024年汽车冲压自动化市场规模已达119.90亿元,预计2025年将保持稳步…

群智能优化算法原理及实战应用【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅成品或者定制&#xff0c;扫描文章底部微信二维码。 (1) 基于高斯混沌增强与维进化策略的粒子群优化算法 粒子群优化算法是模拟鸟群觅食…

元描述(meta description)自动撰写:提升网站搜索可见性

元描述自动撰写&#xff1a;用轻量模型撬动搜索可见性 在搜索引擎结果页&#xff08;SERP&#xff09;上&#xff0c;你的网页标题可能决定了用户是否注意到它&#xff0c;而真正决定他们会不会点击进来的&#xff0c;往往是那一行不起眼的元描述。尽管谷歌早已声明 meta descr…

iPad Pro手写输入优化:数学公式识别+VibeThinker求解

iPad Pro手写输入优化&#xff1a;数学公式识别 VibeThinker求解 在一场高校数学建模竞赛的现场&#xff0c;一名学生用Apple Pencil在iPad Pro上快速写下一道复杂的微分方程。笔尖刚落&#xff0c;屏幕便已呈现出完整的求解过程——从变量替换到积分变换&#xff0c;每一步推…

上海青少年叛逆管教学校哪家强?靠谱叛逆管教机构推荐及服务对比榜单 - 工业品网

本榜单依托上海本地教育监管数据、家长真实口碑调研及学员跟踪反馈,筛选出5家合规且专业的青少年叛逆管教机构,为面临孩子成长困境的家庭提供客观选型依据,助力精准匹配适配的教育伙伴。 TOP1 推荐:上海关兴教育学…

【Docker私有仓库拉取实战指南】:掌握企业级镜像管理的5大核心技巧

第一章&#xff1a;Docker私有仓库拉取的核心概念与意义在现代容器化应用部署中&#xff0c;Docker私有仓库扮演着至关重要的角色。它不仅提供了镜像存储与分发的能力&#xff0c;还增强了企业对镜像安全、访问控制和网络效率的管理。与公有仓库&#xff08;如Docker Hub&#…

机器学习特征工程思路:虽然不擅长但能提供建议框架

VibeThinker-1.5B&#xff1a;小模型如何打赢高难度推理战&#xff1f; 在大模型动辄千亿参数、训练成本突破百万美元的今天&#xff0c;一个仅15亿参数的小型语言模型&#xff0c;却在AIME数学竞赛和编程挑战中反超了部分百亿级对手——这听起来像天方夜谭&#xff0c;但Vibe…

Docker健康检查总失败?,掌握这4种排查技巧立刻见效

第一章&#xff1a;Docker健康检查失败的常见现象与影响在容器化应用部署过程中&#xff0c;Docker 健康检查&#xff08;HEALTHCHECK&#xff09;是保障服务可用性的关键机制。当健康检查失败时&#xff0c;容器虽可能仍在运行&#xff0c;但其提供的服务已无法正常响应请求&a…

不用于聊天的AI模型?深度解析VibeThinker-1.5B的设计哲学

VibeThinker-1.5B&#xff1a;当AI放弃聊天&#xff0c;专注解题 在大模型争相扮演“全能助手”的今天&#xff0c;一个仅15亿参数、训练成本不到8000美元的AI却选择了一条截然不同的路——它不陪你闲聊&#xff0c;不写诗编故事&#xff0c;也不生成营销文案。它的任务很纯粹&…

你不可不知的Docker隐性故障:健康检查超时背后的3个陷阱

第一章&#xff1a;Docker健康检查失败的常见表象在使用 Docker 部署容器化应用时&#xff0c;健康检查&#xff08;Health Check&#xff09;是确保服务稳定运行的重要机制。当健康检查失败时&#xff0c;容器可能被标记为非健康状态&#xff0c;进而触发编排系统&#xff08;…

显存不足怎么办?量化版VibeThinker即将发布预告

显存不足怎么办&#xff1f;量化版VibeThinker即将发布预告 在消费级显卡上跑不动大模型的痛&#xff0c;每个本地AI爱好者都懂。明明手握RTX 3060&#xff0c;却因为“CUDA out of memory”而被迫放弃本地推理——这种尴尬正成为过去式。随着轻量高效模型与量化技术的结合突破…

如何实现Docker日志按服务分类输出?架构师亲授实战方案

第一章&#xff1a;Docker日志输出的核心挑战在容器化应用部署日益普及的今天&#xff0c;Docker日志管理成为运维和开发团队面临的关键问题之一。尽管Docker提供了默认的日志驱动&#xff08;如json-file&#xff09;&#xff0c;但在生产环境中&#xff0c;这些默认机制往往难…

Kubernetes Helm Chart制作:大规模集群管理解决方案

Kubernetes Helm Chart 制作&#xff1a;大规模集群管理解决方案 在 AI 模型部署日益复杂的今天&#xff0c;一个看似简单的推理服务上线&#xff0c;背后可能涉及数十个配置项、多个资源对象和跨环境的一致性保障。尤其是当我们要在上百个节点上批量部署像 VibeThinker-1.5B-A…

密集型语言模型是什么?15亿参数为何还能高效运算

密集型语言模型为何能以小搏大&#xff1f;15亿参数背后的高效推理革命 在AI大模型动辄千亿、万亿参数的今天&#xff0c;一个仅含15亿参数的小模型却悄然登顶多项数学与编程推理榜单——这听起来像天方夜谭&#xff0c;但VibeThinker-1.5B-APP正用实绩打破“参数即能力”的迷…

为什么你的Docker应用总是OOM被杀:深入解析内存限制与调优方案

第一章&#xff1a;Docker应用OOM问题的普遍性与影响在现代微服务架构中&#xff0c;Docker已成为应用部署的事实标准。然而&#xff0c;随着容器化应用的广泛使用&#xff0c;OOM&#xff08;Out of Memory&#xff09;问题日益凸显&#xff0c;成为影响系统稳定性的关键因素之…

思维链长度影响结果?测试不同推理步数的表现差异

思维链长度如何影响推理结果&#xff1f;实测不同步数下的表现差异 在当前大模型“军备竞赛”愈演愈烈的背景下&#xff0c;千亿参数、万亿token训练似乎成了性能提升的唯一路径。然而&#xff0c;现实中的许多应用场景——比如嵌入式设备上的AI助手、离线编程辅导工具或低成本…

【高可用系统保障】:构建企业级Docker监控平台的7个核心步骤

第一章&#xff1a;Docker资源监控的核心价值与挑战在现代云原生架构中&#xff0c;Docker作为容器化技术的基石&#xff0c;广泛应用于微服务部署与自动化运维。然而&#xff0c;随着容器数量的快速增长&#xff0c;如何有效监控其CPU、内存、网络和磁盘I/O等资源使用情况&…