在使用sbiosimulate SSA仿真用模型,可见还未得救。

2视图(30天)
我有一个.sbml模型存储在一个xml文件。它包含几个可见。当我plto仿真结果,这些都是统一设置为“1”时,我使用了ssa模拟,然而,可见似乎适用于颂歌模拟。
这是代码:
%获取模型。
模型= sbmlimport (“multistate.xml”);
%的模拟运行。
c = getconfigset(模型);
cs。SolverType =“日晷”;
cs。StopTime = 10.0;
[t_ode x_ode,名称]= sbiosimulate(模型);
%绘制可见。
情节(t_ode x_ode (:, end-3:结束)
包含(“时间”)
ylabel (“州”)
传奇(名字(end-3:结束)
%准备SSA模型模拟(见https://uk.mathworks.com/matlabcentral/answers/1582584-simbio-running-stochastic-ssa-simulation-of-sbml-imported-model)。
参数= sbioselect(模型,“类型”,“参数”);
paramIndex = 1:元素个数(参数)
参数=参数(paramIndex);
[~,usageTable] = findUsages(参数);
%更新使用这个参数的任何反应的速率。
如果isempty (usageTable)%如果检查Torkel加上去的。
继续
结束
= usageTable.Component (usageTable反应。属性= =“ReactionRate”);
reactionIndex = 1:元素个数(反应)
反应=反应(reactionIndex);
oldRate = reaction.ReactionRate;
kineticLaw = reaction.KineticLaw;
如果isempty (kineticLaw)
%添加动力
kineticLaw = addkineticlaw(反应,“MassAction”);
其他的
%更新现有的动力学质量作用定律
kineticLaw。KineticLawName =“MassAction”;
结束
kineticLaw。ParameterVariableNames = parameter.Name;
newRate = reaction.ReactionRate;
如果~ strcmp (oldRate newRate)
警告(“反应反应速率% s从% s % s。”,
的反应。名称、oldRate newRate);
结束
结束
结束
%的模拟运行。
c = getconfigset(模型);
cs。SolverType =“ssa”;
cs。StopTime = 10.0;
[t_ssa x_ssa,名称]= sbiosimulate(模型);
%绘制可见。
情节(t_ssa x_ssa (:, end-3:结束)
包含(“时间”)
ylabel (“州”)
传奇(名字(end-3:结束)
%不易观察情节仍然工作。
情节(t_ssa x_ssa (: 1: end-4))
包含(“时间”)
ylabel (“州”)
传奇(名字(1:end-4))
%还可观察到的策划工作使用歌唱时修改后的模型。
c = getconfigset(模型);
cs。SolverType =“日晷”;
cs。StopTime = 10.0;
[t_ode_2 x_ode_2,名称]= sbiosimulate(模型);
情节(t_ode_2 x_ode_2 (:, end-3:结束)
包含(“时间”)
ylabel (“州”)
传奇(名字(end-3:结束)
产生这些情节:
可见可以绘制模拟模式时通过歌唱:
可见通过ssa simualted时都是“1”:
尽管其他物种可以绘制没有问题:
Finnaly,绘制可见当系统已经通过歌唱simualted仍然工作,即使在模型修改。
有错了,可见值ssa算法时没有设置。
最后,我把模型文件(扩展改为. txt,这样mathworks网站会接受它)。

答案(1)

Florian奥古斯汀
Florian奥古斯汀 2022年2月26日
嗨Torkel,
用文件定义的模型分配规则,导入SimBiology作为 重复分配规则 。在模型模拟 随机解算器,SimBiology忽略,任务,或代数规则 如果出现在模型中。SimBiology问题警告MATLAB命令行上对这种行为。所以你看到的情节是修改的初始值。
为了解决这个问题,可以使用 SimBiology可见 。重复赋值规则期间不断评估模型模拟,因此一个有用的工具,如果他们修改的状态(在你的情况中A_P A_unbound_P, A_bound_P, RLA_P)期间使用模拟。这种情况似乎并不在你的模型。在这种情况下,您可以使用SimBiology观察记录它们,这只是评估仿真完成后。仿真结果是完全一样的在你的模型中,但你将能够记录这些状态。下面是一个例子你可以这样做:
%获取模型。
模型= sbmlimport (“multistate.xml”);
%将观察到的物种和规则从模型
observableSpecies = sbioselect(模型,“名称”,(“A_P”,“A_unbound_P”,“A_bound_P”,“RLA_P”]);
repAsgRules = sbioselect(模型,“RuleType”,“repeatedAssignment”);
删除(observableSpecies);
删除(repAsgRules);
%添加可见(这些都是相同的表达式中使用的分配规则用文档中)
addobservable(模型,“A_P”,“(Y ~ P, r ! 1) .L (r。2) r (l 1 ! ! 2)] + [(Y ~ P, r ! 1) r(! 1左)]+ [(Y ~ P, r)]”)”
addobservable(模型,“A_unbound_P”,“0 + ((Y ~ P, r))”);
addobservable(模型,“A_bound_P”,“(Y ~ P, r ! 1) .L (r。2) r (l 1 ! ! 2)] + [(Y ~ P, r ! 1) r(! 1左)]”);
addobservable(模型,“RLA_P”,“0 + [(Y ~ P, r ! 1) .L (r。2) r (l 1 ! ! 2))”);
%……继续你的脚本。
我希望这可以帮助。
最好的,
弗洛里安
2的评论
Florian奥古斯汀
Florian奥古斯汀 2022年4月6日
编辑:Florian奥古斯汀 2022年4月6日
嗨Torkel,
“结束的时候 addobservables 调用一个错字,这应该是一个分号。
你的第二个问题,你可以从我以前回答的自动化流程循环所有规则,不需要被评估在模型仿真,并将其替换为可见。这是一个例子:
%获取模型。
模型= sbmlimport (“multistate.xml”);
%将物种和规则从模型和用可见取而代之。
repAsgRules = sbioselect(模型,“RuleType”,“repeatedAssignment”);
规则= repAsgRules '
%得到左边和右边的规则。下一行假设
%的规则字符串只包含一个等号。如果这是
%不这样,你可能不得不诉诸regexp分裂
%的字符串到令牌。
令牌= strsplit (rule.Rule,“=”);
[ruleLhs, ruleRhs] =交易(令牌{:});
%删除规则及其左手边;
%这个假定组件在左手的名字
%的规则模型中是独一无二的。如果这是
%不是这样,您可以添加更多的sbioselect限定符。
组件= sbioselect(模型,“名称”,ruleLhs);
ruleString = sbioselect(模型,“名称”,ruleRhs);
删除(组件);
删除(规则);
%添加可观察到的
addobservable(模型、ruleLhs ruleRhs);
结束
你引用的警告,提醒你,SimBiology规则是忽略了在随机模拟(看到这个 参考页面 )。你不应该使用随机动力学模型与活跃的重复分配规则。在某些情况下可以取代这些规则与可见种以上。然后你不会看到这些警告当模拟模型与随机解算器。
我希望这可以帮助。
弗洛里安

登录置评。

社区

更多的答案SimBiology社区

类别

找到更多的在导入数据帮助中心文件交换

下载188bet金宝搏


释放

R2021b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!