基于CP优化器的复杂分配/调度



我一直在尝试解决CP优化器的问题,但我有点卡住了:

我的项目有200-300+单独的任务,有单独的上游和下游依赖关系。这些任务遵循一个管道(即每个单元从头到尾重复相同类型的任务),但每个任务都有各自不同的出价/持续时间(以小时计算)。员工一次只能处理一个任务,每个任务与下一个任务之间都有一个过渡时间缓冲时间。的任务每种"任务类型"都有部门开始和结束日期,因此任务只能在这些日期之间安排。每个部门都有一定数量的美术师。

基本上,我需要给每个任务一个开始和结束的日期,与部门时间表和员工的个人时间表一致,并优化它,以便每个部门在计划的结束日期前完成。

下面是我目前的代码:

#Create model
mdl = CpoModel()
#Read CSV files
Crew = read_csv("CrewList.csv")
Task = read_csv("TaskList.csv")
#Convert column data to arrays
CrewList = Crew['Name'].tolist()
Dpt = Crew['Dpt'].tolist()
print('Name',CrewList)
TaskList = Task['ConcatTask'].tolist()
print('Tasks',TaskList)l
BidList = Task['Days'].tolist()
print('Tasks',BidList)
UpStream = Task['UpTask'].tolist()
DownStream = Task['DownTask'].tolist()
#Convert normal array to numpy type
u = np.array(UpStream)
d = np.array(DownStream)
#Concatenates each upstream and downstream task into an array
Precedences = np.vstack((UpStream,DownStream)).T
#Adds precedences to model
for x in Precedences:
mdl.add(mdl.end_before_start(Precendences[x]))

希望有一些通用的指导或一个类似的问题/模型在CP解决的例子。我感谢任何帮助!

谢谢!

可以通过sequence Variable来声明worker。

告诉一个任务只能在一个时间段(部门)执行,你必须禁止它重叠一个部门的边界(开始和结束日期)。要实现这一点,可以使用约束forbidExtent(it, f),其中它是任务的区间变量,f是在禁止的时间区间上非零的分段函数。在[e_i, s_{i+1})

上为非零的分段函数。

最新更新