# bilinear.py

Filter Content By
Version
Languages

### bilinear.py

#!/usr/bin/env python3.7

# Copyright 2021, Gurobi Optimization, LLC

# 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)

import gurobipy as gp
from gurobipy import GRB

# Create a new model
m = gp.Model("bilinear")

# Create variables

# Set objective: maximize x
m.setObjective(1.0*x, GRB.MAXIMIZE)

# Add linear constraint: x + y + z <= 10
m.addConstr(x + y + z <= 10, "c0")

# Add bilinear inequality constraint: x * y <= 2

# Add bilinear equality constraint: x * z + y * z == 1
m.addConstr(x*z + y*z == 1, "bilinear1")

# First optimize() call will fail - need to set NonConvex to 2
try:
m.optimize()
except gp.GurobiError:
print("Optimize failed due to non-convexity")

# Solve bilinear model
m.params.NonConvex = 2
m.optimize()

m.printAttr('x')

# Constrain 'x' to be integral and solve again
x.vType = GRB.INTEGER
m.optimize()

m.printAttr('x')