【问题标题】:Fix a task to an employee in chained planning variable在链式计划变量中为员工修复任务
【发布时间】:2017-10-17 12:48:48
【问题描述】:

这是在任务计划问题的上下文中,其中任务链(T1、T2、T3 等..)被分配给员工(锚点),比如 E1。所以,计划的结果一般是这样的:

E1 -> T1 -> T2 -> T3

T1、T2 和 T3 可以来自任何任务列表。现在,我想要的是来自 T1,T2,T3,T4,T5,T6.. 的列表中的东西,必须将 T3 分配给 E1。简单来说,T3 必须链接到锚点 E1 链之间之间(可能不是第一个)的某处。 Optaplanner 只能选择在链式计划变量中选择先前的 entityOrAnchor,如果我想将第一个任务分配给员工,但我想要一个应该在一天晚些时候发生的任务,所以它会在任务链之间的某个地方发生。

我能想到的解决方案:
1。保留一个额外的变量“assignEmployee”。
2。保持一个硬约束,以便 assignEmployee 匹配锚,即员工。

这将在相同的情况下工作,我必须保持一个非常强(加权)的高约束,但问题是我不想保持它作为约束,因为不可能将该任务分配给其他员工和我想对其进行建模,以便将特定任务分配给特定员工。我们还有哪些其他选择?

我想要这个做什么?
这是因为上面 T3 中的任务是特定于该员工的休息时间,而我将休息时间作为任务保留的原因是因为休息地点也是一个位置,应该根据附近的任务进行计划,以避免完全不同的驾驶时间。

【问题讨论】:

    标签: optaplanner drools-planner


    【解决方案1】:

    这是对我有用的解决方案:

    如果 T3 是您要分配员工 E1 的链中任务,则在提交给 Optaplanner 之前,使用以下命令将 T3 分配给 E1:

    • E1.setNextTask(T3) --InverseShadowVar
    • T3.prevTaskOrEmployee(E1)--正版变量
    • T3.setEmployee(E1) -- 锚影变量
    • T3.setEmployeeLocked(true)

    这使得 T3 已经用员工 E1 初始化,所以 CH 不会改变它。现在,过滤您所有的 LS 移动(更改/交换/链),这样他们就不会尝试将锁定员工的任务移动到其他员工。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      相关资源
      最近更新 更多