Linear Programming 선형 계획법

의사결정 문제를 풀 때 활용하는 LP도 R에서 해결할 수 있다.

LP의 목적함수가 주어졌을 때, 풀어야할 변수의 개수 이상의 제약식 정보만 있으면 합리적인 의사결정을 할 수 있다. 의사결정 변수에 대한 데이터는 과거의 자료로부터 획득할 수 있는 경우가 많다. 따라서 LP를 경영현장에서는 아주 광범위하게 사용할 수 있다.

예를 보자.

(출처: 장용식, 최진호. 머신러닝을 활용한 R데이터 분석)


이익을 극대화하는 최적해를 구하라.

아마 경영과학 시간에 배웠던 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이다.


댓글 없음:

댓글 쓰기

PyR Intro - 신입생OT학기제