首页 > 解决方案 > 在任务分配 Optaplanner 中每天将一项任务分配给一位客户

问题描述

我需要有关 Optaplanner 任务分配更改的帮助,以下是相同的完整信息:-

我有 70 个任务,每个任务需要 2 到 8 个小时,这是为每个任务定义的,每个任务的优先级低,员工和客户之间的亲和力低,这些任务与 37 个客户相关联。

我的问题是,我如何将这些任务分配给员工,以便如果客户的任务分配给员工,那么在那一天,该客户的另一项任务不应分配给同一名员工或另一名员工。有人可以帮助解决 drl 规则或 java 约束吗?

标签: droolsoptaplanner

解决方案


不知道您的数据模型,我将对可用字段进行一些假设。约束可能如下所示:

.from(Task.class)
.ifExistsOther(Task.class, 
    Joiners.equal(Task::getCustomer), 
    Joiners.equal(Task::getDay))
.penalize("Two tasks for the same customer on the same day", ...)

由你决定惩罚的力度。如果你想消除这种情况,你应该把它变成一个硬约束——打破这个约束的解决方案是不可行的。

(编辑)还有另一种选择,那就是使数据模型中的情况变得不可能。如果您为每个客户+天组合创建一个计划实体,那么单个客户绝对不可能在一天内完成更多任务。


推荐阅读