主要内容

优化模拟或常微分方程

什么是优化模拟或ODE?

有时,目标函数或非线性约束函数值只能通过模拟或常微分方程(ODE)的数值解来获得。这类优化问题有几个共同的特点和挑战,在潜在问题及解决方案金宝搏官方网站

有关优化ODE的基于问题的示例,请参见适合的颂歌,具体问题具体分析.有关基于求解器的示例,请参见拟合常微分方程(ODE)

优化Simulink金宝app®模型容易,试用使用金宝app仿真软件优化设计™

潜在问题及解决方案金宝搏官方网站

有限差分问题

最优化工具箱™求解器在内部使用目标函数和约束函数的导数。默认情况下,他们使用有限差分近似的形式来估计这些导数

F x + δ F x δ

F x + δ F x δ 2 δ

这些有限差分近似可能是不准确的,因为:

  • 很大的价值δ允许更多的非线性影响有限差分。

  • 小值δ由于数值的精度有限,导致不准确。

具体来说,对于ode的模拟和数值解:金宝搏官方网站

  • 模拟通常对参数的微小变化不敏感。这意味着如果你使用的微扰太小δ,模拟可以返回一个伪估计导数为0。

  • 微分方程的模拟解和数值解在函数评价中都存在误差。金宝搏官方网站在有限差分近似中,这些误差会被放大。

  • ode的数值解引入的噪声值远远大于机器精度。这种噪声可以在有限差分近似中被放大。

  • 如果一个ODE求解器使用可变步长,那么有时在求值时的ODE步数Fx+δ)的计算步骤数可能不同Fx).这种差异可能会导致返回值的虚假差异,从而产生对导数的误导性估计。

有限差分的建议

使用直接搜索来避免有限差分。如果你有全局优化工具箱许可证,您可以尝试使用patternsearch(全局优化工具箱)解算器。patternsearch不尝试估计梯度,所以不受限制在有限差分问题

如果你使用patternsearch对于昂贵(耗时)的函数计算,使用缓存选择:

选择= optimoptions (“patternsearch”“缓存”“上”);

如果你不能使用patternsearch,并且有一个相对低维的无约束极小化问题,请尝试fminsearch代替。fminsearch不使用有限差分。然而,fminsearch不是一个快速或可调的求解器。

集合更大的有限差分。有时你可以避免有限差分问题采用比默认值更大的有限差分步长。

  • 如果你有MATLAB®R2011b或更高版本,将有限差分步长选项设置为大于默认值的值sqrt (eps)eps ^ (1/3),如:

    • R2011b-R2012b:

      选择= optimset (“FinDiffRelStep”1 e - 3);
    • 对于R2013a-R2015b和一个求解器命名“solvername”

      选择= optimoptions (“solvername”“FinDiffRelStep”1 e - 3);
    • 对于R2016a和一个求解器命名“solvername”

      选择= optimoptions (“solvername”“FiniteDifferenceStepSize”1 e - 3);

    如果在不同的分量中有不同的尺度,将有限差分步长设置为与分量尺度成比例的向量。

  • 如果你有MATLAB R2011a或更早,设置DiffMinChange选项设置为大于默认值的值1 e-8,并可能设置DiffMaxChange选择也,如:

    选择= optimset (“DiffMinChange”1 e - 3,“DiffMaxChange”1);

请注意

很难知道如何设置这些有限差分大小。

你也可以设置中心有限差分:

选择= optimoptions (“solvername”“FiniteDifferenceType”“中央”);

使用梯度评估函数。为了避免有限差分估计的问题,你可以在你的目标和非线性约束下给出一个近似梯度函数。记得设置SpecifyObjectiveGradient选项真正的使用optimoptions,如果相关,还可以设置SpecifyConstraintGradient选项真正的

  • 对于某些ODE,你可以在求解ODE的同时数值计算梯度。例如,假设目标函数的微分方程ztx)是

    d d t z t x G z t x

    在哪里x是你最小化的参数向量。假设x是一个标量。然后是它的导数的微分方程y

    y t x d d x z t x

    d d t y t x G z t x z y t x + G z t x x

    在哪里ztx)为目标函数ODE的解。你可以解出ytx)在同一个微分方程组中ztx).这个解不需要用有限差分就能求出近似导数。对于nonscalarx,每个组件解一个ODE。

    关于这种方法的理论和计算方面,请参阅Leis和Kramer[2].此方法和有限差分方法的计算经验见Raue等人的图7。[3]

  • 对于某些模拟,您可以在模拟中估计一个导数。例如,Reiman和Weiss所描述的似然比技术[4]或Heidelberger、Cao、Zazanis和Suri分析的微扰分析技术[1]在估计目标函数或约束函数的相同模拟中估计导数。

使用更严格的ODE公差。您可以使用odeset设置AbsTolRelTolODE求解器的容忍值低于其默认值。然而,选择太小的容差可能导致缓慢的解决方案、收敛失败或其他问题。金宝搏官方网站永远不要选择一个容忍小于1 e-9RelTol.每个组件的下限AbsTol取决于你问题的严重程度,所以没有建议。

随机函数问题

如果模拟使用随机数,那么对目标或约束函数进行两次计算可能会返回不同的结果。这影响了函数估计和有限差分估计。有限差分的值可能是由随机性引起的变化所决定的,而不是由不同的评价点引起的变化xx+δ

关于随机函数的建议

如果您的模拟使用来自您控制的流的随机数,在每次评估您的目标或约束函数之前重置随机流。这种做法可以减少结果的可变性。例如,在目标函数中:

函数f = mysimulation(x) RNG默认%或任何其他重置方法…结束

有关详细信息,请参见生成可重复的随机数

目标和约束条件的通用计算

通常,在相同的模拟运行期间,模拟同时评估目标函数和约束条件。或者,目标约束函数和非线性约束函数都使用同样昂贵的计算。连接器等fmincon分别计算目标函数和非线性约束函数。这可能会导致效率的巨大损失,因为求解器会两次调用昂贵的计算。为了解决这个问题,可以使用目标约束与非线性约束在同一函数中,或者,当使用基于问题的方法时,基于问题的串行或并行中具有共同函数的目标和约束

目标或约束函数评估失败

对于某些参数值,您的模拟或ODE可能会失败。

对评估失败的建议

设置适当的界限。虽然您可能不知道参数空间的所有限制,但请尝试为所有参数(包括上参数和下参数)设置适当的界限。这可以加速您的优化,并可以帮助求解器避免有问题的参数值。

使用尊重边界的求解器。中描述的迭代会违反约束,有些算法可以在中间迭代时违反边界约束。为了优化模拟和ode,请使用总是遵守约束的算法。看到满足约束条件的算法

返回NaN。如果您的模拟或ODE求解器没有成功地评估一个目标或非线性约束函数在某一点x,让函数返回.最优工具箱和全局优化工具箱求解器有鲁棒性尝试不同的迭代步骤,如果他们遇到价值。这些健壮的解决方案包括:

  • fmincon内点sqp,trust-region-reflective算法

  • fminunc

  • lsqcurvefit

  • lsqnonlin

  • patternsearch

有些人倾向于返回一个任意大的目标函数值在一个不成功的,不可行的,或其他不好的点。然而,这种做法可能会使求解器感到困惑,因为求解器没有意识到返回值是任意的。当你返回,求解器可以尝试在不同的点进行计算。

参考书目

海德堡,P., X.-R。曹,M. A.扎扎尼斯,R.苏瑞。微扰分析估计的收敛性《管理科学》34卷第11期,第1281-1302页,1988。

Leis, J. R.和Kramer, M.A.常微分方程描述系统的联立解及灵敏度分析。ACM反式。数学软件,Vol. 14, No. 1, pp. 45-60, 1988。

Raue, A.等。从系统生物学定量动力学建模中吸取的教训。可以在https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0074335, 2013年。

莱曼,m.i.和A. Weiss。通过似然比进行敏感性分析第十八届冬季模拟大会, ACM,纽约,第285-289页,1986。