簡體   English   中英

在PuLP MIP中定義多個邏輯或約束

[英]Defining multiple logical OR constraints in PuLP MIP

說,我有一組像這樣的二進制變量:

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中編寫此約束?

抱歉,這不是那么容易或便宜:我們需要額外的二進制變量:

ht[t] + ht[t + 1] + ht[t + 2] + ht[t + 3] + ht[t + 4] + ht[t + 5] <= 1 + 5 * δ[t,1]
ht[t - 1] + ht[t] + ht[t + 1] + ht[t + 2] + ht[t + 3] + ht[t + 4] <= 1 + 5 * δ[t,2]
ht[t - 2] + ht[t - 1] + ht[t] + ht[t + 1] + ht[t + 2] + ht[t + 3] <= 1 + 5 * δ[t,3]
ht[t - 3] + ht[t - 2] + ht[t - 1] + ht[t] + ht[t + 1] + ht[t + 2] <= 1 + 5 * δ[t,4]
ht[t - 4] + ht[t - 3] + ht[t - 2] + ht[t - 1] + ht[t] + ht[t + 1] <= 1 + 5 * δ[t,5]
ht[t - 5] + ht[t - 4] + ht[t - 3] + ht[t - 2] + ht[t - 1] + ht[t] <= 1 + 5 * δ[t,6]
δ[t,1]+δ[t,2]+δ[t,3]+δ[t,4]+δ[t,5]+δ[t,6] <= 5
δ[t,k] ∈ {0,1}

約束中的術語5 * δ[t,k]表示:

δ[t,k]=0 => k-th constraint is active
δ[t,k]=1 => k-th constraint is relaxed

我們至少需要一個活動約束,因此我們不允許所有δ[t,k]為1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM