Dynamic-Calibration/utils/YALMIP-master/extras/setupBNB.m

42 lines
1.8 KiB
Matlab
Executable File

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;