Clear Filters
Clear Filters

Why is fmincon not finding the right solution?

2 views (last 30 days)
Hello, i have the following Problem:
min x1,x2
s.t x1,x2 >= 1
x1 mod 1 = 0 %that i have only integer solutions
x2 mod 1 = 0 %that i have only integer solutions
x1 + x2 = 4
What i want to calculate first is the utopia Point of this Problem so:
u1 = min {f1, x \in X}
u2 = min {f2, x \in X}
Thats my Code to it:
f1 =@(x) x(1);
f2= @(x) x(2);
Aneq = [0 -1;
-1 0];
bneq = [-1; -1];
Aeq = [1,1];
beq = 4;
ceq = cell(2,1);
ceq{1} = @(x) mod(x(1),1);
ceq{2} = @(x) mod(x(2),1);
function [u] = generate_Utopia_Point(f1,f2,Aneq,bneq,Aeq,beq,ceq)
nonlincon = @constr;
function [cneq,cq] = constr(x)
cneq = [];
cq = zeros(size(ceq,1),1);
for j=1:size(ceq,1)
cq(j) = ceq{j,1}(x);
x0 = [1,3] % x0 is generated by a function which just takes an efficient solution of the Problem
opts = optimoptions(@fmincon,'Algorithm','sqp', 'MaxFunctionEvaluations',300000,'FunctionTolerance', 1e-10,'ConstraintTolerance',1e-10);
problem1 = createOptimProblem('fmincon','objective',f1,'x0',x0,'Aineq',Aneq,'bineq',bneq,'Aeq',Aeq,'beq',beq,'nonlcon',nonlincon,'options',opts);
x1 = run(GlobalSearch,problem1);
u(1) = f1(x1);
problem2 = createOptimProblem('fmincon','objective',f2,'x0',x0,'Aineq',Aneq,'bineq',bneq,'Aeq',Aeq,'beq',beq,'nonlcon',nonlincon,'options',opts);
x2 = run(GlobalSearch,problem2);
u(2) = f2(x2);
Normally the solution should be x1 = (1,3) and x2 = (3,1) and therefore u = (1,1).
But if i run the code sometimes the solution is x1 = (1,3) and x2=(1,3) and therefore u = (1,3) and sometimes i get x1 = (3,1) and x2=(3,1) and therefore u = (3,1).
If i change for example x0 = [0,0] (for fmincon) the solution (x1 = (1,1) and x2=(1,1)) is not even efficient.
Does someone see a mistake in my Code?

Accepted Answer

Alan Weiss
Alan Weiss on 22 Aug 2022
Your mistake is trying to use fmincon to solve a problem with integer constraints. fmincon does not apply to this type of problem. Even if you manage to get fmincon not to throw an error, it is never going to do anything useful for this type of problem.
The only three solvers that handle integer constraints are intlinprog, which requires a linear objective function and linear constraints, and ga and surrogateopt, which are part of Global Optimization Toolbox, and allow nonlinear objectives and constraints.
Alan Weiss
MATLAB mathematical toolbox documentation

More Answers (0)


Community Treasure Hunt

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

Start Hunting!