manbet体育手机客户端


fixanddive.m


实现一个简单的MIP启发式。狗万app足彩放松模型,根据分数对变量进行%排序,并固定最接近整数变量的分数变量的25%。重复,直到松弛是整数可行或%线性不可行。%读取模型fprintf('读取模型%s\n', filename);模型= gurobi_read(文件名);关口=大小(模型。, 2);实例变量=找到(模型。vtype ~ = ' C ');if length(ivars) <= 0 fprintf('模型的所有变量都是连续的,什么都不做\n');返回;%保存vtype,并将所有变量设置为连续vtype = model.vtype; model.vtype = repmat('C', cols, 1); params.OutputFlag = 0; result = gurobi(model, params); % Perform multiple iterations. In each iteration, identify the first % quartile of integer variables that are closest to an integer value % in the relaxation, fix them to the nearest integer, and repeat. frac = zeros(cols, 1); for iter = 1:1000 % See if status is optimal if ~strcmp(result.status, 'OPTIMAL') fprintf('Model status is %s\n', result.status); fprintf('Can not keep fixing variables\n'); break; end % collect fractionality of integer variables fracs = 0; for j = 1:cols if vtype(j) == 'C' frac(j) = 1; % indicating not integer variable else t = result.x(j); t = t - floor(t); if t > 0.5 t = t - 0.5; end if t > 1e-5 frac(j) = t; fracs = fracs + 1; else frac(j) = 1; % indicating not fractional end end end fprintf('Iteration %d, obj %g, fractional %d\n', iter, result.objval, fracs); if fracs == 0 fprintf('Found feasible solution - objective %g\n', result.objval); break; end % sort variables based on fractionality [~, I] = sort(frac); % fix the first quartile to the nearest integer value nfix = max(fracs/4, 1); for i = 1:nfix j = I(i); t = floor(result.x(j) + 0.5); model.lb(j) = t; model.ub(j) = t; end % use warm start basis and reoptimize model.vbasis = result.vbasis; model.cbasis = result.cbasis; result = gurobi(model, params); end