Quicksum:绑定是一个变量
回答在一个资源受限的多项目调度问题,我想模型工作作为项目的一部分与变量处理时间。项目由5个就业岗位,其中两个是假有变量处理时间取决于其他工作的开始时间(开始工作的时代,是决策变量)。
如果我这样做,我遇到困难如果我想模型资源可用性约束,我把求和处理时间的工作。Gurobi礼物我NotImplementedError如果我添加以下约束:
con2_2 = {}
在t t:
凯西:k的
con2_2 (t, k) = model.addConstr (gp.quicksum (r_ijk (i, j, k) * x (i, j, y)
我在j的范围(3)y的范围(t,最小值(t + P_dummy时间[1],[0]我)))
< =
浮动(RA_kt [k, t]), name = ' Resource_Req_dum (' + str (k) + ', ' + str (t) + '] ')
r_ijk在哪里工作所使用的资源k j的狗万app足彩项目我x_ijt起始时间德国焊接学会和假工作工作的第四和第五的工作列表j . P_dummy[0]我是假1的处理时间(变量),这一切都需要小于或等于RA - >资源可用性。
这是数学一般约束的样子:
有的编程方法与虚拟Gurobi工作处理时间为变量,并求和,以确保我们考虑到资源使用在那段时间吗?
非常感谢你的帮助!
添加:
改变后的约束:
con2 = {}
为在t t:
为k在k:
con2 (t, k) = model.addConstr (gp.quicksum (r_ijk (i, j, k) * x (i, j, y)
为我在我为j在范围(len(工作)2)为y范围(t, min(时间1),int(t + P_ij (i, j)))))
+ gp。quicksum(r_ijk (i, j, k) * x (i, j, y)
为我在我为j在范围(3,5)为y范围(t, t + P_dummy (i, j2]))
<=
RA_kt (k, t),名称=“Resource_Req ['+ str (k) +”、“+ str (t) +“]”)
我得到一个错误:
TypeError:“gurobipy。LinExpr的对象不能被解释为一个整数
它指的是3日最后一行:y范围(t, t + P_dummy[我j2])
如果我添加int ()在P_dummy得到:
TypeError: int()参数必须是一个字符串,bytes-like对象或一个数字,不是“Var”
-
你好,
我必使建模问题稍微容易更好地解释如何用你的模型。可以找到一个等价的解释在这里。
如果我理解正确的话你想模型约束\ (\ sum_ {I = 1} ^ p x_i = 0 \),在那里\ (x_i \)和\ (p \)变量。
首先,让我们假设您有一个有效的上限整数变量\ (p \)称为\ (p U ^ \) \ (x_i \ [x ^ L, x ^ U] \)是连续变量。我们引入二进制变量\ (z_i \)和替换上面的总和\ (\ sum_ {i = 1} ^ p x_i \ cdot z_i = 0 \)。双线性项可以通过引入辅助变量线性化\ (v_i \)和约束\ L (x ^ \ cdot z_i \ leq v_i \ leq x ^ U \ cdot z_i \)和\ L (x ^ \ cdot (1-z_i) \ leq x_i——v_i \ leq x ^ U \ cdot (1-z_i) \)。意义,最终我们得到\ (\ sum_ {i = 1} ^ p v_i = 0 \)。现在,我们照顾指数的部分。
我们想要达到的是如果\ (i + 1 \ \组p),那么\ (z_i = 0 \)如果\(我\ leq p \) \ \ (z_i = 1)。这可以通过添加约束\(我\组p + 1 - z_i \ cdot p U ^ \)和\(我\ leq p + (1-z_i) \ cdot p U ^ \)。我认为使用上面你可以相应地调整你的问题。请注意,这可能会导致大量的额外变量,比它已经使你的问题更加复杂。因此,我建议,试图找到一个不同的配方,一个变量没有被用作索引。
最好的问候,
Jaromił0 -
嗨Jaromił,
谢谢你的考虑!我接受了你最后的建议需要考虑不同的配方,下面我将解释步骤以防它可以帮助任何人。
我现在工作是使用跟踪变量替代我早些时候的想法添加虚拟工作。这个跟踪变量是二进制和需要之间的值1如果我们正常工作,否则为0,而且跟踪变量的总和时间需要监管,以确保追踪充满了常规工作之间的差距。这比给一个更简单的考虑资源使用约束的约束,我们保持正常工作当我但添加跟踪变量描述所有任务(I)的追踪器乘以资源使用假乔布斯并检查每个步伐t这个约束。
这个修复了变量指数之和我相信额外的复杂性有限的变量作为你把假的开始时间和持续时间变量。此外额外的代码而言,我发现这并不显著变化相比,使用虚拟工作。
随时联系如果你想现在更多关于具体的代码使用。
亲切的问候,
彼得0
请登录留下你的评论。
评论
2的评论