如何在fmincon中使用“不等于”不等式约束?

时间:2017-08-08 19:23:01

标签: matlab constraints mathematical-optimization minimization

如何设置解决方案的约束(x1x2),以便在MATLAB中x1 ~= x2x1不是x2)功能fmincon
从数字意义上讲:x1不应接近x2

1 个答案:

答案 0 :(得分:0)

要以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];

但您无法直接使用此Ab,因为这意味着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