【发布时间】:2021-08-05 05:27:41
【问题描述】:
大家好。
我有一个小问题,我分配了要求将货物退回到配送中心的位置。为了在这些位置处理这种需求,我们必须安装某些技术(A 和 B)。我们只能安装与 A 一样多的 B,或 B 的 0。因此,如果 B = 2,则 A 也必须为 2。但是,如果 A = 2,则 B 永远不能说 B = 1。它可以是 B = 0 和 A = 2。
现在问题出现了,我需要一些帮助。如果用 Python 编码,它适用于各个位置。但是如果我想将它扩展到覆盖所有位置,我会遇到错误......下面是小问题的代码:
# Create a new model
m = gp.Model("mip1")
BigM = 100
q = locations[i]
# Create parameters
cost_A = 20000
cost_B = 13500
cost_transport = 0.007
cap_A = 400000
cap_B = 500000
# Create variables
x = m.addVar(lb=0, ub=3, vtype=GRB.INTEGER, name="A")
y = m.addVar(lb=0, ub=3, vtype=GRB.INTEGER, name="B")
z = m.addVar(lb=0, vtype=GRB.INTEGER, name="flow_1")
a = m.addVar(vtype=GRB.BINARY, name="BigM")
# Set objective to minimize cost
m.setObjective(cost_A * x + cost_B * y + cost_transport * z, GRB.MINIMIZE)
# Add constraint: amount of UBC
m.addConstr(z == q, "accept returned demand")
# Add constraint: capacity
m.addConstr(z <= cap_A * x + cap_B * y, "capacity of locations")
# Add constraint: only B if location exists/has A
m.addConstr(y <= x, "B constraint_1")
# Add constraint: only B if location exists/has A
m.addConstr(x - y <= BigM * a, "B constraint_2")
# Add constraint: only B if location exists/has A
m.addConstr(y <= BigM * (1 - a), "B constraint_3")
# Optimize model
m.optimize()
鉴于该位置的需求,上述模型会生成关于在某个位置安装多少 A 和 B 的输出。这当然非常简单。但是,我现在想扩展这个问题,考虑到多个位置,这就是我遇到错误的地方......KeyError: (0, 1)、KeyError: (1, 1)、KeyError: (1) 和 KeyError: (0) 都已经存在了......
我认为这将是“简单地”制作 addVars 和 addConstraints,但是你需要分配集合等。我实际上在这个过程中很迷茫.有谁可以帮帮我吗?
非常感谢大家的时间和考虑。
附:它不必由像 Gurobi 这样的求解器来解决,如果你知道我很高兴听到的任何其他信息!
【问题讨论】:
-
你能展示一些你尝试过的错误吗?
-
我无法在这里发布答案,所以我添加了一条新评论。很抱歉给您带来不便
标签: python linear-programming gurobi