functionfixanddive(filename)%% Copyright 2025, Gurobi Optimization, LLC%% Implement a simple MIP heuristic. Relax the model,% sort variables based on fractionality, and fix the 25% of% the fractional variables that are closest to integer variables.% Repeat until either the relaxation is integer feasible or% linearly infeasible.% Read modelfprintf('Reading model %s\n',filename);model=gurobi_read(filename);cols=size(model.A,2);ivars=find(model.vtype~='C');iflength(ivars)<=0fprintf('All variables of the model are continuous, nothing to do\n');return;end% save vtype and set all variables to continuousvtype=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);foriter=1:1000% See if status is optimalif~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 variablesfracs=0;forj=1:colsifvtype(j)=='C'frac(j)=1;% indicating not integer variableelset=result.x(j);t=t-floor(t);ift>0.5t=t-0.5;endift>1e-5frac(j)=t;fracs=fracs+1;elsefrac(j)=1;% indicating not fractionalendendendfprintf('Iteration %d, obj %g, fractional %d\n',iter,result.objval,fracs);iffracs==0fprintf('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 valuenfix=max(fracs/4,1);fori=1:nfixj=I(i);t=floor(result.x(j)+0.5);model.lb(j)=t;model.ub(j)=t;end% use warm start basis and reoptimizemodel.vbasis=result.vbasis;model.cbasis=result.cbasis;result=gurobi(model,params);end