说,我有一组像这样的二进制变量:
ht = {}
for t in range(100):
ht[t] = pulp.LpVariable('ht[%i]' % t, lowBound=0, upBound=1, cat='Integer')
我想确保ht [t]之间存在间隙,例如:
ht[t] + ht[t + 1] + ht[t + 2] + ht[t + 3] + ht[t + 4] + ht[t + 5] <= 1
OR
ht[t - 1] + ht[t] + ht[t + 1] + ht[t + 2] + ht[t + 3] + ht[t + 4] <= 1
OR
ht[t - 2] + ht[t - 1] + ht[t] + ht[t + 1] + ht[t + 2] + ht[t + 3] <= 1
OR
ht[t - 3] + ht[t - 2] + ht[t - 1] + ht[t] + ht[t + 1] + ht[t + 2] <= 1
OR
ht[t - 4] + ht[t - 3] + ht[t - 2] + ht[t - 1] + ht[t] + ht[t + 1] <= 1
OR
ht[t - 5] + ht[t - 4] + ht[t - 3] + ht[t - 2] + ht[t - 1] + ht[t] <= 1
根据“ t”的位置,左侧和/或右侧的相邻邻居必须为0。
是否可以在PuLP中编写此约束?
答案 0 :(得分:1)
对不起,这不是那么容易或便宜:我们需要额外的二进制变量:
5 * δ[t,k]
约束中的术语δ[t,k]=0 => k-th constraint is active
δ[t,k]=1 => k-th constraint is relaxed
是:
δ[t,k]
我们至少需要一个活动约束,因此我们不允许所有C:\Users\Antonio\Documents\test> dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 0895-160E
Directorio de C:\Users\Antonio\Documents\test
27/08/2018 09:38 p. m. <DIR> .
27/08/2018 09:38 p. m. <DIR> ..
27/08/2018 09:35 p. m. 20 (Address) Flashing.pdf
27/08/2018 09:35 p. m. 20 (Address) Roof.pdf
27/08/2018 09:35 p. m. 20 (Address) Summary.pdf
27/08/2018 09:35 p. m. 20 (Address) Top FG.pdf
27/08/2018 09:45 p. m. 274 test.bat
5 archivos 354 bytes
2 dirs 393,053,315,072 bytes libres
为1。