2025. 5. 10. 21:44ㆍ경영과학
선형계획법에서 사용하는 계수들은 시간에 흐름에 따라 변화하게 됩니다. 예를들어 지난 문제(https://direction-f.tistory.com/104)를 다시 가져와서 고려해본다고 한다면 풀어야 할 문제는 아래와 같습니다.
이 때 목적함수 또는 제약함수에 활용된 계수들은 변화할 수 있습니다. 그렇다면 이렇게 변화하는 계수에 따라서 해가 어떻게 변화할지를 보는것이 민감도 분석입니다. 이는 불확실한 상황속에서도 조금 더 견고한 결정을 내릴 수 있도록 지원합니다. 구체적으로, 민감도 분석은 목표 함수 계수의 변화, 제약 조건의 우변 값 변화, 그리고 제약 조건 계수의 변화 등이 최적 해에 미치는 영향을 분석합니다. 이를 통해, 어떤 입력 변수가 결과에 가장 큰 영향을 미치는지 등을 파악할 수 있습니다.
간단하게 Python 코드를 가지고 Google or-tools에서 어떻게 민감도 분석을 수행할 수 있는지를 봐보겠습니다.
from ortools.linear_solver import pywraplp
import pandas as pd
## from ortools.init import pywrapinit
## define solver
solver = pywraplp.Solver.CreateSolver('GLOP')
## define decision variable
x_1 = solver.NumVar(0, solver.infinity(), 'x_1')
x_2 = solver.NumVar(0, solver.infinity(), 'x_2')
## define constraints
constraint1 = solver.Add(2*x_1+x_2 <= 100)
constraint2 = solver.Add(x_1+x_2 <= 80)
constraint3 = solver.Add(x_1 <= 40)
## defince objective function
for coef in [1,2,3,4,5]:
print("---------------------", coef,"---------------------")
solver.Maximize(coef*x_1 + 2*x_2)
## invoke the solver
status = solver.Solve()
if status == pywraplp.Solver.OPTIMAL:
print("최적해")
print('Objective value =', solver.Objective().Value())
print('x_1 =', round(x_1.solution_value(),0))
print('x_2 =', round(x_2.solution_value(),0))
print("shadow price(잠재가격)")
print('생산시간제약 =', round(constraint1.dual_value(),0))
print('포장시간제약 =', round(constraint2.dual_value(),0))
print('생산수량제약 =', round(constraint3.dual_value(),0))
안타깝게도 or tools에서는 최적해를 변하지 않게하는 계수들을 구할 수 있는 함수는 별도로 없어서, 원하는 계수들을 직접입력하여 한번씩 분석해보는 것이 효과적으로 보입니다.
샘플 코드에서는 x1에 대해서만 변경하였는데, 제약조건의 경우에는 좌변항의 계수, 그리고 우변항을 변화시키면서 최적해의 변화를 추적해볼 수 있습니다.
--------------------- 1 ---------------------
최적해
Objective value = 160.00000000000003
x_1 = 0.0
x_2 = 80.0
shadow price(잠재가격)
생산시간제약 = -0.0
포장시간제약 = 2.0
생산수량제약 = 0.0
--------------------- 2 ---------------------
최적해
Objective value = 160.00000000000003
x_1 = 0.0
x_2 = 80.0
shadow price(잠재가격)
생산시간제약 = -0.0
포장시간제약 = 2.0
생산수량제약 = 0.0
--------------------- 3 ---------------------
최적해
Objective value = 180.0
x_1 = 20.0
x_2 = 60.0
shadow price(잠재가격)
생산시간제약 = 1.0
포장시간제약 = 1.0
생산수량제약 = 0.0
--------------------- 4 ---------------------
최적해
Objective value = 200.0
x_1 = 20.0
x_2 = 60.0
shadow price(잠재가격)
생산시간제약 = 2.0
포장시간제약 = -0.0
생산수량제약 = 0.0
--------------------- 5 ---------------------
최적해
Objective value = 240.0
x_1 = 40.0
x_2 = 20.0
shadow price(잠재가격)
생산시간제약 = 2.0
포장시간제약 = -0.0
생산수량제약 = 1.0
위 5개의 경우를 보면 x1의 계수가 2가 되는경우는 x1, x2 최적해가 변경되지만 4가 되는경우는 동일한 값을 가짐을 확인할 수 있습니다. 이와 같이 민감도 분석을 통해 상황의 변화를 고려하여 조금 더 효과적으로 의사결정을 내리는데 도움이 될 수 있습니다.
'경영과학' 카테고리의 다른 글
다기준 의사결정 > 목표계획법(Goal Programming) (0) | 2025.05.15 |
---|---|
수송계획법(경유지를 포함한) (1) | 2025.05.14 |
선형계획법 > Reduced Cost(수정비용) (0) | 2025.04.29 |
선형계획법 사후분석 - Shadow price(잠재가격) (1) | 2025.04.27 |
경영과학 - 수송계획법(Transportation Problem) (2) | 2022.06.06 |