我有一个问题,其解决方案必须在每个变量中包含一个唯一值。例如,24 名战斗机飞行员必须在一天的不同时间出发。所以解决方案必须包含整数 1:24,以某种顺序,根据对顺序的一些约束。
我尝试在 LPSolve 中使用特殊有序集来执行此操作,但我不明白如何使用它。无论如何,我的试验都需要很长时间才能执行,我不敢相信我设置正确。我可以在 1/1000 的时间内使用蛮力解决它。
使用 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)