指定一个成本函数优化simbiology模型响应的范围

1视图(30天)
我想为我的模型生成virual人口模拟使用均匀分布对一些从我的simbiology模型参数集。然后我指定一些if语句来减少simdata下降在生理范围内和执行一些计算如:意思是,中位数,马克斯,和最小。接下来,我想speicfy成本函数优化我的模型响应对所选的参数集。我怎么能正确地指定成本函数的simulaiton数据?给出的成本函数为: ;l和u的上下边界模型状态的合理范围。我已经提供了simdataReduced和timeVector帮助解决这个问题。我怎么能指定Mi (p)在这种情况下吗?
% % simdataReduced新的脚本执行分析
stopTime = simdataReduced (1) .Time(结束);
timeVector = linspace (0 stopTime 700);
simdataResampled =重新取样(simdataReduced timeVector);
%的“堆栈”矩阵仿真结果和平均
%计算第25和第75百分位数
simdataResampled.Data stackedData =猫(3日);
meanData =意味着(stackedData, 3);
maxData = max (stackedData [], 3);
minData = min (stackedData [], 3);
medianData =值(stackedData, 3);
prc75 = prctile (stackedData 75 3);
prc25 = prctile (stackedData, 25岁,3);
% % - - - - - - - - - - - - - - - - - -函数脚本- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
函数J = computeCost (X, y,θ)
% COMPUTECOST线性回归计算成本
% J = COMPUTECOST (X, y,θ)使用θ为计算的成本
%对线性回归参数X和y的数据点
%初始化一些有用的值
m =长度(y);%的训练例子(simdataResampled长度)
%你需要返回以下正确的变量
J = 0;
% = = = = = = = = = = = = = = = = = = = = = =你的代码在这里= = = = = = = = = = = = = = = = = = = = = =
%指令:计算θ的特定选择的成本
%你应该设定J成本。
预测= x *θ;
% sqrError =(预测- y) ^ 2;
c = 0.5 *(磅+)
sqrError =(((预测- c) ^ 2)——(ub-c)。^ 2);
J = (max (sqrError), 0)总和;
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
结束
3评论
亚瑟Goldsipe
亚瑟Goldsipe 2022年5月27日
我认为我失踪。听起来我像 M (i P 一些特定的仿真结果(在特定时间特定模拟状态值)的一组参数p .但我认为你已经找到了如何通过观察吗 simdataResampled.Data 。更具体地说,它的样子 simdataResampled (p) . data (t,我) 将计算 t 国家 和参数样本 p 。但如果这不是按照你的意愿移动,我认为这可能是最容易通过这个“活”。If you want to do that, please contact me directly on MATLAB Answers, or reach out to Technical Support.

登录置评。

接受的答案

亚瑟Goldsipe
亚瑟Goldsipe 2022年6月1日
Fearass和我聊天。我发现成本函数本质上是一个修改的一些广场的剩余工资。减少,使他们为零当模拟值在合理范围内。
有了这些信息,我意识到这一点 M (i P 代表一个特定状态的仿真结果在特定时间和特定参数设置。代码,这将是 simdataResampled (p) . data (t,我) 为计算 t ,国家 和参数样本 p 。计算成本函数的代码可以利用“ 隐式的扩张 ”,并使用示例代码中定义的变量可能是这样写的: sum (max (0, (stackedData-c)。^ 2 -(你)。^ 2),“所有”)
6个评论
亚瑟Goldsipe
亚瑟Goldsipe 2022年6月7日
我能想到的几种方法。关键是,你需要做的 的东西 时跟踪参数映射SimData过滤器。我先提供一个简单的改变但建议更“MATLAB-y”方法,长期可能会帮助你。
最简单的事情你能做的就是商店当你添加一个元素的额外信息 simdataResampled 。你可以帮助你创建一个变量映射回样本数量(例如, sampleIndex (j) =我; )。你也可以在用户数据存储参数值本身SimData的财产。例如,如果您使用 sampleValues 从我以前的评论,你可以写 simdataResampled (j)。用户数据= sampleValues(我,:)
但更MATLAB方法是尽可能多的你的代码进行向量化,并避免“增长”向量一个元素一次您目前创建的方式 simdataReduced 。这将有额外的好处。具体来说,我将创建一个逻辑向量 isPlausible 显示每个你的原始样品是否合理。我将使用这个向量(后循环)来创建 simdataReduced 和选择性地识别相关的参数值减少了样本集。具体地说:
% % 2。建立生物结果合理的界限
基于约束的%减少人口规模
n =长度(simdata);
isPlausible = false (n, 1);
i = 1:长度(simdata)%循环超过总数的科目(n在目前的情况下)
(~ x) = max (simdata(我,1). data (:, 7));%浓度
[~ z] = max (simdata(我,1). data (:, 4));%血液水平对于某些生物的结果
idx =找到(simdata(我,1)。时间> = 15 & simdata(我,1)。时间< = 20)
%定义索引复苏后15 - 20天
%恢复至少% 90后15 - 20天我们拒绝的参数集
isPlausible (i) = simdata(我,1). data (1), > = 0.90 & & simdata(我,1). data (x, 7) < = 15100
& & simdata(我,1). data (x, 7) > = 1500
& & simdata(我,1). data (z, 4) > = 232 & & simdata(我,1). data (z, 4) < = 341
& & simdata(我,1). data (idx (1), 1) > = 0.90;
结束
sampleValues =生成(样本);
simdataReduced = simdata (isPlausible);
sampleValuesReduced = sampleValues (isPlausible:);

登录置评。

更多的答案(0)

社区

更多的答案SimBiology社区

类别

找到更多的在扫描参数范围帮助中心文件交换

s manbetx 845


释放

R2021b

社区寻宝

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

开始狩猎!