当前位置: 首页 > news >正文

基于多目标优化的个性化心血管系统建模0D模型【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
如需沟通交流,查看文章底部二维码


(1)0D集总参数模型构建与多动脉树拓扑定义:

针对人体心血管系统个体差异大的特点,建立了包含187条主要血管段、4个心腔和体肺循环双回路的集总参数模型。每条血管段由血液粘性阻力系数R、血液流动惯量L和血管顺应性C三个参数描述,且使用三元件Windkessel模型连接以模拟末端反射波。模型拓扑遵循人体真实解剖结构,从升主动脉起逐步分叉,包含主动脉弓三个大分支、腹主动脉内脏分支、上肢和下肢动脉树直至指端和趾端微动脉,最后通过小动脉和毛细血管汇入静脉系统。所有段的初始参数参考西方人群平均值,但保留自由度用于个性化调整。在构建时实施了基于血液密度和管径自动计算L、C初值的预处理算法,并设定了参数边界约束以避免优化中出现负值。模型采用四阶Runge-Kutta法求解耦合微分方程组,时间步长为0.1毫秒,单心动周期仿真耗时为0.8秒。仿真可输出任意血管段的血压波形、血流速率和血管容积变化曲线。通过与物理模拟循环回路平台的对比,升主动脉收缩压的误差小于3.2mmHg,舒张压误差小于2.8mmHg,波形相关性系数达到0.96,验证了模型的结构保真度。在后续个性化参数估计中,选取了上肢肱动脉、桡动脉、下肢股动脉和胫前动脉等8个临床常用测量点的波形数据作为目标,因为这些部位无创测量易于获取,能够反映个体循环差异。

(2)基于收敛-多样性分离策略的多目标进化参数估计算法:

为解决个性化0D模型中待优化参数维度高(可达60维)和目标波形之间的冲突,设计了收敛性相关变量和多样性相关变量分离的多目标进化算法。首先通过Sobol全局灵敏度分析将模型参数分为两类:收敛性相关变量,即影响波形的平均血压、脉压差等主要特征,包括大动脉段的R和C,对这些变量进行快速非支配排序和拥挤度距离选择以加速收敛;多样性相关变量,主要影响波形细节如重搏切迹和反射波形态,包括外周微动脉R和管径较小的分支参数,对这些变量采用基于参考向量的环境选择以维持解集多样性。算法在NSGA-III框架基础上引入参数归一化预处理器,将所有待优化变量映射到0-1区间,并根据先验生理知识设置非等距划分的参考点权重。交叉操作使用模拟二进制交叉,分布指数随进化代数从10递减至2,初期增强探索,后期细搜。变异采用多项式变异,变异率从0.2逐步降至0.05。评估目标函数定义为多位置波形与实测波形的归一化均方根误差(NRMSE),设置肱动脉收缩压NRMSE、肱动脉脉搏波整体NRMSE、桡动脉NRMSE、股动脉NRMSE等共6个目标。在19例健康志愿者数据上的实验表明,该方法个性化后的模型仿真波形与实测波形的平均NRMSE从初始0.37下降到0.092,比不使用变量分离策略的普通NSGA-III收敛速度快约40%,获得的帕累托前沿解能同时满足多个动脉位置的波形匹配。

(3)交互式仿真平台与疾病状态虚拟对比分析模块:

为了便于临床应用,利用MATLAB GUI开发了心血管系统个性化建模与虚拟干预平台,包含波形预处理、批量仿真、可视化对比和病理模拟四个功能模块。波形预处理模块自动识别颈动脉切迹、重搏波等特征点进行时间轴对齐和基线校正。批量仿真模块支持并行计算,利用parpool可同时对30组参数集进行独立仿真,在6核CPU上生成所有波形耗时约12秒。可视化对比模块以不同颜色叠加在实测波形上显示仿真结果,并提供NRMSE和Bland-Altman图的自动生成。病理模拟模块作为该平台的创新点,允许用户在已有个性化模型的基础上虚拟施加病变,例如在髂动脉段增加30%的R来模拟动脉粥样硬化,或在主动脉根部降低顺应性模拟血管老化,并对比病变前后的各处血压波形变化。课题组利用该平台对5名冠状动脉狭窄患者的术前测量数据构建个性化模型,随后在模型中虚拟地设置狭窄段R增加200%,预测了术后血流动力恢复后的血压改善程度,与患者实际术后6个月随访的血压相比,预测收缩压下降幅度误差少于5mmHg,舒张压误差少于3mmHg,展现了虚拟对比分析的有效性。平台还集成了模型导出功能,可将个性化参数以JSON文件输出,方便与CFD或FEA软件耦合进行更精细的局部流场分析。

import numpy as np from scipy.integrate import solve_ivp # 0D血管段类 class VesselSegment: def __init__(self, R=1.0, L=0.02, C=0.001, length=0.1, radius=0.01): self.R = R; self.L = L; self.C = C self.length = length; self.radius = radius # 心腔模型简化 class HeartChamber: def __init__(self, Emax=2.0, Emin=0.1, V0=10.0): self.Emax=Emax; self.Emin=Emin; self.V0=V0 def elastance(self, t, T=0.8): return self.Emin + (self.Emax-self.Emin)*0.5*(1-np.cos(2*np.pi*t/T)) # 循环系统ODE(简化,仅动脉系统) def cardiovascular_ode(t, y, params): # y: 各血管压力/流量,简化为几个腔室 P1,P2,P3,P4 = y[0],y[1],y[2],y[3] R1,R2,R3,C1,C2,C3 = params['R'], params['C'] dP1 = (1/C1) * ((params['heart'].elastance(t)*(params['heart'].V0-P1) / R1) - (P1-P2)/R2) dP2 = (1/C2) * ((P1-P2)/R2 - (P2-P3)/R3) dP3 = (1/C3) * ((P2-P3)/R3 - (P3-P4)/params['R_peri']) dP4 = (1/C3) * ((P3-P4)/params['R_peri'] - P4/params['R_vein']) return [dP1,dP2,dP3,dP4] # 多目标优化目标函数计算 def compute_objectives(solution, target_waves): # solution: 模型参数向量,target_waves: 实测多部位波形 params = decode_params(solution) sim_waves = simulate_model(params) obj = [] for i,key in enumerate(['brachial','radial','femoral']): rmse = np.sqrt(np.mean((sim_waves[key]-target_waves[key])**2)) scale = np.max(target_waves[key])-np.min(target_waves[key]) obj.append(rmse/scale) # NRMSE return obj # 简化的变量分离NSGA-III选择 def environment_selection(pop, ref_vectors): # 先按支配关系筛选,再用向量角度聚类选择 ranks = non_dominated_sort(pop) selected = [] for front in ranks: if len(selected)+len(front) <= len(pop): selected.extend(front) else: # 计算每个解到最近参考向量的距离 dist = np.zeros(len(front)) for i,ind in enumerate(front): dist[i] = min(np.linalg.norm(ind.obj-np.array(v)) for v in ref_vectors) front_sorted = sorted(front, key=lambda x: dist[front.index(x)]) needed = len(pop)-len(selected) selected.extend(front_sorted[:needed]); break return selected


如有问题,可以直接沟通

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

http://www.jsqmd.com/news/757130/

相关文章:

  • 北京市 CPPM 和 SCMP 报考新选择(众智商学院)联系方式 - 众智商学院课程中心
  • GitLab CI/CD流水线里,如何优雅地嵌入SonarQube扫描并看懂那份“体检报告”?
  • 别再乱采样了!用DeepXDE做PINNs,这几种自适应采样方法实测哪个最好用?
  • 【力扣hot100】 221. 最大正方形
  • Honey Select 2终极增强方案:如何一键解锁完整游戏体验
  • HCIP园区网
  • 在Node.js后端服务中集成Taotoken多模型API提升开发效率
  • ResNeXt的‘分组卷积’到底强在哪?用PyTorch代码和torchsummary带你算清参数量和计算量
  • 黑苹果启动盘修复完整指南:解决EFI引导问题的实用方法
  • 如何快速修复ComfyUI-ControlNet-Aux中Depth Anything节点报错问题
  • 如何彻底解决微信聊天记录丢失问题:WeChatMsg数据自主权完全指南
  • 内蒙古 CPPM 和 SCMP 报考新选择(众智商学院)联系方式 - 众智商学院课程中心
  • 从下载到验证:手把手教你为Cadence Virtuoso配置TSMC 1P6M工艺库(附display.drf文件修复)
  • Datasette ChatGPT插件:用自然语言查询SQLite数据库的实践指南
  • 离线策略蒸馏与强化学习在推荐系统中的对比实践
  • ThinkRAG:基于LlamaIndex与Streamlit的本地化中文知识库问答系统实践
  • 马斯克起诉OpenAI:一家非营利机构的商业化转型,算违法吗?
  • 从B站教程到实战避坑:3ds Max 2018模型缩放100倍导入UE5的完整流程(附素材)
  • 第5节:部署架构、性能预判与数据设计
  • 从51单片机到STM32:聊聊我项目里用过的几种软件架构(附代码避坑)
  • 上海市 CPPM 和 SCMP 报考新选择(众智商学院)联系方式 - 众智商学院课程中心
  • Tiled地图编辑器终极指南:从零开始创建专业2D游戏地图
  • wiliwili:跨平台B站客户端终极使用指南
  • TegraRcmGUI:让Switch破解注入从复杂命令到轻松点击的转变之旅
  • 3步轻松安装Windows 11:MediaCreationTool.bat帮你绕过所有硬件限制
  • Python 开发者如何利用 Taotoken 的 OpenAI 兼容协议快速调用多模型
  • 基于Node.js的自动化签到机器人:原理、部署与脚本开发实战
  • 2026年3月草坪灯源头厂家推荐,特色景观灯/中山景观灯/LED圆球壁灯/园区景观灯/城市道路灯,草坪灯厂家选哪家 - 品牌推荐师
  • 开源项目如何重构直播数据价值体系:DouyinLiveRecorder的技术架构与数据捕获实践
  • HsMod:炉石传说玩家的游戏效率与个性化优化插件