Как использовать ограничение "не равно" неравенству в 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
Другие вопросы по тегам