主要内容gydF4y2Ba

当解决成功gydF4y2Ba

错了如果解决成功呢?gydF4y2Ba

解算器可以报告,最小化成功了,然而,报告解决方案可以是不正确的。对于一个非常简单的例子,考虑函数最小化gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)=gydF4y2BaxgydF4y2Ba3gydF4y2Ba为gydF4y2BaxgydF4y2Ba2和2之间,从这一点gydF4y2Ba1/3gydF4y2Ba:gydF4y2Ba

选择= optimoptions (“fmincon”、“算法”,“激活集”);ffun = @ (x) x ^ 3;xfinal = fmincon (ffun, 1/3,[]、[][],[], 2, 2,[],选项)局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在默认的功能公差,在默认值和约束满足约束的宽容。没有活跃的不平等。xfinal = -1.5056 e - 008gydF4y2Ba

真实的发生在最低gydF4y2Bax = 2gydF4y2Ba。gydF4y2BafmincongydF4y2Ba给了这个报告,因为函数gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)附近的公寓gydF4y2BaxgydF4y2Ba= 0gydF4y2Ba。gydF4y2Ba

另一个常见的问题是,解算器发现一个局部最小值,但您可能希望全球最低。有关更多信息,请参见gydF4y2Ba本地和全球最适条件gydF4y2Ba。gydF4y2Ba

教训:检查你的结果,即使解决报告“发现”一个局部最小值,或“解决”一个方程。gydF4y2Ba

本节给出验证结果的技术。gydF4y2Ba

1。改变初始点gydF4y2Ba

初始点可以有很大的影响的解决方案。如果你获得相同或更糟糕的解决方案从不同的初始点,你在您的解决方案金宝搏官方网站变得更加自信。gydF4y2Ba

例如,最小化gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)=gydF4y2BaxgydF4y2Ba3gydF4y2Ba+gydF4y2BaxgydF4y2Ba4gydF4y2Ba从1/4点:gydF4y2Ba

ffun = @ (x) x ^ 3 + x ^ 4;选择= optimoptions (“fminunc”、“算法”、“拟牛顿”);[xfinal fval] = fminunc (ffun 1/4,选项)局部最小值。优化完成因为梯度的大小小于默认值函数的宽容。x = -1.6764 e - 008 fval = -4.7111 e - 024gydF4y2Ba

由少量改变初始点,解算器发现一个更好的解决方案:gydF4y2Ba

[xfinal fval] = fminunc (ffun 1/4 +措施,选项)局部最小值。优化完成因为梯度的大小小于默认值函数的宽容。xfinal fval = -0.1055 = -0.7500gydF4y2Ba

x = -0.75gydF4y2Ba是全球解决方案;从其他点不能改善解决方案。gydF4y2Ba

有关更多信息,请参见gydF4y2Ba本地和全球最适条件gydF4y2Ba。gydF4y2Ba

2。检查附近的点gydF4y2Ba

是否有值比报告解决方案,评估你的目标函数和约束在附近的各种观点。gydF4y2Ba

例如,目标函数gydF4y2BaffungydF4y2Ba从gydF4y2Ba错了如果解决成功呢?gydF4y2Ba最后一点gydF4y2Baxfinal = -1.5056 e - 008gydF4y2Ba,计算gydF4y2Baffun (xfinal±Δ)gydF4y2Ba对于一些gydF4y2BaΔgydF4y2Ba:gydF4y2Ba

δ= 1;[ffun (xfinal), ffun (xfinal +δ)ffun (xfinal-delta)] ans = -0.0000 0.0011 -0.0009gydF4y2Ba

目标函数在低gydF4y2Baffun (xfinal-Δ)gydF4y2Ba,所以解决报告一个错误的解决方案。gydF4y2Ba

一个小例子:gydF4y2Ba

选择= optimoptions (@fmincon、“算法”、“有效集”);磅= [0,1];乌兰巴托= [1];ffun = @ (x) (x (1) - (x (1) - x (2)) ^ 2);[x fval exitflag] = fmincon (ffun [1/2 1/3], [], [], [], [],…磅,乌兰巴托,[]选项)局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在默认的功能公差,在默认值和约束满足约束的宽容。活动不平等(在选项。ConstraintTolerance = 1 e - 006):低上层ineqlin ineqnonlin 1 x = 1.0 e - 007 * 0 0.1614 fval = -2.6059 e - 016 exitflag = 1gydF4y2Ba

评估gydF4y2BaffungydF4y2Ba在附近的可行点显示的解决方案gydF4y2BaxgydF4y2Ba不是一个真正的最低:gydF4y2Ba

[ffun([0,措施]),ffun([0,措施]),…ffun([措施,措施]),ffun([措施,措施])]ans = 1.0 e - 003 * -0.0010 -0.0010 0.9960 1.0000gydF4y2Ba

前两列值小于计算最小值gydF4y2BafvalgydF4y2Ba。gydF4y2Ba

如果你有一个gydF4y2Ba全局优化工具箱gydF4y2Ba许可证,您可以使用gydF4y2BapatternsearchgydF4y2Ba(全局优化工具箱)gydF4y2Ba函数检查附近的点。gydF4y2Ba

3所示。检查你的目标和约束函数gydF4y2Ba

仔细检查你的目标函数和约束函数,以确保他们符合你打算解决的问题。建议:gydF4y2Ba

  • 检查你的目标函数的评价几个点。gydF4y2Ba

  • 检查每个不等式约束有正确的信号。gydF4y2Ba

  • 如果你进行了最大化,记得带上负面报道的解决方案。(这个建议假定你最大化函数通过最小化的负面目标。)例如,最大化gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)=gydF4y2BaxgydF4y2Ba- - - - - -gydF4y2BaxgydF4y2Ba2gydF4y2Ba,最大限度地减少gydF4y2BaggydF4y2Ba(gydF4y2BaxgydF4y2Ba)= -gydF4y2BaxgydF4y2Ba+gydF4y2BaxgydF4y2Ba2gydF4y2Ba:gydF4y2Ba

    选择= optimoptions (“fminunc”、“算法”、“拟牛顿”);[x fval] = fminunc (@ (x) - x + x ^ 2, 0,选项)局部最小值。优化完成因为梯度的大小小于默认值函数的宽容。x = 0.5000 fval = -0.2500gydF4y2Ba

    的最大的gydF4y2BafgydF4y2Ba是0.25,负的gydF4y2BafvalgydF4y2Ba。gydF4y2Ba

  • 检查一个不可行点并不会导致一个错误在你的函数;看到gydF4y2Ba迭代可以违反约束gydF4y2Ba。gydF4y2Ba