【发布时间】:2019-09-09 19:26:37
【问题描述】:
当我尝试运行以下脚本时,出现错误消息:表达式包含不属于模型的变量。
appr <- c(0.15, 0.11, 0.10, 0.13, 0.18, 0.20, 0.18, 0.11, 0.07, 0.06, 0.07, 0.08, 0.12, 0.13,
0.06, 0.03, 0.04, 0.06, 0.07, 0.08, 0.09, 0.07, 0.04, 0.04, 0.05, 0.07, 0.07, 0.07)
leng <- c(1:28)
Payment_Model <- MIPModel() %>%
add_variable(x[i], i = 1:7, type = "binary") %>%
add_variable(x[j], j = 8:14, type = "binary") %>%
add_variable(x[k], k = 15:21, type = "binary") %>%
add_variable(x[l], l = 22:28, type = "binary") %>%
add_variable(d[t], t = 1:3, type = "binary") %>%
set_objective(sum_expr(x[i] * appr[i], i = 1:7) + sum_expr(x[j] * appr[j], j = 8:14)
+ sum_expr(x[k] * appr[k], k = 15:21) + sum_expr(x[l] * appr[l], l = 22:28), "max") %>%
add_constraint(sum_expr(x[i], i = 1:7) == 1) %>%
add_constraint(sum_expr(x[j], j = 8:14) == 1) %>%
add_constraint(sum_expr(x[k], k = 15:21) == 1) %>%
add_constraint(sum_expr(x[l], l = 22:28) == 1) %>%
add_constraint(sum_expr(x[j]*leng[j], j=8:14) >= 7 + 0.01 + sum_expr(x[i]*leng[i], i=1:7) - 10000*(1-d[1])) %>%
add_constraint(sum_expr(x[j]*leng[j], j=8:14) <= 7 + sum_expr(x[i]*leng[i], i=1:7) + 10000*d[1]) %>%
add_constraint(sum_expr(x[k]*leng[k], k=15:21) >= 7 + 0.01 + sum_expr(x[j]*leng[j], j=8:14) - 10000*(1-d[2])) %>%
add_constraint(sum_expr(x[k]*leng[k], k=15:21) <= 7 + sum_expr(x[j]*leng[j], j=8:14) + 10000*d[2]) %>%
add_constraint(sum_expr(x[l]*leng[l], l=22:28) >= 7 + 0.01 + sum_expr(x[k]*leng[k], k=15:21) - 10000*(1-d[3])) %>%
add_constraint(sum_expr(x[l]*leng[l], l=22:28) <= 7 + sum_expr(x[k]*leng[k], k=15:21) + 10000*d[3]) %>%
add_constraint(sum_expr(x[l]*leng[l], l = 22:28) - 7*(d[1]+d[2]+d[3]) <= 16)
Payment_Model
我尝试在四个计划中最大化批准率(见目标),参数表在 4 周或 28 天的窗口内。需要四个时间表(分别为1:7、8:14、15:21、22:28,作为前4个约束)
我正在努力解决最后一个约束,即如何计算总长度。在这里,长度表示距离最后一次尝试的天数。 1、8、15、22 表示“星期一”。例如,尝试发生在第 (2, 8) 天,长度 = 8(第一个星期二和第二个星期一);尝试发生在 (2, 10),长度 = 3(第一个星期二和星期三),因为如果安排了第一个星期二,我们可以安排在同一个星期三,尽管 10 最初是指第二个“星期三”。
并且这个约束要求四个时间表的总长度
我的脚本有什么问题?谢谢!
【问题讨论】:
-
如果您用自然或数学语言描述约束条件会有所帮助。这样用户就不必猜测/推断您需要什么。还要添加正在使用的包,
ompr我相信? -
@Shree 是的,包 'ompr' 和 'ompr.roi'。刚刚修改了问题以解释约束。谢谢!
-
感谢您添加详细信息,但仍不清楚。这意味着“尝试发生在第 (2, 8) 天,长度 = 8;尝试发生在 (2, 10),长度 = 3”?我猜
x[i]是尝试,但长度是多少? -
是的,第一步,x2= 1,然后长度 = 2(第一个星期二)。第二步,x8 = 1,安排在第二个星期一,总长度等于 8-0 = 8(长度是到第二个星期一的天数)。总长度可以读取为距离最后一个(第四个计划)的天数
-
对不起,我放弃了。您根本没有为其他人提供任何上下文来理解问题。我建议用自然语言明确定义问题陈述,即输入、目标、约束和决策变量。但是,这是我的建议:您似乎需要对某些特定索引分组应用最后一个约束。只需在模型之外创建该索引集,然后在
sum_expr()中使用它。
标签: r constraints linear-programming mixed-integer-programming