【问题标题】:fmincon : impose vector greater than zero constraintfmincon : 施加大于零约束的向量
【发布时间】:2012-08-25 15:31:19
【问题描述】:

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

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

【问题讨论】:

  • fmincon 有一个下限参数。阅读帮助。

标签: optimization matlab


【解决方案1】:

你可以使用下限:

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

请注意,xValssse 可能应该交换(如果它们的名称有任何含义)。

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

空 ([]) 表示您没有 使用线性约束(例如,AbAeqbeq),只有下限 @ 987654332@。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多