2013-04-16 3 views
2

솔루션에 각 변수에 고유 한 값이 있어야하는 문제가 있습니다. 예를 들어, 24 명의 전투기 조종사는 하루 중 서로 다른 시간에 출발해야합니다. 따라서 솔루션에는 순서에 대한 몇 가지 제약 조건에 따라 몇 가지 순서로 정수 1:24가 포함되어야합니다.LPSolve에서 모든 다른 제약 조건을 어떻게 구현할 수 있습니까?

LPSolve에서 특별 주문 세트를 사용해 보았지만 사용법을 이해할 수 없습니다. 어쨌든, 나의 시련은 모두 실행하는데 너무 오랜 시간이 걸렸습니다. 나는 이것을 올바르게 설정하고 있다고 믿을 수 없습니다. 나는 1000 분의 1 시간에 그것을 무력으로 해결할 수 있었다.

LPSolve/정수 프로그래밍을 사용하여 인접한 고유 한 정수를 최적화하는 것이 가능합니까? 그렇다면 R (또는 Python)에서 x1! = x2! = x3! = xN을 표현하기위한 제약 조건을 추가하는 가장 좋은 방법은 무엇입니까? 그렇지 않은 경우 이러한 종류의 최적화를 위해 어떤 알고리즘을 조사해야합니까? 여기

는 지금까지 가지고 코드 :

library('lpSolveAPI') 

people <- c('Joe', 'Bob', 'Dave', 'Mike') 
number_of_people = length(people) 

model <- make.lp(0, number_of_people) 
set.type(model, 1:number_of_people, 'integer') 
set.bounds(model, lower=rep(1, number_of_people), 
     upper=rep(number_of_people, number_of_people)) 

constraint_names <- c('Bob < Mike') 
add.constraint(model, c(0, 1, 0, -1), '<=', -0.1) 
constraint_names <- append(constraint_names, 'Mike > Joe') 
add.constraint(model, c(-1, 0, 0, 1), '>=', 0.1) 
dimnames(model) <- list(constraint_names, people) 

#not sure about this 
#add.SOS(model, 'different positions', type=2, 
#priority=1,columns=1:number_of_people, weights=rep(1, number_of_people)) 

set.objfn(model, rep(1, length(people))) 
lp.control(model, sense='min') 
write.lp(model,'model.lp',type='lp') 

solve(model) 
get.variables(model) 

답변

2

대신 Y[i, j] == 1xi 위치에 j 수단 여기서 x1, x2, ..., xN 풀면, 불리언 Y[i, j]의 정방 행렬 풀기.

sum(Y[i, j]) == 1   # sum over i, for each j 

원래 제약과 목표는 여전히 할 수 있습니다

sum(Y[i, j]) == 1   # sum over j, for each i 
xi는 별개의 j에 할당 할 수

귀하의 제약 기록 :

는 각 xi는 정확히 하나의 j에 할당하는 것이 필요 각각 xi을 더미 정수 변수로 정의한 후에 x1, x2, ..., xN으로 표시해야합니다 (필요시).

xi = sum(j * Y[i,j]) # sum over j, for each i