MATLAB Answers

Non-linear constraints with several input variables in fmincon

11 views (last 30 days)
javm6
javm6 on 16 Sep 2021
Edited: Matt J on 22 Sep 2021
Hello everyone,
I am trying to solve the following optimization problem with fmincon:
To do this, I have made the following code:
fun = @(x) x'*L*x;
nonlcon = @(x) consfun(A,B,x);
x = fmincon(fun,x0,[],[],[],[],[],[],nonlcon);
Where ''consfun'' is the following function:
function [c,ceq] = consfun(A,B,x)
c = (norm(A*x,inf)/b)-D);
ceq = [];
end
However, the final solution, x, does not satisfy the non-linear constraint so I wonder if the code is correct in relation to the optimisation problem posed.
Can anyone help me?
Thank you very much for your time!
  1 Comment
Alan Weiss
Alan Weiss on 20 Sep 2021
Did fmincon claim to give a feasible solution? If so, then in what way was the constraint violated? I mean, was consfun(A,B,x) > 0? If not, then you may need to search for a feasible solution. See Converged to an Infeasible Point.
Alan Weiss
MATLAB mathematical toolbox documentation

Sign in to comment.

Accepted Answer

Matt J
Matt J on 20 Sep 2021
Edited: Matt J on 20 Sep 2021
Your nonlinear constraints are not differentiable. That doesn't always spell disaster, but it breaks the assumptions of fmincon. Also, since your problem can be reformulated as a quadratic program, it would be better to use quadprog.
[m,n]=size(A);
e=ones(m,1);
Aineq=[A;-A];
bineq=[(B+b*D).*e ; -(B-b*D).*e];
x=quadprog(L,zeros(n,1),Aineq,bineq);
  4 Comments
Matt J
Matt J on 22 Sep 2021
The reformulation is equivalent to the original, posted problem with the inf-norm constraints. The inf-norm constraint in the can be re-written as the linear system,
-b*D <= A*x-B <= b*D
or
A*x <= B+b*D
-A*x <= -(B-b*D)

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by