当求解成功时gydF4y2Ba

如果求解成功,会出现什么问题?gydF4y2Ba

求解器可以报告最小化成功,但报告的解决方案可能不正确。对于一个相当简单的例子,考虑最小化函数gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)=gydF4y2BaxgydF4y2Ba3.gydF4y2Ba为gydF4y2BaxgydF4y2Ba在-2和2之间,从这一点开始gydF4y2Ba1/3gydF4y2Ba:gydF4y2Ba

选择= optimoptions (“fmincon”、“算法”,“激活集”);ffun = @ (x) x ^ 3;xfinal = fmincon(ffun,1/3,[],[],[],[],-2,2,[],options)满足约束条件的局部最小值。优化完成的原因是目标函数在可行方向上是不递减的,要在函数容差的默认值内,约束满足的约束条件要在约束容差的默认值内。没有活跃的不平等。xfinal = -1.5056 e - 008gydF4y2Ba

真正的最小值出现在gydF4y2Bax = 2gydF4y2Ba。gydF4y2BafmincongydF4y2Ba给出这个报告是因为函数gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba离这儿很近gydF4y2BaxgydF4y2Ba= 0gydF4y2Ba。gydF4y2Ba

另一个常见的问题是,求解器会找到一个局部最小值,但您可能想要一个全局最小值。有关更多信息,请参见gydF4y2Ba本地与全局优化gydF4y2Ba。gydF4y2Ba

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

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

1.改变起始点gydF4y2Ba

初始点对解有很大的影响。如果您从不同的初始点获得相同或更差的解决方案,您将对自己的解决方万博 尤文图斯案更有信心。gydF4y2Ba

例如,最小化gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)=gydF4y2BaxgydF4y2Ba3.gydF4y2Ba+gydF4y2BaxgydF4y2Ba4gydF4y2Ba从1/4处开始:gydF4y2Ba

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

稍微改变初始点,求解者会找到更好的解:gydF4y2Ba

[xfinal fval] = fminunc(ffun,1/4+.001,options)找到本地最小值。优化完成是因为梯度的大小小于函数容差的默认值。xfinal = -0.7500 fval = -0.1055gydF4y2Ba

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+delta),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], [], [], [], [],…lb,ub,[],options)满足约束条件的局部最小值。优化完成的原因是目标函数在可行方向上是不递减的,要在函数容差的默认值内,约束满足的约束条件要在约束容差的默认值内。主动不平等(到选项范围内)。约束条件= 1e-006):上下ineqlin ineqnonlin 1 x = 1.0e-007 * 0 0.1614 fval = -2.6059e-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

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