MIP example-2

AJONA·2020년 9월 22일
0

gurobi

목록 보기
3/4
post-thumbnail

MIP example-1 에서 풀었던 문제를 다른 방법으로 풀어보자

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

import numpy as np
import scipy.sparse as sp

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

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

# 목적식 세팅
obj = np.array([1.0, 1.0, 2.0])
model.setObjective(obj @ x, GRB.MAXIMIZE)

# 제약식 세팅
data = 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])

# csr_matrix를 이용한 matrix 생성
A = sp.csr_matrix((data, (row, col)), shape=(2, 3))

# 우변 세팅
rhs = np.array([4.0, -1.0])

# matrix를 이용한 모델 세팅
model.addConstr(A @ x <= rhs, "c")

# 최적화
model.optimize()

문제는 동일하지만 이번에는 numpy array를 이용한다

이전 포스팅 에서 제약식을 하나씩 세팅해 줬다면 이번에는 matrix를 만들어서 한번에 세팅해 줌.

이를 위해서 scipy.sparse의 csr_matrix가 사용되었는데

data와 각 값에 해당하는 인덱스인 row, col을 이용해서 matrix를 표현함.

참고: scipy.sparse.csr_matrix

위 수리모델을 표현할때 유의할 점은 >=<=로 바꾸기 위해 좌변과 우변 모두에 -1을 곱해줘서 처리한다는 점임.

profile
Brush My Teeth

0개의 댓글