如何在其导数应始终大于 0 的约束下最小化函数

How to minimize a function with the constraint that its derivative should be always greater than 0

我正在尝试在 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呢?

您可以尝试减少 constraint tolerance。同样在问题中,您似乎指的是 objective 函数的导数,而在问题本身中,您似乎希望每一项都大于前一项,如 x1 <= x2 <= x3 < = ... <= xn。我建议为后一个问题提供一个可能的解决方案(第一个问题甚至不会定义局部最优,所以我假设报告的条件是你想要的)。

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

你就打电话

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

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