Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# mip2.m

    function mip2(filename)

    % Copyright 2025, Gurobi Optimization, LLC
    %
    % This example reads a MIP model from a file, solves it and prints
    % the objective values from all feasible solutions generated while
    % solving the MIP. Then it creates the associated fixed model and
    % solves that model.

    % Read model
    fprintf('Reading model %s\n', filename);

    model = gurobi_read(filename);

    cols = size(model.A, 2);

    ivars = find(model.vtype ~= 'C');
    ints = length(ivars);

    if ints <= 0
        fprintf('All variables of the model are continuous, nothing to do\n');
        return;
    end

    % Optimize
    params.poolsolutions = 20;
    result = gurobi(model, params);

    % Capture solution information
    if ~strcmp(result.status, 'OPTIMAL')
        fprintf('This model cannot be solved because its optimization status is %s\n', ...
            result.status);
        return;
    end

    % Iterate over the solutions
    if isfield(result, 'pool') && ~isempty(result.pool)
        solcount = length(result.pool);
        for k = 1:solcount
            fprintf('Solution %d has objective %g\n', k, result.pool(k).objval);
        end
    else
        fprintf('Solution 1 has objective %g\n', result.objval);
    end

    % Convert to fixed model
    for j = 1:cols
        if model.vtype(j) ~= 'C'
            t = floor(result.x(j) + 0.5);
            model.lb(j) = t;
            model.ub(j) = t;
        end
    end

    % Solve the fixed model
    result2 = gurobi(model, params);
    if ~strcmp(result.status, 'OPTIMAL')
        fprintf('Error: fixed model is not optimal\n');
        return;
    end
    if abs(result.objval - result2.objval) > 1e-6 * (1 + abs(result.objval))
        fprintf('Error: Objective values differ\n');
    end

    % Print values of non-zero variables
    for j = 1:cols
        if abs(result2.x(j)) > 1e-6
            fprintf('%s %g\n', model.varnames{j}, result2.x(j));
        end
    end

Help and Feedback

Press `/` or click to search this documentation | Gurobi website | Gurobi community forum
Go to other Gurobi documentation | Gurobi download | Contact support