Динамическое исправление некоторых переменных при использовании fmincon - PullRequest
0 голосов
/ 01 мая 2018

У меня есть целевая функция MINLP, и я хочу зафиксировать значение некоторых переменных в константе, как в примере, описанном ниже:

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. Как решить эту проблему?

1 Ответ

0 голосов
/ 01 мая 2018

Вы должны использовать другой синтаксис fmincon:

fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

Затем, если вы хотите ограничить только одно из значений, вы можете использовать эти границы:

lb = [1 -Inf -Inf]; 
ub = [1 Inf Inf];

Поскольку вам также необходимо указать входные данные Aeq и beq, не забудьте, что вы можете использовать [] для любых входов, которые вы не хотите / не должны указывать, как показано в this пример в документации:

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)
...