首页 > 解决方案 > 是否可以在 Matlab 中为 fmincon 的内点法定义最大步长(欧几里得距离)?

问题描述

我有兴趣限制 fmincon 的内点方法可以从当前点采取的最大步长。更具体地说,我想确保该方法在每一步都不能移动超过给定的欧几里得距离。该方法最终可能会走得更远,但不会一步到位。因此,换句话说,假设最大欧几里得距离为 1.0,局部优化器可以从 x0 = 3 变为 x = 6,但它至少需要 3 次移动。是否有可能通过其选项之一本地实现这一点,而我不知道这一点?

到目前为止,我尝试将这个方面定义为外部非线性约束。通过这样做,我需要检测到该方法在边界处停止,然后在那里重新启动它(这会重置最大欧几里得距离)。但是,我得到了奇怪的结果,正如这个问题中描述的关于根据约束的不收敛的问题

总结所链接方法的问题,如果您尝试从 -0.4(例如)开始最小化 f(x) = x^2,并将参考约束 1.0 作为最大欧几里得距离,fmincon 将不会移动。然而,它会没有那个约束(事实上,它不应该影响,因为 -0.4 更接近于函数的全局最小值的 1.0,即 0)。这是一些带有和不带有非线性约束的示例代码。没有:

[x, fval] = fmincon(@(x) x^2, -0.4,[],[],[],[], -10, 10);

结果是:x = 1.5231e-11,fval(目标函数的值)= 2.3199e-22。

但是,如果我们添加从一开始不超过 1.0 的参考约束(以欧几里得距离为单位):

[x, fval] = fmincon(@(x) x^2, -0.4,[],[],[],[], -10, 10, @(x) NLConstraint(x, -0.4, 1.0));

前提是:

function [c, ceq] = NLConstraint(x, x0, radius)
    c = norm(x-x0) - radius;
    ceq=[];
end

我们得到 x = -0.4000 和 fval = 0.1600,因此即使在给定半径内可以达到最优值,fmincon 最终也不会移动。为了让它更奇怪,它成功地从 -4 移动到 -3 (所以约束对我来说似乎很有效)。如果您从 -0.7 开始,它甚至会移动。

因此,如前所述,我将非常感谢任何知道如何通过 fmincon 的内点选项定义从当前步骤到下一个步骤的最大欧几里得距离的人(或者,我用外部非-线性约束在1 )中总结和描述。

标签: matlabconstraints

解决方案


推荐阅读