【问题标题】:Complex Assigning/Scheduling with CP Optimizer使用 CP Optimizer 进行复杂的分配/调度
【发布时间】:2022-07-01 22:05:08
【问题描述】:

我一直在尝试解决 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 中解决的类似问题/模型的示例。感谢您的帮助!

谢谢!

【问题讨论】:

    标签: python optimization cp docplex


    【解决方案1】:

    一个worker可以通过序列变量来声明。

    要告诉一个任务只能在一个时间段(部门)内执行,您必须禁止它与部门的边界(开始和结束日期)重叠。要实现它,您需要使用约束 forbidExtent(it, f),其中它是任务的间隔变量,而 f 是在禁止的时间间隔上非零的分段函数。为此目的是 [s_i e_j) (假设)连续部门时间段:是在 [e_i, s_{i+1}) 上非零的分段函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 2020-07-21
      相关资源
      最近更新 更多