MIP example-1

AJONA·2020년 9월 22일
0

gurobi

목록 보기
2/4
post-thumbnail

이전 포스팅 에서 설치한 gurobipy를 이용해 아래의 문제를 풀어보자

Problem

Maximize
x + y + 2z

Subject to
x + 2y + 3z <= 4
x + y >= 1
x, y, z binary

Solution

아래는 문제 해결을 위한 파이썬 코드

import gurobipy as gp
from gurobipy import GRB

# 모델 선언
model = gp.Model("MIP")

# 변수 선언
# 제약식에 binary 조건이 있으므로 type을 binary로 설정
x = model.addVar(vtype=GRB.BINARY, name="x")
y = model.addVar(vtype=GRB.BINARY, name="y")
z = model.addVar(vtype=GRB.BINARY, name="z")

# 목적식 세팅
model.setObjective(x + y + 2 * z, GRB.MAXIMIZE)


# 제약식 세팅
model.addConstr(x + 2 * y + 3 * z <= 4, "c0")
model.addConstr(x + y >= 1, "c1")

# 최적화
model.optimize()

실행시 아래와 같은 출력 결과를 얻을 수 있음

Gurobi Optimizer version 9.0.3 build v9.0.3rc0 (linux64)
Optimize a model with 2 rows, 3 columns and 5 nonzeros
Model fingerprint: 0xf43f5bdf
Variable types: 0 continuous, 3 integer (3 binary)
Coefficient statistics:
Matrix range [1e+00, 3e+00]
Objective range [1e+00, 2e+00]
Bounds range [1e+00, 1e+00]
RHS range [1e+00, 4e+00]
Found heuristic solution: objective 2.0000000
Presolve removed 2 rows and 3 columns
Presolve time: 0.00s
Presolve: All rows and columns removed

Explored 0 nodes (0 simplex iterations) in 0.00 seconds
Thread count was 1 (of 8 available processors)

Solution count 2: 3

Optimal solution found (tolerance 1.00e-04)
Best objective 3.000000000000e+00, best bound 3.000000000000e+00, gap 0.0000%

만일 변수와 해에 접근하고 싶다면 아래처럼

# 해
print(model.objVal)
for v in model.getVars():
    print(v.varName, v.x)

3.0
x 1.0
y 0.0
z 1.0

Reference

mip1.py

profile
Brush My Teeth

0개의 댓글