在R中使用lpSolveAPI的混合整数编程问题

时间:2019-01-06 17:48:00

标签: lpsolve

我正在处理涉及销售代表和销售地区(使用其(潜在)销售得分)的分配问题。在此示例代码中,我试图优化将3个代表分配给2个地区。目标函数是最大化max的总和。所有销售代表的分数。

约束是:一个代表只能分配给一个地区,一个地区可以有多个代表,每个地区对分数总和的最低要求和最高要求。我无法对每个地区执行最低和最高要求,即,每个地区的所有指定代表的得分总和应在一定范围内。我提供的虚拟值可能不会在此处导致最佳解决方案,但此处的设计是否正确?有什么建议么?

R代码

nx <-3 # of sales reps
lps.mod <- make.lp(2, 2*nx) #3 columns for values, 3 columns for binary

将销售得分分配为系数

x <- c(0.83,0.75)
set.column(lps.mod, 2, x)
y <- c(0.77,0.81)
set.column(lps.mod, 1, y)
z <- c(0.57,0.88)
set.column(lps.mod, 3, z)
print(lps.mod)

set.objfn(lps.mod, c(0.81,0.83,0.88, 0, 0, 0)) #Max of each column
lp.control(lps.mod,sense="max")
set.type(lps.mod, columns=c(4:6), "binary")

添加地区级别的最小和最大限制以及一个代表->仅一个地区限制

set.constr.type(lps.mod, rep("<=", 2), constraints = 1:2)
set.constr.value(lps.mod, rhs = c(1,1.7), lhs = c(0,0.5), constraints = 1:2)

for (i in seq(1,nx)) add.constraint(lps.mod, xt=c(1,1),
                               type="<=", 
                               rhs = 1, lhs=0,
                               indices=c(i, nx+i)) 
print(lps.mod)
system.time((solve(lps.mod)))
get.objective(lps.mod)

0 个答案:

没有答案