![](/img/trans.png)
[英]How to perform equal rationing in Linear Programming using Python library PuLP
[英]Multiplication between booleans in linear programming (python, Pulp library)
我正在尋找線性編程問題的解決方案,並且需要定義以下約束:
gji = 1 if guest j is seated at table i, 0 otherwise
gki = 1 if guest k is seated at table i, 0 otherwise
pjik = gij * gik = 1 if guest j AND guest k are seated at table i, 0 otherwise
我寫了前兩個Costrain(使用Pulp庫),但是我不知道如何表示gji*gki
的乘法
我的代碼:
Gji = LpVariable.matrix("Gji",(range(0,number_guest),range(0,number_table)),lowBound=0, upBound=1, cat='binary')
Gki = LpVariable.matrix("Gki",(range(0,number_guest),range(0,number_table)),lowBound=0, upBound=1, cat='binary')
for row in range (0,number_guest):
prob += lpSum(Gji[row])<=1
prob += lpSum(Gji[row])>=1
for columns in range (0,number_table):
prob += lpSum(np.matrix(Gji).T[columns].tolist()) <= a
我該如何寫Pjki的Pjki
?
在PuLp中實施該模型之前,請務必先制定適當的數學模型。
讓
g(i,k) = 1 if guest i sits at table k
0 otherwise
和
p(i,j,k) = 1 if guests i and j sit at table k
0 otherwise
首先,您需要一些分配約束:
sum(i, g(i,k)) <= capacity(k) for all k
sum(k, g(i,k)) = 1 for all i
二進制乘法
p(i,j,k) = g(i,k) * g(j,k)
可以線性化為
p(i,j,k) <= g(i,k)
p(i,j,k) <= g(j,k)
p(i,j,k) >= g(i,k)+g(j,k)-1
p(i,j,k) ∈ {0,1}
通常我們不需要所有這些變量和方程式,但這取決於模型的細節。 當然,我們應該只考慮i<j
。 有趣的是,該公式是如此緊密,我們可以將p(i,j,k)放寬到0和1之間的連續值,它們將自動為整數。
這個數學描述很容易被轉錄成Python / Pulp。 您可能應該重做您的Python代碼,因為它包含一些荒謬的內容。 一些提示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.