ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] LP, 선형계획법 R에서 구현
    Study/R 2019. 5. 28. 14:15

    먼저 선형 계획법에 대한 개념이 궁금하시다면 이전 글을 확인해주세요

    2019/05/28 - [IT] - [분석/통계] LP, 선형계획법

     

    예를 들어 아래와 같은 문제가 있다면!

    [문제] 어떤 작전부대의 편성을 계획하고 있다.  
     이때 이 작전에 효과적인 전투원은 A, B, C 세 가지 타입이 있다.  
     각 타입의 전투원은 작전을 수행할 때 A타입은 10포인트, B타입은 8포인트, C타입은 9포인트의 효과를 실현할 것으로 기대된다.  
     부대는 각 타입의 전투원을 몇 명씩 편성해야 작전 효과를 극대화할 수 있을까?  
     이때 훈련비용(단위: 천만원)은 각 타입 별로 단위 당 2, 3, 1이 소요되며, 합계 1,000을 초과할 수 없다.  
     전투 준비시간(단위: 시간)은 각각 5, 6, 6이 소요되며, 합계 2,400을 초과할 수 없다.  
     전투참가가능 총인원은 700명을 초과할 없다.  
     또한 본부에서는 특별 명령을 통하여 B타입의 전투원은 160명 이상을 편성하라고 지시하였다. 

    목적함수 
     Max. Z = 10x1 + 8x2 +9x3 

    제약조건 
     s. t.  2x1 + 3x2 + x3 <= 1000 
            5x1 + 6x2 + 6x3 <= 2400 
            x1 + x2 + x3 <= 700 
            x2 >= 160 
            x1 >= 0, 
            x3 >= 0 

    아래와 같이 구현해주시면 됩니다!

    install.packages(lpSolve) # 왠지 모르겠눈데 다운로드 안됨 툴에서 설치해야함
    library("lpSolve")

    # 목적식 (의 계수)
    z <- c(10, 8, 9) 

    # 제약식의 좌변 (계수)
    A <- matrix(c(2, 3, 1,
                  5, 6, 6,
                  1, 1, 1,
                  0, 1, 0,
                  1, 0, 0,
                  0, 0, 1), 
                nrow=6, byrow=TRUE)

    # 제약식의 우변 (해)
    B <- c(1000, 2400, 700, 160, 0, 0)

    # 제약식의 부등호
    dir  <- c("<=", "<=", "<=", ">=", ">=", ">=")

    # 최적해
    opt <-  lp(direction="max",   # 목적식 조건
               objective.in = z,  #목적식의 계수
               const.mat = A,     # 제약식의 좌변
               const.dir = dir,   # 제약식의 부등호
               const.rhs = B,     # 제약식의 우변
               all.int = T)

    # 결과
    opt

    # 결정변수
    opt$solution

     

    python에서 구현하는 방법이 궁금하다면

    2019/05/28 - [IT] - [python] LP, 선형계획법 python에서 구현

     

    'Study > R' 카테고리의 다른 글

    [R] R에서 ODBC를 이용하여 mssql 연동  (2) 2019.05.27
    [R] R에서 MicroSoft R 사용하기  (2) 2019.05.27

    댓글

Designed by Tistory.