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

# bilinear.m

    function bilinear
    % This example formulates and solves the following simple bilinear model:
    %  maximize    x
    %  subject to  x + y + z <= 10
    %              x * y <= 2         (bilinear inequality)
    %              x * z + y * z = 1  (bilinear equality)
    %              x, y, z non-negative (x integral in second version)

    % Copyright 2025, Gurobi Optimization, LLC

    % Linear constraint matrix
    m.A = sparse([1, 1, 1]);
    m.sense = '<';
    m.rhs = 10;

    % Variable names
    m.varnames = {'x', 'y', 'z'};

    % Objective function max 1.0 * x
    m.obj = [1; 0; 0];
    m.modelsense = 'max';

    % Bilinear inequality constraint: x * y <= 2
    m.quadcon(1).Qrow = 1;
    m.quadcon(1).Qcol = 2;
    m.quadcon(1).Qval = 1.0;
    m.quadcon(1).q = sparse(3,1);
    m.quadcon(1).rhs = 2.0;
    m.quadcon(1).sense = '<';
    m.quadcon(1).name = 'bilinear0';

    % Bilinear equality constraint: x * z + y * z == 1
    m.quadcon(2).Qrow = [1, 2];
    m.quadcon(2).Qcol = [3, 3];
    m.quadcon(2).Qval = [1.0, 1.0];
    m.quadcon(2).q = sparse(3,1);
    m.quadcon(2).rhs = 1.0;
    m.quadcon(2).sense = '=';
    m.quadcon(2).name = 'bilinear1';

    % Solve bilinear model, display solution.
    result = gurobi(m);
    disp(result.x);

    % Constrain 'x' to be integral and solve again
    m.vtype = 'ICC';
    result = gurobi(m);
    disp(result.x);
    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