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

OptaPlanner是否有一种“内置”的方式来执行多单位得分归一化?

鲁浩渺
2023-03-14

目前,我的问题有四个指标。每一种方法都是完全不同的(每一种方法都有不同的单位,不同的范围等等),而且每一种方法都是外部加权的。我用口水来得分。

我只有一个分数级别(SimpleLongScore),我必须找到一种方法,将这些度量的各个分数适当地组合到一个Long值上

目前最重要的问题是度量值的范围可能有很大的不同。

因此,例如,如果在一次移动之后,一个可能范围较小的度量的得分提高了,比如说10%,那么这可能完全被一次替代移动所抵消,该替代移动使范围较大的度量的得分仅提高了1%,因为OptaPlanner只考虑实际得分值,而不考虑值的可能范围以及变化如何成比例地影响它们(据我所知)。

那么,有没有一种方法来处理这个已经是我找不到的OptaPlanner的一部分的干净呢?

实施帕累托计分是唯一可行的解决方案吗?因为那好像是个恶梦。

到目前为止,我有代码/数学来计算我从Drools中访问的一个度量的可能的最佳和可能的最差分数,然后我可以计算一个移动将我们置于该范围内的位置,但这也会感觉很糟糕,并且如果我们想在该范围内进行非线性缩放,就会引起增量评分的问题。

我一直在想我应该硬着头皮执行帕累托得分。

谢谢!

共有1个答案

羊舌洛华
2023-03-14

看看文档中的@constraintconfiguration@constraintweight

再看看“解释分数”这一章,它可以准确地告诉你哪一个约束对找到的最佳解决方案有哪一个分数的影响。

但是,如果您需要帕累托优化,因此需要多个不相互支配的最佳解决方案,那么要知道OptaPlanner还不支持它,但我知道有两个案例是通过破解bestsolutionrecaller在OptaPlanner中实现的。

也就是说,99%想到pareto最优化的情况下,@constraintweight反而是100%满意的,因为用户不想要多个最佳解决方案(除了在模拟期间),他们只想要一个在生产中。

 类似资料:
  • 问题内容: 我正在尝试将长度不定的多个数据列表输出到CSV文件。每个列表应该是输出CSV文件中的一列。有直接的做事方法吗?如果我将每个列表输出为一行,那么我将遍历每个列表并在结束时输出返回值,但是这种方法在按列工作时不起作用。 我曾想过一次逐项检查所有列表并增加一个计数器,但这也会失败,因为有些列表比另一些​​更长。为了解决这个问题,我将不得不在每次迭代时检查计数器是否在每个列表的末尾,这在计算方

  • 是否有办法将pos值分配给nx。Graph(),以便在nx时默认使用此值绘制。调用draw()? 我想以JSON格式存储图形,如果我不必将这些信息与图形分开存储,这将对我非常有帮助。 据我所知,可以使用pos参数的add_node(),在某个位置添加单个节点,但我可以将位置分配给Graph中已经存在的节点吗?

  • 现在我有了一个,它表示在特定时间板上当前的所有块。 我需要数一下一种类型有多少件,比如白车,黑皇后等,但正常的做法会变得太长,而且看起来很难看。我就是这么做的... 必须有一种更优雅的方法来实现这一点,它需要更少的代码行。我的意思是如果有超过6种类型的碎片和2种类型的颜色。我不能一直像这样给switch语句添加大小写,对吧?但我想不出怎样才能让它更优雅。

  • 问题内容: 我知道你可以打电话 如果它不是可执行文件,则会得到一个异常,但这是不安全的,因为运行可执行文件会产生副作用。 我想只检查扩展名在Windows上就足够了,但是有没有办法我可以读取* nix文件系统上的可执行文件呢? 找出文件在OS中是否可执行的最佳方法是什么? 问题答案: 参见java.io.File.canExecute()

  • 我准备了和(Java分数计数)示例,以解决电源消费者和电源供应商的问题(电话和充电器,其中电压必须相等,消费者所需安培不得大于供应商提供的安培,每个供应商都有成本)。 Optaplanner为两个消费者和一个供应商的样本制作解决方案,这不是我想要的,因为一个供应商不能在一次对两个消费者操作,解决方案必须以至少-1的值结束。 我看了一下OptaPlanner:如何强制规划变量值只使用一次,但不明白如

  • 有没有Angular2的方法可以做到这一点,或者我只是使用老式的JavaScript?