의사결정 문제를 풀 때 활용하는 LP도 R에서 해결할 수 있다.
LP의 목적함수가 주어졌을 때, 풀어야할 변수의 개수 이상의 제약식 정보만 있으면 합리적인 의사결정을 할 수 있다. 의사결정 변수에 대한 데이터는 과거의 자료로부터 획득할 수 있는 경우가 많다. 따라서 LP를 경영현장에서는 아주 광범위하게 사용할 수 있다.
예를 보자.
이익을 극대화하는 최적해를 구하라.
아마 경영과학 시간에 배웠던 LP를 코드로 표현하면 다음과 같다.
우선 필요한 패키지를 설치하고 불러오자.
install.packages('lpSolveAPI')
#Libraries
library(magrittr)
library(lpSolveAPI)
다음으로 문제를 정의한다.
N_contraints=2
N_decision_variables=2
object_value=c(1,3)
Constraint1=c(0.05,0.1,20)
Constraint2=c(0.1,0.5,50)
모델링을 하자.
lp_model<-make.lp(N_contraints,N_decision_variables)
invisible({
lp_model %>% lp.control(sense="max")
lp_model %>% set.objfn(object_value)
lp_model %>% add.constraint(Constraint1[1:2],"<=",Constraint1[3])
lp_model %>% add.constraint(Constraint2[1:2],"<=",Constraint2[3])
})
솔루션을 구하자.
ifelse(solve(lp_model)==0,'Solution found','')
출력 결과를 정리한다.
solution_variables<-get.variables(lp_model)
names(solution_variables)=c("star_var1","star_var2")
objective_value<-get.objective(lp_model)
names(objective_value)=c('obj_value')
마지막으로 민감도와 그림자 가격 문제를 풀어보자.
sensitivity_analysis<-get.sensitivity.obj(lp_model)
shadow_price<-get.sensitivity.rhs(lp_model)
결과를 보면,
{
cat("Linear programming solution:\n")
cat(" star variable 1 =",solution_variables['star_var1'],'\n')
cat(" star variable 2 =",solution_variables['star_var2'],'\n')
cat(" objective value =",objective_value,'\n')
}
운동화는 333개, 코트는 33개가 최적이다. 그때 이익은 433 정도이다.
개수는 정수이니 정수 제약을 추가하자.
invisible({
lp_model %>% lp.control(sense="max")
lp_model %>% set.objfn(object_value)
lp_model %>% add.constraint(Constraint1[1:2],"<=",Constraint1[3])
lp_model %>% add.constraint(Constraint2[1:2],"<=",Constraint2[3])
lp_model %>% set.type(1,'integer')
lp_model %>% set.type(2,'integer')
})
최적해를 다시 구해보면,
운동화는 334개, 코트는 33개, 최대 이익은 433이다.
댓글 없음:
댓글 쓰기