如何在fmincon中使用'不等于'不等式约束?
问题描述:
如何在MATLAB函数fmincon
中设置解决方案的约束(x1
,x2
),以便x1 ~= x2
(x1
不是x2
)?
数值意义上的:x1
不应该接近x2
。如何在fmincon中使用'不等于'不等式约束?
答
要表达的A*x ≤ b
形式约束x1 ≠ x2
,这将是以下任一:
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(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
你是如何使用fmincon的?您可能需要添加更多脚本才能获得正确答案。当x1接近x2时,你是否尝试使用if语句来标记? – Flynn
我是fmincon新手。 所以我试着用一个函数句柄和低/上限来限制这个函数。当使用相同值的两个参数时,我遇到了一些奇点问题。 '[x1,x2] = fmincon(Fcn,[initPara1,initPara2],[],[],[],[],lb,ub,[],options);' 我该如何标记这个在这个函数中?是否有可能通过第9个输入(nonlcon)和另一个功能手柄来达到它? – FRadar
那么你在哪里得到x1和x2? – Flynn