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

# sensitivity.m

    function sensitivity(filename)
    % Copyright 2025, Gurobi Optimization, LLC
    %
    % A simple sensitivity analysis example which reads a MIP model
    % from a file and solves it. Then each binary variable is set
    % to 1-X, where X is its value in the optimal solution, and
    % the impact on the objective function value is reported.

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

    model = gurobi_read(filename);
    cols = size(model.A, 2);

    ivars = find(model.vtype ~= 'C');
    if length(ivars) <= 0
        fprintf('All variables of the model are continuous, nothing to do\n');
        return;
    end

    % Optimize
    result = gurobi(model);

    % Capture solution information
    if result.status ~= 'OPTIMAL'
        fprintf('Model status is %d, quit now\n', result.status);
    end

    origx = result.x;
    origobjval = result.objval;

    params.OutputFlag = 0;

    % Iterate through unfixed binary variables in the model
    for j = 1:cols
        if model.vtype(j) ~= 'B' && model.vtype(j) ~= 'I'
            continue;
        end
        if model.vtype(j) == 'I'
            if model.lb(j) ~= 0.0 || model.ub(j) ~= 1.0
                continue;
            end
        else
            if model.lb(j) > 0.0 || model.ub(j) < 1.0
                continue;
            end
        end

        % Update MIP start for all variables
        model.start = origx;

        % Set variable to 1-X, where X is its value in optimal solution
        if origx(j) < 0.5
            model.start(j) = 1;
            model.lb(j) = 1;
        else
            model.start(j) = 0;
            model.ub(j) = 0;
        end

        % Optimize
        result = gurobi(model, params);

        % Display result
        if ~strcmp(result.status, 'OPTIMAL')
            gap = inf;
        else
            gap = result.objval - origobjval;
        end
        fprintf('Objective sensitivity for variable %s is %g\n', ...
            model.varnames{j}, gap);

        % Restore original bounds
        model.lb(j) = 0;
        model.ub(j) = 1;
    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