이전 게시물( http://www.supplychaindataanalytics.com/solving-a-simple-linear-programming-problem-using-lpsolve-in-r/ )에서 간단한 선형 최적화 문제를 다음을 사용하여 모델링하고 해결하는 방법을 시연했습니다. R의 lpSolve 패키지
이 포스트에서는 정수 변수 모델링에 대한 주제를 추가하고자 합니다.
이전 게시물에서 x + y <= 3이라는 제약 조건을 사용하여 목적 함수 2x + 3y를 최대화했습니다. 두 변수가 모두 음수가 아닌 연속이면 해는 목적 함수의 최적 값이 9인 y=3입니다.
이 게시물에서는 y가 정수여야 한다는 또 다른 제약 조건을 추가합니다. 또한 이제 x + y <= 3.9가 되도록 초기 제약 조건을 조정합니다. R에서 lpSolve 패키지를 사용하면 int.vec 매개변수를 지정하여 정수 변수 제약 조건을 고려할 수 있으며 문제에서 고려할 정수 변수의 인덱스가 있는 벡터를 나타냅니다. 이 경우 y가 정수이므로 인덱스는 2입니다.
먼저 이전 문제와 유사한 간단한 선형 프로그래밍 문제를 해결하는 것으로 시작합니다. 단, x + y <= 3.9(3.0 대신)입니다. 목적 함수는 변경되지 않습니다. 따라서 이것은 정수가 아닌 문제입니다(벤치마크 역할을 함).
library(lpSolve)
f.obj <- c(2,3)
f.con <- matrix(c(1,1), nrow = 1, byrow = TRUE)
f.dir <- c("<=")
f.rhs <- c(3.9)
solution <- lp(direction = "max",
objective.in = f.obj,
const.mat = f.con,
const.dir = f.dir,
const.rhs = f.rhs
)
solution
## Success: the objective function is 11.7
x + y <= 3.9라는 제약 조건이 있는 정수가 아닌 문제에 대한 최적 솔루션은 다음과 같은 최적(= 최대)을 갖습니다.
solution$solution
## [1] 0.0 3.9
이제 위의 모델을 다시 한 번 모델링하고 해결합니다. 그러나 y는 정수 변수로 지정됩니다.
library(lpSolve)
f.obj <- c(2,3)
f.con <- matrix(c(1,1), nrow = 1, byrow = TRUE)
f.dir <- c("<=")
f.rhs <- c(3.9)
f.intvec <- c(2)
solution <- lp(direction = "max",
objective.in = f.obj,
const.mat = f.con,
const.dir = f.dir,
const.rhs = f.rhs,
int.vec = f.intvec
)
solution
## Success: the objective function is 10.8
추가 정수 제약 조건을 고려하여 목적 함수의 최대 값이 낮아졌습니다. 이제 최적의 시점은 다음과 같습니다.
solution$solution
## [1] 0.9 3.0
보시다시피 최적의 솔루션은 더 이상 y가 3.9가 아니라 y가 3이 되는 것입니다. 이는 실제로 정수 값입니다!
선형 계획법에 관심이 있다면 이 주제에 대한 저의 다른 블로그 게시물을 확인하십시오 . 또한 관심이 있는 경우 비선형 및 2차 계획법 에 대한 내 게시물을 확인하십시오 . 마지막으로 SciPy 모듈을 사용하여 Python의 선형 프로그래밍 에 대한 내 게시물을 읽는 데 관심이 있을 수도 있습니다 .
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply