寻找最优值
解决一个简单的问题
或者至少让我们试试。我有一些数据,我想用一条特定形式的曲线来拟合它。首先让我们看看药代动力学数据。参考:
非线性代数模型的全局优化参数估计。
《计算机与化学工程》,第22卷,补编1,1998年3月15日,第S213-S220页William R.Esposito,Christodoulos A.Floudas。
数据是时间与浓度的对比
T = [3.92, 7.93, 11.89, 23.90, 47.87, 71.91, 93.85, 117.84]
C = [0.163, 0.679, 0.679, 0.388, 0.183, 0.125, 0.086, 0.0624]
我喜欢查看数据,部分是为了确保我没有输入错误,部分是为了对整个系统有一个感觉。事实上,让我们将数据可视化。
图(t,c,“o”)
包含(“时间”)
ylabel (“浓度”)
三室模型
在参考文献中,我们拟合一个3室模型,3个衰减指数的和。
模型=@(b,t)b(1)*exp(-b(4)*t)+b(2)*exp(-b(5)*t)+b(3)*exp(-b(6)*t)
定义优化问题
problem=createoptim问题(“lsqcurvefit”,...
“目标”、模型...
“扩展数据”T“伊达塔”C...
“x0”,一(1,6),...
“磅”, [-10 -10 -10 0 0 0 ],...
“ub”, [ 10 10 10 0.5 0.5 0.5],...
“选项”,最佳选择(“lsqcurvefit”,...
“OutputFcn”,@curvefittingplots迭代,...
“显示”,“没有”))
解决问题
首先直接解决问题一次。
b = lsqcurvefit(问题)
您会注意到,模型没有很好地拟合数据,甚至没有遵循数据的形状。
多部分
让我们看看我们是否可以从不同的角度出发做得更好。
ms=多段;
女士显示器=“国际热核实验堆”;
rng违约
图形
抽搐
[~,fval,exitflag,output,金宝搏官方网站solutions]=运行(毫秒,问题,50)
fval=1.4540e-05
exitflag=1
serialTime=toc;
设想最佳解决方案
曲线设置图迭代(解决方案)金宝搏官方网站
您现在可以看到,第50个不是最佳解决方案,因为最后一个显示的均方误差超过了10倍。
MultiStart与并行计算
现在,我将看看是否可以在本地使用我的所有4个内核作为并行工作线程来提高性能。
ms.UseParallel=true;
gcp;
抽搐;
rng违约
运行(ms,问题,50);
parallelTime = toc;
计算加速
由于游泳池启动时间的原因,在第二次跑步之前,速度可能并不明显。因为我之前就开始了跑步,所以我看到了不错的速度。
加速比=串行时间/并行时间
加速比=2.5014
您是否存在解决方案对起点敏感的问题?
版权所有2021年MathWorks公司。
附录
下面是绘制迭代的代码。
数据库类型曲线点阵图迭代
|
- 类别:
- 优化
评论
如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。