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

为什么添加硬约束会产生糟糕的解决方案?

松桐
2023-03-14

我试图使用Optaplanner来最优地分配生产单位给一组承包商。目标是分配生产单元,使实际库存尽可能接近最优库存。为此,我使用了一个软约束,简单地说,它遵循以下基本方程:

这是我的软约束评分的基础。Optaplanner的目的就是将这种差异最小化。但是,我确实有一个硬约束,它指定了可以分配的最小生产单位。每当将此约束引入问题时,Optaplanner产生的解都不是最优解。它基本上是将所有可用的生产单元分配给一个单一的承包商,以便不打破最小生产量的限制。

这确保没有承包商被分配少量的生产单元(分配0是可以的),但它有一个意想不到的后果,即软约束根本没有优化。延长运行时间基本上只是在不同的承包商之间移动整个生产单元。

编辑:澄清一下,硬约束只有当生产单位低于120时才会受到惩罚。它不奖励120家以上的生产单位。最大可能的硬分数是0。

(为了简单起见,我说“将单位分配给承包商”,而实际上Optaplanner是“将承包商分配给单位”)

共有1个答案

雷锋
2023-03-14

它可能陷入了一个深度的局部最优值,因为缺乏足够聪明的方法来摆脱它(对于元启发式来说,它太深了)。如果打开调试(以及以后的跟踪)日志记录,您将看到optaplanner所做的决定。

尝试添加柱子更改和交换移动:

<constructionHeuristic/>
<localSearch>
  <unionMoveSelector>
    <changeMoveSelector/>
    <swapMoveSelector/>
    <pillarChangeMoveSelector/>
    <pillarSwapMoveSelector/>
  </unionMoveSelector>
</localSearch>

如果这没有帮助,您将需要自定义移动。

 类似资料:
  • 问题内容: 我不是PHP开发人员,但我在很多地方都看到人们似乎把它当作瘟疫之类。为什么? 问题答案: 表示通过GET或POST传递的所有变量都可以作为脚本中的全局变量使用。由于访问未声明的变量不是PHP中的错误(这是警告),因此可能导致非常讨厌的情况。考虑一下,例如: 这本身不是一件坏事(精心设计的代码不应生成警告,因此不应访问可能未声明的变量(并且出于相同原因也不 需要 )),但是PHP代码通常

  • 我正在将错误消息添加到登录屏幕。 虽然代码运行良好,并且执行我希望它执行的操作。它会在执行时导致约束错误。 以下是受影响的约束: 下面是导致errorView出现的函数。 如何在不破坏约束的情况下更改约束? 我尝试self.view.update约束()-但是什么也没有做。我还尝试在添加约束之前删除它们,但是仍然有一个错误。 任何帮助都将不胜感激! 编辑: 我找到了一个Objective-c解决方

  • 在我的GUI应用程序中,我从中的嵌套函数中为赋值。 这当然会返回一个无限的LocalError。 我的问题是,为什么使用declaration关键字来解决这个问题是件坏事? 因为它实现了与相同的最终结果,即的值被更改,而不是创建一个新的局部变量;为什么这是一个坏的,或者不-蟒蛇的方法来解决这个问题?

  • 我的问题很简单,但我在文档中找不到任何信息。 从视图层次中删除视图(或移动到其他视图)时,布局约束会发生什么情况? 例如,让容器具有子视图A和B。容器C包含一些约束。然后我们调用removeFromSuperview。A的约束会发生什么情况? 如果我们再次将A添加到C,会发生什么?

  • 我目前正在完成我的MySQL任务,在使用外键时遇到了一个小问题。问题如下: 在我输入此代码后,弹出错误1215,表示我不能添加外键约束。错误如下所示:

  • 问题内容: 我希望有人能够提供一些有关Java虚拟机的根本差异的见解,从而使Java虚拟机可以很好地实现线程而无需使用全局解释器锁(GIL),而Python则需要这样做。 问题答案: Python(该语言)不需要GIL(这就是为什么它可以在JVM [Jython]和.NET [IronPython]上完美实现的原因,并且这些实现可以自由地使用多线程)。CPython(流行的实现)一直使用GIL来简