求最优值
解决一个简单的问题
或者至少让我们试试。我有一些数据,我想用一条特定形式的曲线来拟合它。首先让我们看看药代动力学数据。参考:
基于全局优化的非线性代数模型参数估计。
计算机与化学工程,第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个衰减指数的和。
模型= @ (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
我们看看能不能从不同的点开始。
女士= MultiStart;
ms.Display =“通路”;
rng默认的
数字
抽搐
[~,fval,exitflag,output,金宝搏官方网站solutions] = run(ms, problem, 50)
fval = 1.4540 e-05
exitflag = 1
serialTime = toc;
设想最佳解决方案
curvefittingPlotIterates(金宝搏官方网站解决方案)
你现在可以看到,第50个不是最好的解决方案,因为最后一个显示的均方误差要高出10倍。
MultiStart与并行计算
现在,我将看看是否可以在本地使用所有4个内核作为并行工作器来提高性能。
ms.UseParallel = true;
gcp;
抽搐;
rng默认的
运行(女士,问题,50);
parallelTime = toc;
计算加速
由于水池启动时间的关系,在第二轮之前速度可能不会明显加快。自从我更早开始,我就看到了不错的速度。
加速= serialTime / parallelTime
加速= 2.5014
您是否存在解决方案对起点敏感的问题?
版权所有:The MathWorks, Inc.
附录
下面是绘制迭代的代码。
dbtypecurvefittingPlotIterates
|
- カテゴリ:
- 优化
コメント
コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。