【发布时间】:2013-09-18 11:05:53
【问题描述】:
我正在尝试通过将时间表表述为(整数)线性问题来优化时间表。我在编码部分遇到了一些问题(主要是由于纸浆),这与公式完全不同。
问题:
在 5 年内安排 n 次发货(时间步长以月为单位),但须遵守以下限制:
- 每个月必须有一艘且只有一艘船在“本地巡逻”(状态 = 'C')上
- 每年只有一艘船必须进行“扩展巡逻”(状态 = 'A'),从 7 月到 10 月,为期四个月
- 每艘船必须在 5 年期间进行一次为期 4 个月的检查(状态 = '4')
- 每艘船在 5 年内必须有一次为期 8 个月的休息(状态 = '8')
- 每艘船必须大约每 5 个月进行一次定期维护(状态 = 'M')
- 一艘船在给定月份只能处于一种状态,但也可以没有状态(开放/空置,'_')
目标函数公式:
定义可计算计划偏离 5 个月 ('M') 维护计划的次数(和数量)的松弛变量。
如果需要,我可以进一步解释设置,但现在我有一些基本问题可能是我的问题的根源。
这是我的一个限制条件(blockList 存储每艘船的 4 个月和 8 个月区块的开始):
# Each ship must have one 8block and one m4block in a 5 year schedule, which must be between 2 and 3 years apart
for n in ship_list:
prob += blockList[n][0] - blockList[n][1] >= 24
prob += blockList[n][0] - blockList[n][1] <= 36
我想取上述表达式的LHS的绝对值,但我不能,因为对象被初始化为pulp.LpVariable。有什么解决方法的建议吗?
无论如何,这可能会也可能不会解决我的问题。如果没有,我的下一个问题是针对任何熟悉纸浆的人。我如何知道解决方案是否正确,或者求解器是否在后台添加了某种弹性? (使用该约束按原样运行代码会产生不正确的结果,而使用 GLPK 等不同的求解器会产生错误)。
【问题讨论】:
标签: python linear-programming pulp