0

如何使用 fmincon() 施加一个约束,即要优化的向量中的所有值都大于零?

根据文档,我需要一些参数 A 和 b,其中 A*x ≤ b,但我认为如果我将 A 设为 -1 和 b 0 的向量,那么我将针对 x>0 的总和进行优化,而不是x 的每个值大于 0。

以防万一你需要它,这是我的代码。我正在尝试优化向量(x),使得 x 和矩阵(称为 multiplierMatrix)的(分量)乘积形成一个矩阵,其列的总和为 x。

function [sse] = myfun(x)        % this is a nested function
    bigMatrix = repmat(x,1,120) .* multiplierMatrix;
    answer = sum(bigMatrix,1)';
    sse = sum((expectedAnswer - answer).^2);
end

xGuess = ones(1:120,1);
[sse xVals] = fmincon(@myfun,xGuess,???);

如果我需要更好地解释我的问题,请告诉我。提前感谢您的帮助!

4

1 回答 1

0

您可以使用下限:

xGuess = ones(120,1);
lb = zeros(120,1);
[sse xVals] = fmincon(@myfun,xGuess, [],[],[],[], lb);

请注意,xVals并且sse可能应该交换(如果他们的名字意味着什么)。

下限lb意味着您的决策变量x中的元素永远不会低于 中的相应元素lb,这就是您在此处所追求的。

空 ( []) 表示您没有使用线性约束(例如 , A, b, ) Aeqbeq仅使用了下界lb

一些建议:fmincon是一个相当高级的功能。您最好记住上面的文档,并使用许多不同的示例问题玩几个小时。

于 2012-08-30T21:38:18.503 回答