如何设置解决方案的约束(x1
,x2
),以便在MATLAB中x1 ~= x2
(x1
不是x2
)功能fmincon
?
从数字意义上讲:x1
不应接近x2
。
答案 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];
但您无法直接使用此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