0

混合整数最適化問題は初めてです。現在、この問題を解決するために、デフォルトの CBC ソルバーを使用して、pulp python インターフェイスを使用しています。問題は、がん診療所モデルでのリソース使用率を改善することです。以下は、目的関数と制約を含むコードです。prob.solve() を使用すると、3 つの異なる質問があります。 1. BeginTreatment 変数の値は 1.0 ですが、ContinueTreatment 変数の値は 1.0 になりませんか? 2. 椅子の連続性の制約に基づいて、最大 40 のスロットしか使用できないため、29 を超える番号のスロットを 8 の pat_type に割り当てることはできません。しかし、私はまだそれを見ますか?(pat_type 8 だけでなく、他のものも) 3. パルプのデフォルトの CBC ソルバーの代わりに、別のソルバーを試す必要がありますか? はいの場合、どうすればよいですか?

import pulp
# Indices and Parameters
chair = list(range(1,24))
pat_type = list(range(1,9))
slot = list(range(1,41))
type_and_demand = {1:24,2:10,3:13,4:9,5:7,6:6,7:2,8:1}
type_and_slots = {1:1,2:4,3:8,4:12,5:16,6:20,7:24,8:28}
# Decision Variables
Y = pulp.LpVariable.dicts("BeginTreatment", 
    (chair,pat_type,slot),0,1,pulp.LpBinary)
X = pulp.LpVariable.dicts("ContinueTreatment", 
    (chair,pat_type,slot),0,1,pulp.LpBinary)
# Objective Function
prob = pulp.LpProblem("ChairUtilization", pulp.LpMaximize)
prob += pulp.lpSum([Y[i][j][t] for i in chair for j in pat_type for t in 
        slot]) 
# Constraints
# Patient Type 1 Continuity constraint
for i in chair:
 for t in slot:
   for j in range(1,2):
        prob += X[i][j][t] == 0
# Chair Continuity Constraint
for i in chair:
 for j in range(2,9):
   for t in range(1,(len(slot)-type_and_slots[j]+1)+1):
    prob += pulp.lpSum([X[i][j][u] for u in range(t+1,t+type_and_slots[j])]) 
            == (type_and_slots[j] - 1)*Y[i][j][t]
# No more than one patient per chair
for t in slot:
 for i in chair:
    prob += pulp.lpSum([X[i][j][t] for j in pat_type]) + pulp.lpSum([Y[i][j] 
            [t] for j in pat_type]) <= 1
 # No new arrivals during lunch time period
 prob += pulp.lpSum([Y[i][j][t] for i in chair for j in pat_type for t in 
         range(19,23)]) == 0
# Patient Mix
for j in pat_type:
 prob += pulp.lpSum([Y[i][j][t] for i in chair for t in slot]) == 
         type_and_demand[j]
prob.solve()
4

0 に答える 0