Skip to content

Commit

Permalink
Working version of #1410 Support nonlinearities in Gurobi
Browse files Browse the repository at this point in the history
  • Loading branch information
Johan Löfberg committed May 31, 2024
1 parent 5d2de5e commit 7b7d034
Show file tree
Hide file tree
Showing 3 changed files with 377 additions and 3 deletions.
5 changes: 3 additions & 2 deletions solvers/callgurobi.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
interfacedata.options.gurobi = [];
end
end

options = interfacedata.options;
% Keep track if we add variables to normalize SOCPs
nOriginal = nnz(interfacedata.variabletype == 0);
model = yalmip2gurobi(interfacedata);
model = yalmip2gurobinonlinear(interfacedata);

if interfacedata.options.savedebug
save gurobidebug model
Expand Down
27 changes: 26 additions & 1 deletion solvers/definesolvers.m
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,10 @@
solver(i).constraint.sos2 = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
solver(i).evaluation = 1;
i = i+1;

% The general nonlinear Gugobi definition is placed below fmincon

solver(i) = qpsolver;
solver(i).tag = 'CPLEX';
solver(i).version = 'IBM';
Expand Down Expand Up @@ -1640,6 +1641,30 @@
solver(i).dual = 0;
i = i+1;

% Gurobi nonlinear solver is placed down here to make sure it is not
% selected as a general nonlinear programming solver
solver(i) = qpsolver;
solver(i).tag = 'GUROBI';
solver(i).version = 'NONLINEAR';
solver(i).checkfor= {'gurobi'};
solver(i).call = 'callgurobi';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.sos2 = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
solver(i).evaluation = 1;
i = i+1;

% % ***************************************
% % SOMEWHAT MORE COMPLEX DEFINITIONS OF
% % THE INTERNAL MICP SOLVER
Expand Down
Loading

0 comments on commit 7b7d034

Please sign in to comment.