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

# Matrix Examples

This section includes source code for all of the Gurobi matrix examples. The same source code can be found in the `examples` directory of the Gurobi distribution.

## matrix1

    #!/usr/bin/env python3

    # Copyright 2025, Gurobi Optimization, LLC

    # This example formulates and solves the following simple MIP model
    # using the matrix API:
    #  maximize
    #        x +   y + 2 z
    #  subject to
    #        x + 2 y + 3 z <= 4
    #        x +   y       >= 1
    #        x, y, z binary

    import gurobipy as gp
    from gurobipy import GRB
    import numpy as np
    import scipy.sparse as sp

    try:
        # Create a new model
        m = gp.Model("matrix1")

        # Create variables
        x = m.addMVar(shape=3, vtype=GRB.BINARY, name="x")

        # Set objective
        obj = np.array([1.0, 1.0, 2.0])
        m.setObjective(obj @ x, GRB.MAXIMIZE)

        # Build (sparse) constraint matrix
        val = np.array([1.0, 2.0, 3.0, -1.0, -1.0])
        row = np.array([0, 0, 0, 1, 1])
        col = np.array([0, 1, 2, 0, 1])

        A = sp.csr_matrix((val, (row, col)), shape=(2, 3))

        # Build rhs vector
        rhs = np.array([4.0, -1.0])

        # Add constraints
        m.addConstr(A @ x <= rhs, name="c")

        # Optimize model
        m.optimize()

        print(x.X)
        print(f"Obj: {m.ObjVal:g}")

    except gp.GurobiError as e:
        print(f"Error code {e.errno}: {e}")

    except AttributeError:
        print("Encountered an attribute error")

## matrix2

    #!/usr/bin/env python3

    # Copyright 2025, Gurobi Optimization, LLC

    # This example uses the matrix friendly API to formulate the n-queens
    # problem; it maximizes the number queens placed on an n x n
    # chessboard without threatening each other.
    #
    # This example demonstrates slicing on MVar objects.

    import numpy as np
    import gurobipy as gp
    from gurobipy import GRB

    n = 8

    m = gp.Model("nqueens")

    # n-by-n binary variables; x[i, j] decides whether a queen is placed at
    # position (i, j)
    x = m.addMVar((n, n), vtype=GRB.BINARY, name="x")

    # Maximize the number of placed queens
    m.setObjective(x.sum(), GRB.MAXIMIZE)

    # At most one queen per row; this adds n linear constraints
    m.addConstr(x.sum(axis=1) <= 1, name="row")

    # At most one queen per column; this adds n linear constraints
    m.addConstr(x.sum(axis=0) <= 1, name="col")

    for i in range(-n + 1, n):
        # At most one queen on diagonal i
        m.addConstr(x.diagonal(i).sum() <= 1, name=f"diag{i:d}")

        # At most one queen on anti-diagonal i
        m.addConstr(x[:, ::-1].diagonal(i).sum() <= 1, name=f"adiag{i:d}")

    # Solve the problem
    m.optimize()

    print(x.X)
    print(f"Queens placed: {m.ObjVal:.0f}")

Help and Feedback

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