【问题标题】:How to minimize a function with the constraint that its derivative should be always greater than 0如何在导数应始终大于 0 的约束下最小化函数
【发布时间】:2017-09-28 16:40:38
【问题描述】:

我正在尝试在 Matlab 中 fmincon 的帮助下优化具有 1500 个变量(瞬时相位)的非线性函数。对最佳变量的约束是获得的最佳变量中连续元素之间的差异应该大于0。如何在成本函数中实现这一点?我使用了非线性约束:

function [c,ceq] = insta_freq(phase)
f=diff(phase);
c=-1*double(min(f));
ceq = [];

优化由:

nonlcon=@insta_freq;
[variable_opt,fval,exitflag,output] = fmincon(fun,ph0,[],[],[],[],[],[],nonlcon,options);

优化应该是约束nonlcon<=0,但在使用fmincon 优化时,这些约束不满足。那么,有没有其他方法可以保证最优变量向量的差值总是大于0呢?

【问题讨论】:

  • 您可以在您的函数中添加一个部分,如果违反这些效果,该部分会给出高错误值。我也遇到了 nonlcon 的问题,但我从来没有找到好的解决方案。
  • 我试过了。但它再次涉及选择一些我想避免的惩罚项及其参数。总之非常感谢!!

标签: matlab constraints nonlinear-optimization


【解决方案1】:

您可以尝试减少constraint tolerance。同样在问题中,您似乎指的是目标函数的导数,而在问题本身中,您似乎希望每一项都大于前一项,如 x1

您可以在矩阵中重写条件 A = [ 1 -1 0 ... 0 ; 0 1 -1 0 ... 0 ; .... 1 -1 ] 所以你的约束是不等式线性约束,简单地写成 Aineq x

然后你打电话

[variable_opt,fval,exitflag,output] = fmincon(fun,ph0,A,b,[],[],[],[],nonlcon,options);

其中 A 和 b 是上面定义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 2019-07-06
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多