Как использовать ограничение "не равно" неравенству в fmincon?
Как я могу установить ограничения для решения (x1
,x2
), чтобы x1 ~= x2
(x1
не является x2
) в функции MATLAB fmincon
?
В числовом смысле: x1
не должен приближаться к x2
,
1 ответ
Выразить ограничение x1 ≠ x2
в виде A*x ≤ b
, это будет один из них:
x(1) – x(2) ≤ –eps % x(2) ≥ x(1) + eps
– x(1) + x(2) ≤ –eps % x(1) ≥ x(2) + eps
Согласно первому, x(2)
должно быть больше чем x(1)
, И согласно второму, x(1)
должно быть больше чем x(2)
, Сочетание выше было бы:
A = [1, -1; -1, 1];
b = [-eps; -eps];
Но вы не можете использовать это A
а также b
непосредственно, потому что это будет означать, что x(1) + x(2) = eps
что не правильно. Таким образом, чтобы найти минимальное значение функции и значение x
для которого он минимален, рассмотрим оба условия по отдельности, т.е. по одному за раз, и посмотрим, что минимизирует больше. т.е.
[x(1,:), fval(1)] = fmincon(Fcn, x0, A(1,:), b(1), [], [], lb, ub, [], options);
[x(2,:), fval(2)] = fmincon(Fcn, x0, A(2,:), b(2), [], [], lb, ub, [], options);
[Minfval, tmpInd] = min(fval); %Finding the minimum value of these
Req_x = x(tmpInd,:); %Required solution