제약 조건을 만족하는 해가 여러개 있을 때, 그 중 가장 좋은 해를 골라내려면 목적함수가 필요하다.
Q. 목적함수가 여러 개 있을 때 우선순위를 정하는 방법은 ?
A. 동시에 다루는 것은 OR-Tools에서 공식적으로 지원하진 않는다. 하지만, 두 가지 방법을 주로 사용해서 해결한다.
실습 코드
# ------------------ 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
'''