首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drools Planner移动

Drools Planner移动
EN

Stack Overflow用户
提问于 2013-03-27 20:43:11
回答 1查看 293关注 0票数 0

我没有很多编程经验,更不用说Drools了,但我正在做一个类似于车辆路线的项目。几乎所有的东西都工作得很好,除了一些移动,这取决于随机种子。

问题是,一旦启发式阶段完成,有时局部搜索阶段会做出一些奇怪的举动,比如下一步:

启发式阶段解决方案:

第一天: place 1 -> place 2 -> place 3 -> place 4 -> place 5 -> place 6天2: place 7 -> place 8 -> place 9 -> place 10

本地搜索移动:位置5移动到第2天解决方案:

第1天: place 1 -> place 2 -> place 3 -> place 4第2天: place 5 -> place 6

剩下的地方没有一天(在本例中是车辆),它们作为一个未锚定的链:

place 7 -> place 8 -> place 9 -> place 10 -> place 7 ->等

因此,当程序查找其中任何一天时,它会进入无限循环。显然,问题不是如何走出这个循环(我不是那个菜鸟),而是如何避免这些动作。

我使用与示例相同的求解器配置(更改求解器类等)。所以我不明白它为什么要做这些动作。我认为我应该编写自己的Move类,但我找不到如何编写它的示例,也找不到MoveFactory。我将solver.xml放在代码块中。

帮助我学习编写移动代码和MoveFactory类的链接或提示以及避免这种情况的配置提示(如果有的话)都会很有帮助。

无论如何,感谢大家的时间和努力。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<solver>
  <!--<environmentMode>DEBUG</environmentMode>-->
  <environmentMode>PRODUCTION</environmentMode>
  <solutionClass>org.tourgune.planificador.bean.Turista</solutionClass>
  <planningEntityClass>org.tourgune.planificador.bean.PuntoInteres</planningEntityClass>

  <scoreDirectorFactory>
    <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     <scoreDrl>/org/tourgune/planificador/core/planificadorScoreRules.drl</scoreDrl>

  </scoreDirectorFactory>

  <termination>
    <maximumMinutesSpend>4</maximumMinutesSpend>
  </termination>
  <constructionHeuristic>
    <constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
  </constructionHeuristic>
  <localSearch>
    <selector>
      <selector>
          <moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangeMoveFactory</moveFactoryClass>
      </selector>
      <selector>
        <moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangePartMoveFactory</moveFactoryClass>
      </selector>
      <!-- TODO needs a GenericChainedSwapMoveFactory and probably even a GenericChainedSwapPartMoveFactory -->
    </selector>
    <acceptor>
      <planningEntityTabuSize>10</planningEntityTabuSize>
    </acceptor>
    <forager>
      <minimalAcceptedSelection>0</minimalAcceptedSelection>
    </forager>

  </localSearch>
  <!--<localSearch>-->
    <!--<selector>-->
      <!--<selector>-->
        <!--<moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangeMoveFactory</moveFactoryClass>-->
      <!--</selector>-->
      <!--<selector>-->
        <!--<moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangePartMoveFactory</moveFactoryClass>-->
      <!--</selector>-->
    <!--</selector>-->
    <!--<acceptor>-->
      <!--<simulatedAnnealingStartingTemperature>10</simulatedAnnealingStartingTemperature>-->
    <!--</acceptor>-->
    <!--<forager>-->
      <!--<minimalAcceptedSelection>4</minimalAcceptedSelection>-->
    <!--</forager>-->
  <!--</localSearch>-->
</solver>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 22:20:09

首先升级到5.5.0,这样你就可以只使用<changeMoveSelector/>而不是那些通用的工厂。遵循升级配方txt。

如果问题仍然存在,那么启用DEBUG来检测分数损坏(通常是由clone方法或hacky分数规则引起的)。OptaPlanner (= Drools Planner) 6.0将使编写分数规则变得更容易,并使您面临分数损坏的可能性大大降低。

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

https://stackoverflow.com/questions/15659089

复制
相关文章

相似问题

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