【发布时间】:2018-10-31 22:23:35
【问题描述】:
我正在努力解决一个包含 if 语句的混合整数编程问题。在使用 PuLP 时,我一直得到“不可行”作为解决状态,
我的决策变量只是一个二进制指标列表(0 或 1),对应于一系列容器以及它们是否被使用(0 = 未使用,1 = 使用)。
# Instantiate problem to be solved
prob = LpProblem('Test Problem', LpMaximize)
b = []
for id in container_names:
max_count = 1
b.append(LpVariable('b_{}'.format(id),
lowBound=0,
upBound=1,
cat='Integer'))
目标函数只是容器是否被选中(取值为 1)乘以预先分配给每个容器的点
prob += lpSum([i * j for i, j in zip(points, b)]), 'Total Points'
第一个约束如下。每个容器中都有一个项目组合。我们不能超过任何这些物品的库存。 'container_item_dict' 是一个字典,其中键是容器 ID,值是字典,其中键是库存 ID,值是容器中的计数。当我只用这个约束运行时,算法就可以工作并且我得到了很好的结果。
for j in inventory_names:
prob += lpSum([b[i]*container_item_dict[container_names[i]][j] for i in container_index]) <= inventory_in_stock_dict[j]
我正在尝试添加一个额外的约束,但无法弄清楚。我有另一个名为“must_haves”的二进制指标列表。 “must_haves”与“container_names”长度相同,每个值对应一个容器。如果“must_haves”的元素为 1,则必须在解决方案中选择该容器。如果“must_haves”的元素为0,则对应的容器可以选择也可以不选择。
如何编写这个 if 语句约束?
【问题讨论】:
标签: python optimization linear-programming pulp