药代动力学/药效学(PK/PD)和系统药理学模型是评价正在开发药物的重要工具。使用MATLAB®和偶像®,研究人员可以在图形环境中或使用编程工具构建和描述这样的模型。他们可以使用临床前数据来数学地描述动态在活的有机体内新候选药物的行为,并根据模型模拟在人类中进行预测和外推。然后,他们可以分享这些模型,使临床医师、生物学家和研究人员能够更好地评估各种剂量策略的有效性和安全性指标,并探索不同亚群患者的假设情况。
在某些情况下,直接分享素质模型可能并不实用。例如,您的同事可能缺乏访问或不熟悉的Matlab和Simbiology,或者您可能希望锁定模型及其表征,以便其他用户无法无意中改变它。
MATLAB Compiler™允许您将SimBiology模型部署为独立的MATLAB应用程序的一部分。您可以构建一个定制的图形界面,其他研究人员可以使用它来设置和运行模型模拟。然后,您可以编译该应用程序,使研究人员无需安装MATLAB或SimBiology即可使用它。
使用由Koch,Walz,Lahu和Schropp开发的肿瘤模型1作为一个示例,本文描述了一个开发和部署应用程序的工作流,该应用程序用于模拟使用SimBiology构建的机械PK/PD模型2.
示例模型和可部署的应用程序可用于下载.
肿瘤学模型概述
本文中的示例基于Koch等人。肿瘤学模型,用于在响应单一药物的单一药物治疗或涉及同时施用两种药物的组合治疗时表征肿瘤生长。
Koch等人肿瘤模型的SimBiology实现如图1所示3..两种药物的血药浓度均采用独立的单室药代动力学模型进行描述,并采用线性消除途径。肿瘤生长模型在肿瘤室中表示。衰变反应的速率取决于药物A和药物B的血浆浓度和相互作用参数。当药物的血药浓度降至零时,肿瘤动力学被描述为肿瘤生长过程。肿瘤权重定义为肿瘤生长状态和衰退状态之和,即x1+ x2+ x3+ x4。
模型模拟使分析各种联合给药策略对肿瘤抑制的影响成为可能(图2)。
为部署准备模型
为了使用MATLAB编译器共享SimBiology模型,我们首先创建一个导出模型4..
我们使用MATLAB加载SimBiology模型sbioloadproject
.
> > sbioloadproject (“TumorGrowthModel.sbproj”);加载模型
我们用出口
和保存
创建导出的SimBiology模型,并将其保存为MAT文件,该文件将被加载到部署的应用程序中。
>> exportmodel = export(m1);%创建导出模型> >保存modelFile。垫exportedModel%保存导出的模型
请注意,导出的素质模型具有有限的可访问属性集。此外,某些模型功能,包括反应,规则和事件,不能在导出的版本中更改。
构建模型的界面
在创建一个导出的SimBiology模型之后,我们构建一个定制的MATLAB接口。该接口将使不使用MATLAB的非建模人员和研究人员能够调整模型参数,应用剂量计划,并运行模拟(图3)。
使用MATLAB图形用户界面设计环境(GUIDE)工具,我们通过将组件从调色板拖到布局区域来布局界面(图4)。
我们需要修改每个组件的单个属性。例如,我们需要更新标签
接口元素的属性,以便以编程方式轻松访问这些元素。使用命名约定,如<名称> _ <类型>
,提高代码可读性(图5)。
编程函数访问导出的SimBiology模型
在一个基于MATLAB桌面的工作流中,应用程序被编码以访问一个未导出的SimBiology模型。在准备部署时,我们需要更新代码以使用导出的SimBiology模型。
第一步是向MATLAB Compiler表明应用程序使用导出的SimBiology模型。我们通过添加一个指令(通过%#功能
pragma)在引导生成的matlab文件中,TumorGrowthInhibition.m
,它链接到我们保存的GUIDE fig -文件。
函数varargout = TumorGrowthInhibition(变长度输入宗量)%#函数simbiology.export.model
当最终用户与应用程序中的界面控制对象(如菜单或按钮)交互时,特定函数或回调调用。接下来,我们将修改回调函数以使用导出的模型。
在示例应用程序中,我们将修改五个回调以准备部署模型:TumorGrowthInhibition_OpeningFcn, CellLine_POPUP_Callback
那InitialTumorWeight_EDIT_Callback Dosage1_EDIT_Callback,
和SimTumorGrowth_PUSHBUTTON_Callback
.
TumorGrowthInhibition_OpeningFcn
是示例应用程序中的打开函数。它加载模型并在代码中初始化剂量、模型参数和其他属性。初始(未部署)版本使用sbioloadproject
将模型加载到MATLAB中sbiodose
或getdose
创建或编辑现有剂量对象。
函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)%%创建和初始化剂量-未部署的版本%加载项目 项目= sbioloadproject (“TumorGrowthModel.sbproj”);m1 = proj.m1;%服用剂量1d1 = getdose (m1,“药物”);%服用剂量2d2 = getdose (m1,“药物B”);% <剪>
对于部署的应用程序,我们从垫文件加载导出的模型(而不是使用sbioloadproject
)。我们用getdose
更新附加到导出模型的现有剂量对象,因为不能向导出模型添加新的剂量对象。
函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)%%创建并初始化剂量部署版本%加载模型 项目=负载(“modelFile.mat”);m1 = proj.exportedModel;%服用剂量1d1 = getdose (m1,“药物”);%服用剂量2d2 = getdose (m1,“药物B”);% <剪>
CellLine_POPUP_Callback
当用户从弹出菜单中选择单元格行时调用。该功能负责根据用户的选择适当地设置cell line参数。在模型的非导出版本中,这是通过使用单个调用选择适当的变体来完成的SbioSelect.
.
函数cellline_popup_callback(fhref,eventdata,handles)%%设置适当的细胞系名称不变式——非部署版本 cellLine = sbioselect(模型,“类型”那“变异”那“名字”, cellLineName);% <剪>
SimBiology模型变体不能与导出的模型一起使用。对于导出的模型,我们使用valyinfo.
和getIndex
获取和设置组成模型变体的单个模型参数。
函数cellline_popup_callback(fhref,eventdata,handles)%%设置适当的单元格线参数 - 部署版本%获取当前l1和l0值 L1 =模型。valyinfo.(getIndex(model,“L1”));L0 =模型。valyinfo.(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;否则%结尾% <剪>
InitialTumorWeight_edit_Callback.
当用户指定初始肿瘤权重(w0
)。像CellLine_POPUP_Callback
,此回调使用的非部署版本SbioSelect.
设置模型中的参数值。
函数InitialTumorWeight_EDIT_Callback (hObject eventdata处理)%%在模型中设置w0的值——非部署版本 W0 = SBIOSELECT(模型,“类型”那“参数”那“名字”那“w0”);w0。值= str2double (get (hObject,“字符串”));% <剪>
与CellLine_POPUP_Callback
,我们使用valyinfo.
和getIndex
为已部署的应用程序设置导出的SimBiology模型中的值。
函数InitialTumorWeight_EDIT_Callback (hObject eventdata处理)%%在模型中的W0设置值 - 部署版本 w0 =模型。valyinfo.(getIndex(model,“w0”));w0。InitialValue = str2double (get (hObject,“字符串”));% <剪>
Dosage1_EDIT_Callback
当用户指定剂量时间单位时被调用。此回调更新剂量
对象。最初这是通过设置TimeUnits
和时间间隔
直接属性。
函数dosage1_edit_callback(fhref,eventdata,handles)%%设置剂量对象的设置——非部署版本%直接设置时间单位和间隔 dose1.timeUnits = mountunits;dose1.interval = str2double(get(handles.everyvalue1_edit,“字符串”));%将StartTime从天转换为新的时间单位dose1。开始时间= sbiounitcalculator (“天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>
在已部署的应用程序中,TimeUnits
的只读属性是剂量
对象,因此不能直接设置。我们用sbiounitcalculator
并将剂量间隔转换为剂量的现有时间单位。
函数dosage1_edit_callback(fhref,eventdata,handles)%%set dose对象的设置 - 部署版本%无法设置时顺;使用sbiounitcalculator转换间隔 dose1。间隔= sbiounitcalculator (“天”,dose1.timeUnits,str2double(get(handles.everyvalue1_编辑,“字符串”)));%将StartTime从天转换为新的时间单位dose1。开始时间= sbiounitcalculator (“天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>
SimTumorGrowth_PUSHBUTTON_Callback
在用户单击模拟肿瘤的生长按钮。这个回调函数使用适当的参数值和剂量计划运行模拟,以计算肿瘤重量随时间的变化。在模型的非部署版本中,它调用sbiosimulate
.
函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%%模拟模型并获取肿瘤概要文件——非部署版本 sd = sbiosimulate(模型,''(cellLine phiVar]、[dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,'W');% <剪>
对于出口的型号,我们更换sbiosimulate
和模拟
.
函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%%模拟模型和获取肿瘤概要文件 - 部署版本 sd =模拟(模型、initValues [dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,'W');% <剪>
设置生成报表
使用MATLAB Report Generator™,我们生成一个文档,捕获模型的PK/PD响应、模型参数和给药计划。我们的应用程序将生成一个名为“myreport.pdf”的PDF文档。这个回调使用了在MATLAB Report Generator 4.0 (R2014b)中可用的新文档对象模型(DOM) API,它允许我们以编程方式构建报告。
%——在Export_PUSHBUTTON中按按钮时执行。函数Export_PUSHBUTTON_Callback (hObject eventdata处理)% hObject handle to Export_PUSHBUTTON(参见GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles with handles and user data(参见GUIDATA) %% Generate report %%%%%% Initialize %%%%%% % Import DOM settings . html 进口mlreportgen.dom。*;%使它可部署使用MATLAB编译器makedomcompilable();%创建文档rpt =文档(“myReport”那'pdf');%%%%%%创建主节%%%%%% %H =标题(2,'模拟治疗对肿瘤生长的影响);b =边界();b.BottomStyle =“单一”;b.BottomColor =浅灰色的;B.BottomWidth =“1分”;h.Style = [h。风格{颜色(“DarkOrange”),b}];附录(RPT,H);p =附加(RPT,段落(“*自动生成使用MATLAB报告生成器4.0 (R2014b)。”));p.Style = {FontFamily (“天线”), 字体大小('10pt')};%%%%%%创建设置部分%%%%%%% tableData ={…“细胞系:”, cellLineName {1};“初始肿瘤重量(g):”initialTumorWeight};表=表(大小(tableData, 1));追加(rpt、表);%%%%%%创建结果部分%%%%%%% 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 (“myReport”那'pdf');% <剪>
在MATLAB中测试应用程序
我们执行TumorGrowthInhibition
命令在MATLAB中启动应用程序。当应用程序启动时,我们指定细胞系、初始肿瘤重量和给药计划,然后单击模拟肿瘤的生长按钮开始模拟。
该图显示了四种不同处理的模拟结果(图6)。
我们点击了出口按钮以生成显示结果的PDF文件(图7)。
我们现在准备创建一个独立的应用程序,我们可以向没有安装Matlab的研究人员分发。
部署应用程序
下面的MATLAB命令定位所有文件和路径依赖项,并调用MATLAB Compiler命令来编译TumorGrowthInhibition.m
部署应用程序:
%注意,这假设所有附加的适用文件都在路径上additionalFiles = [{“modelFile.mat”那“Summary.rpt”}……exportedModel.DependentFiles];%出于此示例的目的,我们以编程方式构建| MCC |% 命令:mcccommand = [“mcc - m TumorGrowthInhibition.m”...sprintf (' -作为', additionalFiles {:}));%执行|mcc|命令。eval (mccCommand)
编译完成后,将生成一个可执行文件(.exe),并使用MATLAB编译器运行时(MCR)分发。MCR是一组共享库,允许用户在没有安装MATLAB的计算机上执行已编译的MATLAB应用程序。
摘要:应用工作流
您可以使用本文中概述的流程将您自己的SimBiology模型之一部署为独立应用程序。首先在MATLAB中加载模型并创建一个导出的SimBiology模型出口
和保存
命令。接下来,使用GUIDE构建一个简单的接口,并编写回调函数来通过接口控制元素访问SimBiology模型。最后,在MATLAB中测试应用程序后,用MATLAB编译器编译它,并在没有安装MATLAB的计算机上重新测试生成的可执行文件。
1Koch, G., Walz A., Lahu, G., and Schropp, J.(2009)肿瘤生长模型和联合治疗的抗癌作用。药代动力学与药效学杂志36:179-197。
2该工作流的第一步是构建和描述模型。这一步由Koch等人完成,虽然本文提供了该方法的概述,但没有详细描述。看到在SimBiology中建立一个模型了解更多关于此步骤的信息。
3.底层率方程未在图1中显示。请参阅Koch et。al或者SimBiology下载应用程序有关模型和实现细节。
4.SimBiology项目文件(*.sbproj)与MATLAB编译器不兼容。