function output = callbpmpd(interfacedata) % Author Johan Löfberg % $Id: callbpmpd.m,v 1.4 2005/05/07 13:53:20 joloef Exp $ % Retrieve needed data options = interfacedata.options; F_struc = interfacedata.F_struc; c = interfacedata.c; K = interfacedata.K; x0 = interfacedata.x0; Q = interfacedata.Q; lb = interfacedata.lb; ub = interfacedata.ub; if ~isempty(F_struc) A =-F_struc(1:end,2:end); b = F_struc(1:end,1); e = [zeros(K.f,1);-ones(K.l,1)]; else A = []; b = []; e = []; end if isempty(ub) | all(isinf(lb)) llist = []; lval = []; else llist = find(~isinf(lb)); lval = lb(llist); end if isempty(ub) | all(isinf(ub)) ulist = []; uval = []; else ulist = find(~isinf(ub)); uval = ub(ulist); end Q = 2*Q; b = full(b); c = full(c); if nnz(Q)==0 Q = []; end opts = options.bpmpd.opts; if options.savedebug ops = options.quadprog; save bpmpdebug Q A b c e llist lval ulist uval opts end if options.showprogress;showprogress(['Calling ' interfacedata.solver.tag],options.showprogress);end solvertime = clock; [x,y,s,w,how] = bp(Q, A, b, c, e,llist,lval,ulist,uval,opts); if interfacedata.getsolvertime solvertime = etime(clock,solvertime);else solvertime = 0;end problem = 0; % Internal format for duals D_struc = -y; switch how case 'optimal solution' problem = 0; case 'infeasible primal' problem = 1; case 'infeasible dual' problem = 2; otherwise problem = 11; end % Save all data sent to solver? if options.savesolverinput solverinput.A = A; solverinput.b = b; solverinput.c = c; solverinput.Q = Q; solverinput.e = e; solverinput.llist = llist; solverinput.lval = lval; solverinput.ulist = ulist; solverinput.uval = uval; solverinput.bpoptss = bpopt; else solverinput = []; end % Save all data from the solver? if options.savesolveroutput solveroutput.x = x; solveroutput.y = y; solveroutput.s = s; solveroutput.w = w; solveroutput.how=how; else solveroutput = []; end % Standard interface output.Primal = x; output.Dual = D_struc; output.Slack = []; output.problem = problem; output.solverinput = solverinput; output.solveroutput= solveroutput; output.solvertime = solvertime;