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

奥普塔普兰纳神话般的分数腐败

吴飞语
2023-03-14

我使用增量分数计算器为我的模型。经过几个小时/天的优化在"全断言"模式分数损坏异常抛出:

java.lang.IllegalStateException: Score corruption: the workingScore (-86591/-2765/-422/-591) is not the uncorruptedScore (-86591/-2873/-422/-591) after completedAction [...]:
Uncorrupted: Score calculator 3718238 [schedule=Schedule6422-2015-04-16T09:47:36.932[-86591/-2873/-422/-591], prioritiesScore=-422, timelineGapsScore=-2873, requirementGapsScore=-86591, timelineVersionsScore=-591]
Corrupted: Score calculator 3717237 [schedule=Schedule6422-2015-04-16T09:47:36.932[-86591/-2873/-422/-591], prioritiesScore=-422, timelineGapsScore=-2873, requirementGapsScore=-86591, timelineVersionsScore=-591]

这就是参数TimeLineGapScore中的分数不同。分数实例是从分数计算器对象字段prioritizesscoretimelinegapscorerequirementgapscoretimelineversionscore创建的。根据日志,这两个分数的实例在这些字段中是相等的,但optaplanner引擎发现了差异(-86591/-2765/-422/-591)和(-86591/-2873/-422/-591)。这怎么可能?

我怀疑在解决方案克隆(它的具体实现和深度复制)上存在引用泄漏,但仔细的html" target="_blank">代码检查并没有显示此类错误。

UPD:我忘了提到:optaplanner以守护程序模式运行,模型能够实时更改事实。所以我怀疑模型中的种族条件。但我不知道在optaplanner的保护下,注入是如何实现变化的(文档中的信息不够)。

共有2个答案

微生恩
2023-03-14

这是我的实现错误。在增量分数计算器实现时要准确(或尝试使用Drools)。

罗昊空
2023-03-14

“当解决方案发生更改时,增量分数计算(也称为基于增量的分数计算)将计算具有先前状态的增量以查找新分数,而不是在每次解决方案评估时重新计算整个分数。

例如,如果一个皇后a从第1行移动到第2行,它就不需要检查皇后B和皇后C是否可以互相攻击,因为它们都没有改变。"

当增量分数和真实分数(=未损坏的分数)不同步时,分数损坏就会发生。

可能有几个原因。如果您使用Drools分数计算,它甚至可能是Drools中的一个bug。如果你能把它分离出来,用复制机归档一份jira,那么我们通常会很快给你看。

隔离意味着(按此顺序!):

  1. 删除所有不需要复制的分数规则
 类似资料:
  • 不熟悉OptaPlanner,想在Eclipse中调试示例任务分配以学习。发现断点只有在代码被UI相关代码调用时才会被命中,例如 当在以下位置设置断点时: 它不会被击中。我的问题是,为什么断点没有被击中?如何击中断点?

  • 我正试图使用Kryo库来执行对象的深度复制,但我遇到了一个小问题。我想深度复制一个没有瞬态变量的对象。我知道可以将用于,如下所示: 但是我必须为每个类设置一个新的。我可以从Kryo获得一个默认的,并在那里设置吗?我尝试了类似的解决方案,但它什么也做不到:

  • Symfony 3 [Symfony\Component\DependencyInject\Excema\autowiringFailedExcture] 无法自动连接服务AppBundle\Twig\Base64Extense:参数$storag e的方法__construct()引用接口Vich\UploaderBundle\Stor age\StorageInterface,但不存在这样的服

  • 拨打普通电话(SkypeOut)     使用  Skype ,对传统的电话回线拨打电话。若要使用此机能,需先购买 Skype 点数。 1. 进入  Skype 的选单画面后,选择(拨号)。 2. 选择[国家或地区],从清单中选择国家或地区。 3. 选择[电话号码]后,输入号码并选择[确定]。 4. 选择[通话]。 对方接听后,即可开始通话。 重要 无法使用  Skype 拨打紧急电话。

  • I am using sony xperia z ultra aka togari VM 5.5 GB ram ubuntu 16.xx 有办法解决这个问题吗? 软件包/应用程序/FMRadio/AndroidManifest.xml:44:错误:在软件包“机器人”构建/核心/package_internal.mk:243:找不到程序包“android”构建/核心/package_internal

  • 一面 4.27 1.实习经历中详细讲一个项目及产出 2.tableau了解吗(有dashboard项目就没细问? 3.窗口函数了解吗 rank dense_rank row_number 区别 4.abtest流程 5.想来上海长期发展吗,转正意愿? 团队主要负责看板搭建,报告产出 虽然隔了个五一,但好久没消息,估计凉凉,崩铁小保底也歪了,心更累了

  • #软件开发2023笔面经# 接上回笔试后续。 公司:迪普通信。 岗位:C 开发岗位。 专业素质面, 问熟悉 C语言吗? 主要语言 JAVA,他们之间有什么区别? 熟悉基础,计算机网络,数据结构与算法,操作系统吗? 问二叉树的遍历方式,先序遍历呢? 递归访问? 说说递归? 解决递归,如果数据过大怎摸办? 被扯到内存了,呜呜呜, 我说会内存溢出,又问怎么解决? 答,判断,如果超出大小,则处理,? 又问

  • 本文向大家介绍Android普通对话框用法实例分析,包括了Android普通对话框用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android普通对话框用法。分享给大家供大家参考。具体如下: main.xml布局文件: AlertDialog类: 运行结果: 希望本文所述对大家的Android程序设计有所帮助。