当前位置: 首页 > 知识库问答 >
问题:

Optaplanner评分损坏和基于时间的规则

魏兴邦
2023-03-14
10:19:00,007  INFO XXXXXXXXXXXXXXXXXX:153 - Score corruption: the workingScore (0hard/0medium/-188soft) is not the uncorruptedScore (0hard/0medium/-198soft) after completedAction (Entity(Customer1-19531312-50min)-Agent(19463312-TEST) => Agent(19463312-TEST)):
  The corrupted scoreDirector has 3 ConstraintMatch(s) which are in excess (and should not be there):
    com.package.solver/agentRatio/level2/[[Ljava.lang.Object;@105d99aa, Agent(19463312-TEST)]=-63
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer2-19531332-23min)-Agent(19463312-TEST)]=-50
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer1-19531312-50min)-Agent(19463312-TEST)]=-75
  The corrupted scoreDirector has 3 ConstraintMatch(s) which are missing:
    com.package.solver/agentRatio/level2/[[Ljava.lang.Object;@23739ca6, Agent(19463312-TEST)]=-63
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer2-19531332-23min)-Agent(19463312-TEST)]=-55
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer1-19531312-50min)-Agent(19463312-TEST)]=-80
  Check your score constraints.
10:19:00,007  INFO BasicPlumbingTermination:59 - Terminating solver early.
java.lang.IllegalStateException: Score corruption: the workingScore (0hard/0medium/-188soft) is not the uncorruptedScore (0hard/0medium/-198soft) after completedAction (Entity(Customer1-19531312-50min)-Agent(19463312-TEST) => Agent(19463312-TEST)):
  The corrupted scoreDirector has 3 ConstraintMatch(s) which are in excess (and should not be there):
    com.package.solver/agentRatio/level2/[[Ljava.lang.Object;@105d99aa, Agent(19463312-TEST)]=-63
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer2-19531332-23min)-Agent(19463312-TEST)]=-50
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer1-19531312-50min)-Agent(19463312-TEST)]=-75
  The corrupted scoreDirector has 3 ConstraintMatch(s) which are missing:
    com.package.solver/agentRatio/level2/[[Ljava.lang.Object;@23739ca6, Agent(19463312-TEST)]=-63
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer2-19531332-23min)-Agent(19463312-TEST)]=-55
    com.package.solver/decalageEtPriorite/level2/[Entity(Customer1-19531312-50min)-Agent(19463312-TEST)]=-80
  Check your score constraints.
    at org.optaplanner.core.impl.score.director.AbstractScoreDirector.assertWorkingScoreFromScratch(AbstractScoreDirector.java:308)
    at org.optaplanner.core.impl.solver.scope.DefaultSolverScope.assertWorkingScoreFromScratch(DefaultSolverScope.java:118)
    at org.optaplanner.core.impl.phase.scope.AbstractPhaseScope.assertWorkingScoreFromScratch(AbstractPhaseScope.java:131)
    at org.optaplanner.core.impl.localsearch.decider.LocalSearchDecider.processMove(LocalSearchDecider.java:164)
    at org.optaplanner.core.impl.localsearch.decider.LocalSearchDecider.doMove(LocalSearchDecider.java:149)
    at org.optaplanner.core.impl.localsearch.decider.LocalSearchDecider.decideNextStep(LocalSearchDecider.java:121)
    at org.optaplanner.core.impl.localsearch.DefaultLocalSearchPhase.solve(DefaultLocalSearchPhase.java:66)
    at org.optaplanner.core.impl.solver.DefaultSolver.runPhases(DefaultSolver.java:193)
    at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:157)
  • 08:00:59得分10*5=>50
  • 08:01:00得分9*5=>45

似乎在08:00:59计算分数,在08H01:00进行分数验证

此外,我看到移动是从当前代理到当前代理。这样可以吗?

共有1个答案

魏襦宗
2023-03-14

我面临着同样的问题,在我的例子中,当我将分数计算逻辑从Drools文件移到java代码时,它就开始发生了,类似于:

scoreHolder.addSoftConstraintMatch(kcontext,<complex expression>);

scoreHolder.addSoftConstraintMatch(kcontext,$myVariable.calculate());

根据这个链接我做不到。

 类似资料:
  • 我是Optaplanner的新手,我一直在考虑将VRP扩展到一个不同的问题空间。我用的是6.1.0-final。这是一个很难计算的问题,但下面是: 规划实体-装运(扩展Standstill),由运输商(即货船)锚定规划变量-终端(货物目的地),当然隐含运输商(作为VRP示例中的Vehicle这样的影子变量) 在这个路径问题中,货物直接运输到一个终端,然后再运回工厂。即一个运输机服务于一个终点站,然

  • 我正在使用Optaplanner开发一个系统,它类似于示例——会议调度。将一些任务分配给一些机器并确定开始时间。我创建了一个类——TaskAssignment作为规划实体,字段——“机器”和“开始时间谷物”作为规划变量。 但在我的用例中,会议调度中不存在约束,我不知道如何实现。在某些情况下,任务前端可能有准备时间。这意味着,TaskA和TaskB是同一台机器上的连续任务,TaskB在TaskA完成

  • 问题内容: 我正在使用Java 7,下面有下面的类。我实现和正确的,但问题是,收益的主要方法,下面又返回两个对象相同的散列码。我可以让更多的眼睛看着这个班级,看看我在这里做错了什么吗? 更新: 我更换了我称之为行方法用我自己的哈希函数:。它返回一个不同的哈希码,这是当两个对象不同时应该执行的操作。是方法打破? 对你的帮助表示感谢! 问题答案: 实际上,您碰巧触发了纯粹的巧合。:) 碰巧是通过相继添

  • 我正在尝试使用Drools编写一个基于规则的引擎。规则如下: 规则“警报”:如果状态为“警报”,请立即发送通知。 规则“警告”:如果状态为“警告”,则将设备ID保存在内存中并等待5分钟。如果在5分钟内收到另一条具有相同设备ID和状态“已解决”的消息,则取消此规则。否则,将状态升级为Alarm并触发规则“Alarm”。 规则“已解决”:如果状态为“已解决”并且设备ID已在内存中,则清除该设备ID的“

  • null 为此,使用mvel语句实现了一个elastica脚本,以支持正则表达式匹配。换句话说,它检查左边的值是否与右边的正则表达式匹配(只有这样一个变量才会相应地递增)。但不幸的是,当搜索字符串是特定于语言的时,就会出错,尽管左边的值也是指定的语言。另一个需要处理的问题是我上面提到的第二种情况(无法使其工作)。 当一个值(“一个示例”(属于name字段))以给定的单词('one')开头时,脚本工