首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在施工阶段有使用sorterClass的方法吗?

在施工阶段有使用sorterClass的方法吗?
EN

Stack Overflow用户
提问于 2022-01-18 11:04:31
回答 1查看 38关注 0票数 0

问题概述:

我们给用户分配任务,只有一个任务可以分配给用户,任务可以是可变长度: 1-16小时用户一次只能执行一个任务,用户每天有8个小时。我们使用的是时间谷物模式-1粒度=1小时。由于任务是可变长度的,所以并非所有的TimeGrains都用于给定的用户。

使用默认排序不会在10分钟内返回解决方案。

我在下面的配置中取得了一些成功(结果在几秒钟内返回)

代码语言:javascript
复制
  <constructionHeuristic>
    <changeMoveSelector>
      <selectionOrder>RANDOM</selectionOrder>
      <selectedCountLimit>300</selectedCountLimit>
      <valueSelector variableName="user"/>
    </changeMoveSelector>
    <changeMoveSelector>
      <valueSelector variableName="startDate"/>
    </changeMoveSelector>
  </constructionHeuristic>

然而,这似乎导致任务分配不均。我试图实现一个自定义排序,即

<sorterClass>com.example.UserSelectionSorter</sorterClass>

但这会产生以下错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.IllegalStateException: Replay must occur after record. The recordingEntitySelector (Recording(FromSolutionEntitySelector(SubTask)))'s hasNext() has not been called yet.
        at org.optaplanner.core.impl.heuristic.selector.entity.mimic.MimicReplayingEntitySelector$ReplayingEntityIterator.hasNext(MimicReplayingEntitySelector.java:117)
        at org.optaplanner.core.impl.heuristic.selector.common.iterator.AbstractOriginalChangeIterator.createUpcomingSelection(AbstractOriginalChangeIterator.java:47)
        at org.optaplanner.core.impl.heuristic.selector.common.iterator.AbstractOriginalChangeIterator.createUpcomingSelection(AbstractOriginalChangeIterator.java:26)
        at org.optaplanner.core.impl.heuristic.selector.common.iterator.UpcomingSelectionIterator.hasNext(UpcomingSelectionIterator.java:43)
        at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
        at org.optaplanner.core.impl.heuristic.selector.move.decorator.AbstractCachingMoveSelector.constructCache(AbstractCachingMoveSelector.java:77)
        at org.optaplanner.core.impl.heuristic.selector.move.decorator.SortingMoveSelector.constructCache(SortingMoveSelector.java:43)
        at org.optaplanner.core.impl.heuristic.selector.common.SelectionCacheLifecycleBridge.phaseStarted(SelectionCacheLifecycleBridge.java:51)
        at org.optaplanner.core.impl.phase.event.PhaseLifecycleSupport.firePhaseStarted(PhaseLifecycleSupport.java:37)
        at org.optaplanner.core.impl.heuristic.selector.AbstractSelector.phaseStarted(AbstractSelector.java:50)
        at org.optaplanner.core.impl.phase.event.PhaseLifecycleSupport.firePhaseStarted(PhaseLifecycleSupport.java:37)
        at org.optaplanner.core.impl.heuristic.selector.AbstractSelector.phaseStarted(AbstractSelector.java:50)
        at org.optaplanner.core.impl.phase.event.PhaseLifecycleSupport.firePhaseStarted(PhaseLifecycleSupport.java:37)
        at org.optaplanner.core.impl.constructionheuristic.placer.AbstractEntityPlacer.phaseStarted(AbstractEntityPlacer.java:44)
        at org.optaplanner.core.impl.constructionheuristic.DefaultConstructionHeuristicPhase.phaseStarted(DefaultConstructionHeuristicPhase.java:118)
        at org.optaplanner.core.impl.constructionheuristic.DefaultConstructionHeuristicPhase.solve(DefaultConstructionHeuristicPhase.java:65)
        at org.optaplanner.core.impl.solver.AbstractSolver.runPhases(AbstractSolver.java:99)
        at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:192)
        at com.example.App.main(App.java:50) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-18 14:59:43

一种构造启发式算法的高级配置。它显式地写入模拟录音/重放。这允许您进入第一个entitySelector (而不是参考一个),并在那里使用sorterClass。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70754538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档