Optaplanner:基于ProblemFactCollectionProperty的规划变量的动态数量

Optaplanner: Dynamic number of planning variable based on ProblemFactCollectionProperty

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

卡车必须分配给客户。由于货车数量有限,货车需要return返回重新装货才能运送给下一位顾客。

行程 - 在站点装货,在 customer/few 位客户处卸载,返回站点。

问题事实是可用的卡车和要交付的客户。我们需要动态地找到在少数 timing-related 条件下(例如卡车可用时间、driver 小时等)从 truck-based 可以进行多少次旅行。

我能想到的解决办法: Pre-compute 基于业务理解的卡车最大行程次数 - 将其用作计划变量。为违反时间限制的情况提供硬分,因此如果卡车超过可用 truck/trip 时间,很少有行程未分配。

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

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

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

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

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

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

(另一种方法,adding/removing 值到动态值范围,目前仅在理论上在 OptaPlanner 的体系结构中可行(不要为此使用 addProblemFactChanges!)。这听起来像是完美的解决方案,但有许多子系统从固定值范围中获利,因此这种方法会有严重的权衡。)