寻找最优值
解决简单问题
或者至少让我们试一试。我有一些数据,我想用曲线的特定形式来拟合它。首先让我们看一下药代动力学数据。参考资料如下:
基于全局优化的非线性代数模型参数估计。
计算机与化学工程,第22卷,增刊1,1998年3月15日,第S213-S220页
数据是时间和浓度
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室模型,3个衰减指数的和。
模型= @ (b, t) b (1) * exp (t - b (4) *) + b (2) * exp (t - b (5) *) + b (3) * exp (t - b (6) *)
定义优化问题
问题= createOptimProblem(“lsqcurvefit”,...
“目标”、模型...
“xdata”t“ydata”c...
“x0”的(6),...
“磅”, [-10 -10 -10 0 0 0],...
乌兰巴托的, [10 10 10 0.5 0.5 0.5],...
“选项”optimoptions (“lsqcurvefit”,...
“OutputFcn”@curvefittingPlotIterates,...
“显示”,“没有”))
解决问题
首先直接解决问题一次。
B = lsqcurvefit(问题)
您将注意到,该模型在拟合数据或遵循数据形状方面做得并不出色。
MultiStart
我们看看从不同的点开始是否能做得更好。
ms = MultiStart;
ms.Display =“通路”;
rng默认的
数字
抽搐
[~,fval,exitflag,output,金宝搏官方网站solutions] = run(ms, problem, 50)
Fval = 1.4540e-05
Exitflag = 1
serialTime = toc;
可视化最佳解决方案
curvefittingPlotIterates(金宝搏官方网站解决方案)
现在你可以看到,第50个不是最好的解决方案,因为最后一个显示的均方误差超过10倍。
MultiStart与并行计算
现在,我将看看是否可以将我的所有4个核心作为本地并行工作来提高性能。
ms.UseParallel = true;
gcp;
抽搐;
rng默认的
运行(ms, problem, 50);
parallelTime = toc;
计算加速
由于池启动时间的关系,在第二次运行之前,速度可能不会明显提高。因为我开始得更早,我看到了不错的速度。
speedup = serialTime/parallelTime
加速= 2.5014
你是否遇到了解决方案对起点敏感的问题?
The MathWorks, Inc.版权所有
附录
下面是绘制迭代的代码。
dbtypecurvefittingPlotIterates
- 类别:
- 优化
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。