药代动力学/药效学(PK/PD)和系统药理学模型是评价正在开发药物的重要工具。使用MATLAB®和SimBiology®,研究人员可以在图形环境中或使用编程工具构建和描述这样的模型。他们可以使用临床前数据来数学地描述动态体内新候选药物的行为,并根据模型模拟在人类中进行预测和外推。然后,他们可以分享这些模型,使临床医师、生物学家和研究人员能够更好地评估各种剂量策略的有效性和安全性指标,并探索不同亚群患者的假设情况。
在某些情况下,直接共享SimBiology模型可能不现实。例如,您的同事可能无法访问或不熟悉MATLAB和SimBiology,或者您可能希望锁定模型及其特征,以便其他用户不会无意中更改它。
MATLAB Compiler™允许您将SimBiology模型部署为独立的MATLAB应用程序的一部分。您可以构建一个定制的图形界面,其他研究人员可以使用它来设置和运行模型模拟。然后,您可以编译该应用程序,使研究人员无需安装MATLAB或SimBiology即可使用它。
使用科赫、沃尔兹、拉胡和施罗普开发的肿瘤学模型1.作为一个示例,本文描述了一个开发和部署应用程序的工作流,该应用程序用于模拟使用SimBiology构建的机械PK/PD模型2..
示例模型和可部署应用程序可用于下载.
肿瘤学模型概述
本文中的示例基于Koch et al.肿瘤学模型,该模型用于描述肿瘤随时间的生长,以响应单药单药治疗或同时服用两种药物的联合治疗。
Koch等人肿瘤模型的SimBiology实现如图1所示3..两种药物的血浆浓度由具有线性消除途径的独立单室PK模型描述。肿瘤生长模型在肿瘤室中表示。衰变反应的速率取决于药物A和药物B的血浆浓度以及相互作用参数。当dru的血浆浓度gs降至零,肿瘤动力学由肿瘤生长过程描述。肿瘤重量定义为肿瘤生长和衰退状态之和,即x1+x2+x3+x4。
模型模拟使分析各种联合给药策略对肿瘤抑制的影响成为可能(图2)。
为部署准备模型
为了使用MATLAB编译器共享SimBiology模型,我们首先创建一个导出模型4..
我们使用MATLAB加载SimBiology模型sbioloadproject
.
> > sbioloadproject (“TumorGrowthModel.sbproj”);加载模型
我们使用出口
和保存
创建导出的SimBiology模型,并将其保存为MAT文件,该文件将被加载到部署的应用程序中。
>>exportedModel=导出(m1);%创建导出模型> >保存modelFile。垫exportedModel%保存导出的模型
请注意,导出的SimBiology模型具有有限的可访问属性集。此外,某些模型功能(包括反应、规则和事件)无法在导出版本中更改。
构建模型的接口
在创建一个导出的SimBiology模型之后,我们构建一个定制的MATLAB接口。该接口将使不使用MATLAB的非建模人员和研究人员能够调整模型参数,应用剂量计划,并运行模拟(图3)。
使用MATLAB图形用户界面设计环境(GUIDE)工具,我们通过将组件从调色板拖到布局区域来布局界面(图4)。
我们需要修改每个组件的单独属性标签
属性,以便以编程方式轻松访问这些元素<名称> _ <类型>
,提高了代码的可读性(图5)。
编程函数访问导出的SimBiology模型
在基于MATLAB桌面的工作流中,对应用程序进行编码以访问未导出的SimBiology模型。在准备部署时,我们需要更新代码以使用导出的SimBiology模型。
第一步是向MATLAB Compiler表明应用程序使用导出的SimBiology模型。我们通过添加一个指令(通过%#作用
pragma)在指南生成的MATLAB文件中,肿瘤生长抑制
,它链接到我们保存的指南FIG文件。
函数varargout = TumorGrowthInhibition(变长度输入宗量)%#函数SimBiology.export.Model
当最终用户与应用程序中的界面控制对象(如菜单或按钮)交互时,特定功能或回调调用。接下来,我们将修改回调函数以使用导出的模型。
在示例应用程序中,我们将修改五个回调以准备部署模型:TumorGrowthInhibition_OpeningFcn, CellLine_POPUP_Callback
,初始重量编辑回调,剂量1编辑回调,
和SimTumorGrowth_PUSHBUTTON_Callback
.
TumorGrowthInhibition_OpeningFcn
是示例应用程序中的打开函数。它加载模型并在代码中初始化剂量、模型参数和其他属性。初始(未部署)版本使用sbioloadproject
将模型加载到MATLAB中sbiodose
或getdose
创建或编辑现有剂量对象的步骤。
函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)%%创建和初始化剂量-未部署的版本%加载项目 项目= sbioloadproject (“TumorGrowthModel.sbproj”);m1=项目m1;%得到剂量1d1=获得剂量(m1,“药物A”);%第二剂d2=获得剂量(m1,“药物B”);% <剪>
对于已部署的应用程序,我们从MAT文件加载导出的模型(而不是使用sbioloadproject
).我们用getdose
更新附加到导出模型的现有剂量对象,因为不能向导出模型添加新的剂量对象。
函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)%%创建并初始化剂量部署版本%加载模型 项目=负载(“modelFile.mat”);m1 = proj.exportedModel;%得到剂量1d1=获得剂量(m1,“药物A”);%第二剂d2=获得剂量(m1,“药物B”);% <剪>
手机线\弹出\回拨
当用户从弹出菜单中选择单元格行时调用。该功能负责根据用户的选择适当地设置cell line参数。在模型的非导出版本中,这是通过使用单个调用选择适当的变体来完成的sbioselect
.
函数CellLine_弹出式_回调(hObject、eventdata、句柄)%%设置适当的细胞系名称不变式——非部署版本 cellLine = sbioselect(模型,“类型”,“变异”,“姓名”, cellLineName);% <剪>
SimBiology模型变体不能用于导出的模型。因此,对于导出的模型,我们使用ValueInfo
和获取索引
获取和设置构成模型变量的各个模型参数。
函数CellLine_弹出式_回调(hObject、eventdata、句柄)%%设置适当的单元线参数–-deployed version%获取当前的L1和L0值 L1 =模型。ValueInfo(getIndex(model,“L1”));L0 =模型。ValueInfo(getIndex(model,“10”));开关cellLineName案例“细胞系1”L0.InitialValue=0.141;L1.InitialValue=0.282;案例“细胞系2”L0.InitialValue=0.142;L1.InitialValue=0.284;案例'细胞株3 '10。InitialValue = 0.143;L1。InitialValue = 0.286;否则%终止% <剪>
初始化重量\u编辑\u回调
当用户指定初始肿瘤权重(w0
).像手机线\弹出\回拨
,此回调使用的非部署版本sbioselect
设置模型中的参数值。
函数InitialToMorWeight\u EDIT\u回调(hObject、eventdata、句柄)%%设置模型中w0的值–非部署版本 w0=sbioselect(型号,“类型”,“参数”,“姓名”,“w0”);w0.Value=str2double(get(hObject,“字符串”));% <剪>
如同手机线\弹出\回拨
,我们使用ValueInfo
和获取索引
为已部署的应用程序设置导出的SimBiology模型中的值。
函数InitialToMorWeight\u EDIT\u回调(hObject、eventdata、句柄)%%设置模型中w0的值–已部署版本 w0 =模型。ValueInfo(getIndex(model,“w0”));w0。InitialValue = str2double (get (hObject,“字符串”));% <剪>
Dosage1_EDIT_Callback
当用户指定剂量时间单位时调用。此回调更新剂量
对象。最初,这是通过设置TimeUnits
和时间间隔
直接属性。
函数Dosage1_编辑_回调(hObject、eventdata、句柄)%%设置剂量对象的设置——非部署版本%直接设置时间单位和间隔 dose1.TimeUnits=TimeUnits;dose1.Interval=str2double(get(handles.EveryValue1_EDIT,“字符串”));%将开始时间从天转换为新的时间单位dose1.StartTime=sbiounitcalculator(“一天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>
在部署的应用程序中,TimeUnits
的只读属性是剂量
对象,因此无法直接设置。我们使用sbiounitcalculator
&将剂量间隔转换为剂量的现有时间单位。
函数Dosage1_编辑_回调(hObject、eventdata、句柄)%%Set dose object的设置–-deployed version%无法设置时间单位;请使用sbiounitcalculator转换时间间隔 dose1.Interval=sbiounitcalculator(“一天”,dose1.TimeUnits,str2double(get(handles.EveryValue1)编辑,“字符串”)));%将开始时间从天转换为新的时间单位dose1.StartTime=sbiounitcalculator(“一天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>
SimTumorGrowth_PUSHBUTTON_Callback
在用户单击模拟肿瘤生长此回调使用适当的参数值和给药计划运行模拟,以计算肿瘤重量随时间的变化。在未部署的模型版本中,它调用sbiosimulate
.
函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%%Simulate model&get tumor profile–非部署版本 sd=sbiosimulate(型号,''(cellLine phiVar]、[dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,“w”);% <剪>
对于导出的模型,我们将替换sbiosimulate
具有模拟
.
函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%%Simulate model&get tumor profile–已部署版本 sd =模拟(模型、initValues [dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,“w”);% <剪>
设置生成报表
利用MATLAB生成报表™ 我们生成一个捕获模型PK/PD响应、模型参数和剂量计划的文档。我们的应用程序将生成一个名为“myreport.PDF”的PDF文档。此回调使用MATLAB Report Generator 4.0(R2014b)中提供的新文档对象模型(DOM)API,它允许我们以编程方式构建报告。
%---在按下导出按钮时执行。函数Export_PUSHBUTTON_Callback (hObject eventdata处理)%导出按钮的对象句柄(请参见GCBO)%eventdata保留-将在未来版本的MATLAB中定义%handles结构,带有句柄和用户数据(请参见GUI数据)%%%Generate report%%%Initialize%%导入DOM设置 进口mlreportgen.dom*;%使它可部署使用MATLAB编译器makedomCompileable();%创建文档rpt =文档(“我的报告”,“pdf”);%%%%%%创建主节%sh=标题(2,“联合治疗对肿瘤生长的模拟作用”);b =边界();b.BottomStyle =“单身”;b.BottomColor =浅灰色的;b.底部宽度=“1pt”;h.Style=[h.Style{Color(“DarkOrange”),b}];追加(rpt,h);p=附加(rpt,段落(“*自动生成使用MATLAB报告生成器4.0 (R2014b)。”));p.Style={FontFamily(“Arial”),字体大小(“10磅”)};%%%%%%创建设置部分:%SNIP>tableData={。。。“细胞系:”, cellLineName {1};'初始肿瘤重量(g):'initialTumorWeight};表=表(大小(tableData, 1));追加(rpt、表);%%%%%%创建结果部分:%SNIP>hFig=数字;%肿瘤重量轴hax = copyobj(处理。TumorWeight_AXES hFig);集(hax,“单位”,“正常化”);集(hax,“位置”,[0.15 0.30 0.7 0.6]);%剂量轴hax = copyobj(处理。Dose_AXES hFig);集(hax,“单位”,“正常化”);集(hax,“位置”,[0.15 0.15 0.7 0.15]);%设置尺寸(英寸)集(hFig,“单位”,“英寸”);Pos=get(hFig,“位置”);集(hFig,“位置”,[Pos(1:2)6 5]);套件(hFig,“文件位置”,[0 0 6 5]);%打印并附加到报告打印(hFig,“-dmeta”,“plot1.emf”);img =图像(“plot1.emf”);img。宽度=“6”;img。身高=“5”;追加(rpt,段落(img));%%查看报告关闭(rpt);rptview (“我的报告”,“pdf”);% <剪>
在MATLAB中测试应用
我们执行肿瘤生长抑制
命令在MATLAB中启动应用程序。当应用程序启动时,我们指定细胞系、初始肿瘤重量和给药计划,然后单击模拟肿瘤生长按钮开始模拟。
该图显示了四种不同处理的模拟结果(图6)。
我们点击出口按钮生成显示结果的PDF文件(图7)。
我们现在准备创建一个独立的应用程序,可以分发给没有安装MATLAB的研究人员。
部署应用程序
下面的MATLAB命令定位所有文件和路径依赖项,并调用MATLAB Compiler命令来编译肿瘤生长抑制
部署申请:
%注意,这假设所有附加的适用文件都在路径上additionalFiles = [{“modelFile.mat”,“Summary.rpt”}…导出模型依赖文件];%在本例中,我们以编程方式构造| mcc |%命令:mccommand=[“mcc - m TumorGrowthInhibition.m”...sprintf (“-a%s”,附加文件{:}];%执行| mcc |命令。eval (mccCommand)
编译完成后,将生成一个可执行文件(.exe),并使用MATLAB编译器运行时(MCR)分发。MCR是一组共享库,允许用户在没有安装MATLAB的计算机上执行已编译的MATLAB应用程序。
摘要:应用工作流
您可以使用本文中概述的流程将您自己的SimBiology模型之一部署为独立应用程序。首先在MATLAB中加载模型并创建一个导出的SimBiology模型出口
和保存
命令。接下来,使用GUIDE构建一个简单的接口,并编写回调函数,以通过接口控制元素访问SimBiology模型。最后,在MATLAB中测试应用程序后,使用MATLAB编译器进行编译,并在未安装MATLAB的计算机上重新测试生成的可执行文件。
1.Koch,G.,Walz A.,Lahu,G.,和Schropp,J.(2009)联合治疗的肿瘤生长和抗癌效应建模。药代动力学和药效学杂志。36:179-197。
2.该工作流的第一步是构建和描述模型。这一步由Koch等人完成,虽然本文提供了该方法的概述,但没有详细描述。看到在SimBiology中建立模型要了解有关此步骤的更多信息。
3.图1中未显示基本利率方程。请参考Koch等人或SimBiology下载应用程序有关模型和实现细节。
4.SimBiology项目文件(*.sbproj)与MATLAB编译器不兼容。