42 lines
1.8 KiB
Mathematica
42 lines
1.8 KiB
Mathematica
|
|
function [solver,diagnostic] = setupBNB(solver,ProblemClass,options,solvers,socp_are_really_qc,F,h,logdetStruct,parametric,evaluation_based,F_vars,exponential_cone,allsolvers)
|
||
|
|
|
||
|
|
diagnostic = [];
|
||
|
|
|
||
|
|
temp_options = options;
|
||
|
|
temp_options.solver = options.bnb.solver;
|
||
|
|
tempProblemClass = ProblemClass;
|
||
|
|
tempProblemClass.constraint.binary = 0;
|
||
|
|
tempProblemClass.constraint.integer = 0;
|
||
|
|
tempProblemClass.constraint.semicont = 0;
|
||
|
|
localsolver = selectsolver(temp_options,tempProblemClass,solvers,socp_are_really_qc,allsolvers);
|
||
|
|
if isempty(localsolver) | strcmpi(localsolver.tag,'bnb')
|
||
|
|
if isempty(temp_options.bnb.solver)
|
||
|
|
diagnostic.solvertime = 0;
|
||
|
|
diagnostic.info = yalmiperror(-2,'YALMIP');
|
||
|
|
diagnostic.problem = -2;
|
||
|
|
else
|
||
|
|
% User has specified a lower-bound solver, but we failed to use
|
||
|
|
% this. Could be that it doesn't exist, or that it is not
|
||
|
|
% applicable
|
||
|
|
for i = 1:length(solvers)
|
||
|
|
if strcmpi(solvers(i).tag,temp_options.bnb.solver)
|
||
|
|
% Solver exist, hence it is not applicable
|
||
|
|
diagnostic.solvertime = 0;
|
||
|
|
diagnostic.info = yalmiperror(-4,temp_options.bnb.solver);
|
||
|
|
diagnostic.problem = -4;
|
||
|
|
return
|
||
|
|
end
|
||
|
|
end
|
||
|
|
% Solver was not found in list of available solvers, hance user
|
||
|
|
% has specified a solver which doesn't exist
|
||
|
|
diagnostic.solvertime = 0;
|
||
|
|
diagnostic.info = yalmiperror(-3,temp_options.bnb.solver);
|
||
|
|
diagnostic.problem = -3;
|
||
|
|
return
|
||
|
|
end
|
||
|
|
return
|
||
|
|
elseif strcmpi(localsolver.tag,'bmibnb')
|
||
|
|
[localsolver,diagnostics] = setupBMIBNB(localsolver,tempProblemClass,options,solvers,socp_are_really_qc,F,h,logdetStruct,parametric,evaluation_based,F_vars,[],allsolvers);
|
||
|
|
end
|
||
|
|
solver.lower = localsolver;
|