Fixanddive.m.
函数fixanddive(文件名)%2018版权所有2018,Gurobi优化,LLC %%实施一个狗万app足彩简单的MIP启发式。根据Fractionality放宽模型,%排序变量,并修复最接近整数变量的分数变量的25%。%重复直到放松是整数的可行性或%线性不可行。%读取模型fprintf('读取模型%s \ n',文件名);model = gurobi_read(文件名);cols = size(model.a,2);ivars = find(model.vtype〜='c');如果长度(ivars)<= 0 fprintf('模型的所有变量是连续的,无什么可以做的\ n');返回;终端%保存VTYPE并将所有变量设置为连续VTYPE = MODEM.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