【问题标题】:Optaplanner: Dynamic number of planning variable based on ProblemFactCollectionPropertyOptaplanner:基于 ProblemFactCollectionProperty 的规划变量的动态数量
【发布时间】:2021-10-11 16:48:18
【问题描述】:

问题:分配给客户的卡车数量有限。

必须将卡车分配给客户。由于卡车数量有限,卡车需要返回重新装载以交付给下一位客户。

行程 - 在仓库装载,在客户/少数客户处卸货,返回仓库。

问题事实是可用的卡车和要交付的客户。我们需要根据几个与时间相关的条件(如卡车可用时间、司机小时数等)动态地找出卡车可以行驶多少次。

我能想到的解决方案: 根据业务理解预先计算卡车的最大行程次数 - 将其用作计划变量。为违反时间限制提供硬分,因此如果卡车超过可用的卡车/行程时间,将很少有行程未分配。

需要帮助: 对于每个已解决的示例,我们在计划之前都有固定数量的计划变量。即使在链式规划变量(如 TSP、VRP)中,我们也预先拥有固定数量的卡车。

感谢任何帮助。如果没有直接的解决方案,我提出的方法是最好的吗?

【问题讨论】:

    标签: constraints redhat optaplanner


    【解决方案1】:

    目前确实推荐该解决方案:

    1. 在 anchorValueRange 中提供足够的卡车,以确保可以找到可行的解决方案。定义这个数字可能很棘手:通常是平均使用量的两倍。例如,如果您有 300 次访问并且每辆卡车平均进行 100 次访问,那么给它 6 辆卡车,因为您永远不会期望它使用超过 6 辆卡车(并且可能会少得多)。如果卡车有技能或亲和力,这将变得更加复杂。

    2. 添加一个额外的分数等级:如果您使用 HardSoftScore,请切换到 HardMediumSoftScore。

    3. 添加一个中等限制以惩罚使用的卡车数量。这比硬约束(容量等)更软,比软约束(距离等)更硬。

    (替代方案,即在运行中向值范围添加/删除值,目前仅在 OptaPlanner 的架构中理论上可行(不要为此使用 addProblemFactChanges!)。这听起来像是完美的解决方案,但是是许多子系统都从一个固定的值范围中获利,因此这种方法将有严重的权衡。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多