📄 callmplcp.m
字号:
function output = callmpt(interfacedata)
% Author Johan L鰂berg
% $Id: callmplcp.m,v 1.1 2006/03/30 13:28:06 joloef Exp $
% Speeds up solving LPs in mpmilp
global mptOptions
if ~isstruct(mptOptions)
mpt_error
end
% Convert to MPT
Matrices = yalmip2mpt(interfacedata);
% % Convert to colin
% parametric = find(~any(Matrices.G,2) & any(Matrices.E,2));
% nonparametric = find(~(~any(Matrices.G,2) & any(Matrices.E,2)));
% [M,Q,q,T,Tth,t] = lcp_mpqp(Matrices.H,Matrices.F',Matrices.Cf',Matrices.G(nonparametric,:),Matrices.E(nonparametric,:),Matrices.W(nonparametric,:));
% Ht = [Matrices.E(parametric,:) Matrices.W(parametric)];
% [BB,dPiv,dkPiv] = mplcp(M,q,Q,[Matrices.E(parametric,:) Matrices.W(parametric)]);
%
% m = size(M,1);
% A = [eye(m) -M];
% [At,bt] = a2s(Ht);
% bases = BB.bases;
% for i=[1:size(bases,1)]
% iB = inv(A(:,bases(i,:)));
% P(i) = polytope([At;-iB*Q],[bt;iB*q]);
% end;
%
% model{1}.Pn = P;
%model = mpt_solvenode(Matrices,Matrices.lb,Matrices.ub,Matrices,[],options);
% Get some MPT options
options = interfacedata.options;
options.mpt.lpsolver = mptOptions.lpsolver;
options.mpt.milpsolver = mptOptions.milpsolver;
options.mpt.verbose = options.verbose;
if options.savedebug
save mptdebug Matrices
end
if isempty(Matrices.binary_var_index)
showprogress('Calling MPT',options.showprogress);
solvertime = clock;
if options.mp.presolve
[Matrices.lb,Matrices.ub] = mpt_detect_and_improve_bounds(Matrices,Matrices.lb,Matrices.ub,Matrices.binary_var_index,options);
end
model = mpt_solvenode(Matrices,Matrices.lb,Matrices.ub,Matrices,[],options);
solvertime = etime(clock,solvertime);
else
% Pre-solve required on binary problems
options.mp.presolve = 1;
solvertime = clock;
switch options.mp.algorithm
case 1
showprogress('Calling MPT via enumeration',options.showprogress);
model = mpt_enumeration_mpmilp(Matrices,options);
case 2
showprogress('Calling MPT via parametric B&B',options.showprogress);
model = bb_mpmilp(Matrices,Matrices,[],options)
case 3
showprogress('Calling MPT via delayed enumeration',options.showprogress);
model = mpt_de_mpmilp(Matrices,options,[]);
otherwise
end
solvertime = etime(clock,solvertime);
end
if isempty(model)
model = {model};
end
if options.verbose
if ~isempty(model{1})
disp(['-> Generated ' num2str(length(model)) ' partitions.'])
end
end
problem = 0;
infostr = yalmiperror(problem,'MPT');
% Save all data sent to solver?
if options.savesolverinput
solverinput.Matrices = Matrices;
solverinput.options = [];
else
solverinput = [];
end
% Save all data from the solver?
% This always done
if options.savesolveroutput
solveroutput.model = model;
solveroutput.U = interfacedata.used_variables(Matrices.free_var);
solveroutput.x = interfacedata.used_variables(Matrices.param_var);
else
solveroutput = [];
end
% Standard interface
output.Primal = nan*ones(length(interfacedata.c),1);
output.Dual = [];
output.Slack = [];
output.problem = problem;
output.infostr = infostr;
output.solverinput = solverinput;
output.solveroutput= solveroutput;
output.solvertime = solvertime;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -