Dynamic-Calibration/utils/YALMIP-master/solvers/callopticlp.m

86 lines
1.7 KiB
Mathematica
Raw Permalink Normal View History

2019-12-18 11:25:45 +00:00
function output = callopticlp(interfacedata)
% Standard input interface
options = interfacedata.options;
F_struc = interfacedata.F_struc;
c = interfacedata.c;
K = interfacedata.K;
lb = interfacedata.lb;
ub = interfacedata.ub;
Q = interfacedata.Q;
showprogress('Calling CLP',options.showprogress);
if isempty(F_struc)
A = sparse([]);
b = [];
else
A = -F_struc(1:K.f+K.l,2:end);
b = F_struc(1:K.f+K.l,1);
end
opts = options.clp;
if length(b)>0
rl = repmat(-inf,length(b),1);
rl(1:K.f) = b(1:K.f);
else
rl = [];
end
ru = full(b);
lb = full(lb);
ub = full(ub);
H = 2*sparse(tril(Q));
if options.savedebug
save clpdebug c A b lb ub opts H
end
solvertime = tic;
[x,fval,exitflag,iter,lambda] = clp(H,full(c), A, rl, ru, lb, ub,opts);
solvertime = toc(solvertime);
% No duals
D_struc = -lambda.dual_row;
switch exitflag
case 0
problem = 0;
case 1
problem = 1;
case 2
problem = 2;
case 3
problem = 3;
case 5
problem = 16;
case 4
problem = 11;
otherwise
problem = -1;
end
infostr = yalmiperror(problem,'CLP');
% Save all data sent to solver?
if options.savesolverinput
solverinput.A = A;
solverinput.b = b;
solverinput.f = c;
solverinput.lb = lb;
solverinput.ub = ub;
else
solverinput = [];
end
% Save all data from the solver?
if options.savesolveroutput
solveroutput.x = x;
solveroutput.fval = fval;
solveroutput.exitflag = exitflag;
solveroutput.iter = iter;
else
solveroutput = [];
end
% Standard interface
output = createOutputStructure(x(:),D_struc,[],problem,infostr,solverinput,solveroutput,solvertime);