我有超过10,000次停止的大型VRP问题。无论使用哪种选项(包括过滤器和其他技巧),构建启发式建议都需要很长时间。
移动和交换算法一旦启动就能正常工作,但需要30分钟才能解决构建阶段。
对可能提供更好结果的选项的任何建议?我觉得Optaplanner在施工阶段过于严格,当一个更简单的选择可能是更好的平衡。
看起来效果最好的配置如下:
<constructionHeuristic>
<queuedEntityPlacer>
<entitySelector id="placerEntitySelector">
<cacheType>PHASE</cacheType>
<selectionOrder>SORTED</selectionOrder>
<sorterManner>DECREASING_DIFFICULTY</sorterManner>
</entitySelector>
<changeMoveSelector>
<entitySelector mimicSelectorRef="placerEntitySelector" />
<filterClass>org.optaplanner.examples.vehiclerouting.domain.solver.CustomerSelectionFilter</filterClass>
</changeMoveSelector>
</queuedEntityPlacer>
</constructionHeuristic>
干杯,尼克
答案 0 :(得分:0)
我在非VRP案例中做过的一些想法(在某种程度上会起作用):
selectedCountLimit
(我不会低至1)确实是加速建设启发式的标准方法。交易结果质量的速度。真正的解决方案,因为你有10k + VRP位置:
建筑启发式中的附近选择(我认为你已经在本地搜索中使用了附近选择(如果没有,你应该))。我还没有做过任何实验 - 这是我非客户优先的待办事项列表。我相信optaplanner-core需要一些改进,但没什么大不了的。 6.2:1)CH中的问题需要结束选择器,并且附近的选择总是永远不会结束(因为它使用概率)。 selectionOrder RANDOM和selectionLimit 1000的组合可能可以解决这个问题。或者更好的是,我们应该支持附近的原始选择(这将是结束并且不会使用概率)。请注意,selectionLimit本身并不足够,因为实体列表的“附近”顺序因实体而异。 2)某些附近的随机分布不允许有机会选择每个元素。只有初始化元素必须是可选择的(其他明智的链接原则被打破)。不知道现在发生了什么。需要验证。
构造启发式“最近邻”。在optaplanner 6.2中尚未实现开箱即用。而(true)连接彼此最接近的2个位置。可能会暂时违反链接原则......这与Fit First相反。这些值不是逐个拟合实体(取一个实体并找到它的值),而是逐个拟合(取一个值并找到它的实体。
HTH