使用 fmincon 时动态修复一些变量
Dynamically fixing some variables when using fmincon
我有一个 MINLP objective 函数,我想将一些变量值固定为常量,如下所述:
A = [1 1 1];
b = 30;
x1 = zeros(1,3);
y=1;
x = fmincon(@(x)objfun(x,y),x1,A,b);
function f = objfun(x,y)
x(y) = 1;
f = x(1)^2 + x(2)^2 + x(3)^2;
end
然而,变量x
的结果全为零。好像不能把x(1)
强求成1
。如何解决这个问题?
你应该使用不同的语法 fmincon
:
fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
然后,如果您只想限制其中一个值,可以使用这些边界:
lb = [1 -Inf -Inf];
ub = [1 Inf Inf];
因为您还需要指定输入 Aeq
和 beq
,请不要忘记您可以使用 []
作为任何您不需要 want/need 的输入指定,如文档中this example所示:
fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1));
lb = [0,0];
ub = [1,2];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = [0.5,1];
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
我有一个 MINLP objective 函数,我想将一些变量值固定为常量,如下所述:
A = [1 1 1];
b = 30;
x1 = zeros(1,3);
y=1;
x = fmincon(@(x)objfun(x,y),x1,A,b);
function f = objfun(x,y)
x(y) = 1;
f = x(1)^2 + x(2)^2 + x(3)^2;
end
然而,变量x
的结果全为零。好像不能把x(1)
强求成1
。如何解决这个问题?
你应该使用不同的语法 fmincon
:
fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
然后,如果您只想限制其中一个值,可以使用这些边界:
lb = [1 -Inf -Inf];
ub = [1 Inf Inf];
因为您还需要指定输入 Aeq
和 beq
,请不要忘记您可以使用 []
作为任何您不需要 want/need 的输入指定,如文档中this example所示:
fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1));
lb = [0,0];
ub = [1,2];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = [0.5,1];
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)