Data & Technology Manager

[생산및운영관리] Manufacturing Models with Python Solver 1 (ortools를 이용한 해 찾기 기능 소개) 본문

공부/생산및운영관리

[생산및운영관리] Manufacturing Models with Python Solver 1 (ortools를 이용한 해 찾기 기능 소개)

영철 연구원 2022. 4. 5. 17:50

*해당 글은 구글 colab을 기준으로 코드를 진행하였습니다.

 

● 간단한 문제를 풀며 코딩을 시작해 보자

간단한 파이썬 해법 찾기 문제

 

우선 필요한 라이브러리를 설치해야 한다.

 

!pip install ortools

ortools를 설치를 먼저 한다.

 

이후 linear_solver를 불러오고 solver를 선언한다.

 

from ortools.linear_solver import pywraplp

solver = pywraplp.Solver.CreateSolver('GLOP')

 

이곳에서 GLOP는 구글이 개발하고 있는 선형 해 구하는 solver이다.

solver를 지정하고 나면, 위 문제의 제약조건을 적어보기로 하자.

x = solver.NumVar(0, 1, 'x')
y = solver.NumVar(0, 2, 'y')

위 문제에서 x와 y 는 각각 0에서부터 1, 0에서부터 2까지 실수 범위이기에 위와 같은 코드를 작성하였다.

(만약 상한이 없는 경우라면, 1과 2 대신에 solver.infinity() 작성)

 

이후 제약조건을 달아준다. 문제에선 x+y<=2가 조건.

ct = solver.Constraint(0, 2, 'ct')
ct.SetCoefficient(x, 1)
ct.SetCoefficient(y, 1)

위의 ct는 해를 찾기 위한 제약조건을 뜻하며, x+y는 2보다 작거나 같지만, 실제 조건은 0부터 2까지이기에 위와 같이 설정하였다.

그리고 아래의 ct.SetCoefficient는 각각의 변수의 계수를 지정해주는 함수이다.

 

이후 우리의 목표함수인 Objective function을 작성해 보자. MAX(3x * y)를

objective = solver.Objective()
objective.SetCoefficient(x, 3)
objective.SetCoefficient(y, 1)
objective.SetMaximization()

이렇게 목표함수를 만들어 보았다. (setcoefficient설명은 이전과 동일)

 

 

이 해당 결과를 만들어 주는 함수는 Solve 함수이다.

solver.Solve()

print('Solution:')
print('Objective value =', objective.Value())
print('x =', x.solution_value())
print('y =', y.solution_value())

위 과정을 구글 colab에서 돌린 결과는 다음과 같다.

 

Google Colab에서 식을 돌린 결과

x는 1일 때, y도 1일 때 최댓값 4를 갖게 된다는 결과를 얻었다.

Comments