OR-Tools Day5

개발공부를해보자·2025년 6월 13일
  • 제약 조건을 만족하는 해가 여러개 있을 때, 그 중 가장 좋은 해를 골라내려면 목적함수가 필요하다.

  • Q. 목적함수가 여러 개 있을 때 우선순위를 정하는 방법은 ?

  • A. 동시에 다루는 것은 OR-Tools에서 공식적으로 지원하진 않는다. 하지만, 두 가지 방법을 주로 사용해서 해결한다.

    1. 가중치를 곱한 후 더한 것을 목적함수로 사용
    1. 중요한 순서대로 우선 최적화한 후 그 값을 이용해서 다음 목적함수를 최적화하는 식으로 순차적 최적화.

실습 코드

# ------------------ Day5(25.06.13) ------------------
'''
1~5이고 서로 다른 x, y, z의 합이 최대인 해를 찾기
'''
from ortools.sat.python import cp_model

model = cp_model.CpModel()

# 변수 선언: x, y, z는 1~5, 서로 다름
x = model.NewIntVar(1, 5, 'x')
y = model.NewIntVar(1, 5, 'y')
z = model.NewIntVar(1, 5, 'z')
model.AddAllDifferent([x, y, z])

# 합을 변수로 선언
sum_var = model.NewIntVar(0, 15, 'sum')
model.Add(sum_var == x + y + z) 

# 목적함수: sum_var를 최대화
model.Maximize(sum_var) # sum_var 선언하지 않고 그냥 model.Maximize(x + y + z) 해도 된다. 

solver = cp_model.CpSolver()
status = solver.Solve(model)

if status == cp_model.FEASIBLE or status == cp_model.OPTIMAL:
    print(f'x = {solver.Value(x)}, y = {solver.Value(y)}, z = {solver.Value(z)}')
    print(f'합 = {solver.Value(sum_var)}')
else:
    print('해를 찾을 수 없습니다.')

'''
x = 5, y = 4, z = 3
합 = 12
'''
profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글