Python混合整数优化

2024-09-28 03:24:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是混合整数优化问题的新手。目前,我使用pulpython接口和默认的CBC解算器来解决这个问题。 问题是如何提高癌症门诊模型的资源利用率,下面是具有目标函数和约束条件的代码。当我使用问题解决(),我有三个不同的问题: 1BeginTreatment变量的值为1.0,但ContinueTreatment变量的值为1.0? 2基于手术椅连续性约束,编号超过29的插槽不应分配给pat_类型8,因为最多只有40个插槽可用。但我还是看到了?(不仅适用于八岁以下的八岁小孩,其他人也一样) 三。我是否应该尝试其他解算器,而不是默认的CBC pulp解算器?如果是,我该怎么做?在

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()

Tags: andinfortyperangelistpulp算器

热门问题