大家好,今天好。
我有一个小问题,就是我把需要退货的地点安排到配送中心。为了处理这些地点的需求,我们必须安装某些技术(A和B)。我们只能安装尽可能多的B,或者0的B。所以,如果B= 2,那么A也必须是2。但是,如果A=2时,则不能说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)都去过那里。
我认为这将是“简单”的制作addVar,,s,和,但是你需要分配集合等等。实际上,我在这个过程中完全迷失了方向。有人能帮帮我吗?
非常感谢大家的时间和考虑。
它不需要像Gurobi这样的解决方法,如果你知道什么,我很高兴听到!
发布于 2021-08-05 06:26:33
是的,你得拆掉其中的大部分,然后介绍.*)。我的Gurobi语法很弱,所以这里有几件事情可以让您开始使用伪代码。
你需要几套
T = {A, B}
L = {LA, Chicago, NY} # for example您需要一个变量来赋值(这是一个赋值问题),在location L.
X[tech, loc] # domain non-neg integers, right?然后,您可以重新构造约束&例如,在适当的情况下使用对索引的求和。我相信有很多Gurobi的例子可以帮助你。启动非常小,这样您就可以排除故障。
您将需要对技术B的条件进行约束。您没有说该约束是全局的还是按位置执行的。让我们假设它是按位置(更困难的情况)。然后需要另一个指示符变量来指示它们是否相等。
Eq[loc] # indicate whether B=A at particular location, binary var然后,您可以使用大M通过在每个位置设置3个约束来控制位置相等
X[B, loc] <= X[A, loc]
X[A, loc] - X[B, loc] <= (1 - Eq[loc]) * M
X[B, loc] <= Eq[loc] * Mhttps://stackoverflow.com/questions/68661027
复制相似问题