在 MATLAB 中查找受约束的最大函数的最小值

Finding minimum of max function, subject to constraint, in MATLAB

好的,所以我有一个函数最多可以使用 16 个不同的函数。我想找到这个函数的最小值,条件是这个函数等于另一个函数。这就是代码的样子,(H1,...,H16 都是列向量):

function f = opt(a,b,c)
F1 = a*mean(H1) + b*var(H1)+ c*skewness(H1);
...*more functions here*...
F15 = a*mean(H15) + b*var(H15)+ c*skewness(H15);
F16 = a*mean(H16) + b*var(H16)+ c*skewness(H16);
FVEC = [F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16];
[ max, max_index ] = max(FVEC);
f = max;
end

我想要的约束基本上是上面的函数应该等于列表中的第一个:

opt(a,b,c) = a*mean(H1) + b*var(H1)+ c*skewness(H1)

我想我应该使用 fmincon,但尽管我反复尝试,但我似乎 运行 遇到了问题,而且它看起来不支持依赖于另一个函数的约束(尽管我可能误读了文档)。这是正确的功能吗?解决这个问题的最佳方法是什么?我是 MATLAB 的新手,所以我不熟悉典型的方法。

max 函数是不可微分的。大多数求解器期望平滑函数(包括 fmincon)。幸运的是,有一个简单的线性公式:

min y
y >= v(i) for all i

y 将自动假定 v(i) 的最大值。

你的约束是

y = v(1)

在这种情况下,我们甚至可以删除 min y

这将强制第一组观察值成为最大值 v。我不确定,但这可能会导致模型不可行(如果它不能以这种方式排列 a、b、c)。