gpt4 book ai didi

python-constraint 添加动态约束

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:06 25 4
gpt4 key购买 nike

我正在使用python-constraint库来解决 CSP 为机场每个航类预留机位的问题。我需要将 Bays:('A1', 'A2', 'B1', 'B2', 'C1') 分配给 Flights:('MI428', 'UL867', 'QR664', 'TK730', 'UL303') 变量集。

为第二组分配值时几乎没有限制。这是我的代码

from constraint import *

problem = Problem()

flight_names = ['MI428', 'UL867', 'QR664', 'TK730', 'UL303']

bays_list = ['A1', 'A2', 'B1', 'B2', 'C1']

problem.addVariables(flight_names, bays_list)

bay_compat = {'MI428':['A1', 'A2', 'B1'], 'UL867':['B1', 'B2'], 'QR664':['A2', 'B1', 'B2'] , 'TK730':['C1', 'A1'], 'UL303':['B2', 'C1']}

for flight in flight_names:
problem.addConstraint(lambda fl: fl in bay_compat[flight], [flight])

solutions = problem.getSolutions()

print (solutions)

上面的代码工作正常。我想要的是添加另一个约束,其中每个航类都与特定时间段相关联,称为到达和出发时间之间的时间段。

为此,我创建了另一个列表,如下所示:

time_constraints = {'MI428':(1,3) , 'UL867':(2,7), 'QR664':(3,9), 'TK730':(15,16), 'UL303':(16,17)}

注意:例如,这里(1,3)表示凌晨1点到3点

我需要分配海湾,以便没有两个航类同时获得相同的海湾。所以我问如何使用 python-constraint 中的 addConstraint() 方法添加该约束??

最佳答案

首先,您必须添加定义航类起飞时间的变量:

flight_names = ['MI428', 'UL867', 'QR664', 'TK730', 'UL303']
flight_times = ['T-' + name for name in flight_names]
bays_list = ['A1', 'A2', 'B1', 'B2', 'C1']

times = range(20) # or how many times you have

problem.addVariables(flight_names, bays_list)
problem.addVariables(flight_times, times)

然后,您必须施加约束,即必须为每个航类分配遵循 time_constraints 的特定时间:

time_constraints = {'T-MI428':(1,3) , 'T-UL867':(2,7), 'T-QR664':(3,9), 'T-TK730':(15,16), 'T-UL303':(16,17)}

for flight_time in flight_times:
start, end = time_constraints[flight_time]
problem.addConstraint(lambda fl: fl in range(start, end+1), [flight_time])

现在您必须添加“您不能同时在同一湾有两个航类”约束。为此,您需要生成每对可能的航类:

for flight_one, time_one in zip(flight_names, flight_times):
for flight_two, time_two in zip(flight_names, flight_times):
if flight_one == flight_two:
continue
problem.addConstraint(
lambda fl_one, t_one, fl_two, t_two: fl_one != fl_two or t_one != t_two,
[flight_one, time_one, flight_two, time_two]
)

如果使用的海湾不同使用的时间不同,则满足约束。

<小时/>

我无法测试上面的代码,但这应该为您提供一个很好的起点。

关于python-constraint 添加动态约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52854680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com