fmincon:强加大于零约束的向量

时间:2012-08-30 20:13:25

标签: optimization matlab

如何使用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,???);

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

1 个答案:

答案 0 :(得分:0)

您可以使用下限:

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

请注意xValssse应该交换(如果他们的名字意味着什么)。

下限lb表示您的决策变量x中的元素永远不会低于lb中的相应元素,这就是您在此之后的内容。

空([])表示您使用线性约束 (例如AbAeq,{{ 1}}),只有下限beq

一些建议:lb是一个非常先进的功能。您最好记住它上面的文档,并使用许多不同的示例问题与它一起玩几个小时。