【问题标题】:Optimise multiple objectives in MiniZinc优化 MiniZinc 中的多个目标
【发布时间】:2020-12-01 13:55:49
【问题描述】:

我是 CP 的新手,但我想解决我在大学时遇到的问题。

我有一个 Minizinc 模型,它可以最大限度地减少执行某些任务的二手机器的数量。机器有一些资源,任务有资源需求。除了最小化这个数字,我试图最小化将任务分配给机器的成本(我有一个带成本的数组)。有没有机会先最小化这个数字,然后在 Minizinc 中优化成本?

例如,我有 3 个任务和 2 台机器。每台机器都有足够的资源来分配 3 个任务,但我想分配成本较低的任务。

对不起我的英语,感谢您的帮助。如果有这样的需要,我会粘贴我的代码。

【问题讨论】:

  • 我现在没有时间写一个完整的答案。一种选择是在生成 FlatZinc 文件后对其进行扩展,使用目标列表扩展优化目标,然后使用fzn2omt 将问题转换为 OMT。 README.md 包含一个字典优化的示例。

标签: constraint-programming minizinc


【解决方案1】:

您所指的技术称为字典优化/目标。这个想法是针对多个目标进行优化,其中目标之间有明确的顺序。例如,在优化(A, B, C) 时,我们将优化BC,以A 为准。因此,如果我们可以提高A 的值,那么我们将允许BC 恶化。同样,C 也根据B 进行优化。

这种技术经常被使用,但目前(尚未)在 MiniZinc 中原生支持。但是有一些解决方法:

  • radation 模型所示,我们可以按至少与第二个目标的最大值一样多的值缩放第一个目标(依此类推)。这将确保对第一个目标的任何改进将胜过对第二个目标的任何改进/停滞。实例的结果应该是词典最优的。
  • 我们可以将模型分成多个阶段。在每个阶段,我们只关注一个单一的客观价值(从最重要到最不重要)。任何后续阶段都会 从早期阶段确定目标。最后阶段的解应该给你字典序的最优解。
  • 一些求解器本身支持字典优化。在 MiniZinc 中使用这些词典目标有一些实验性支持,如 std/experimental.mzn 中所示。

请注意,词典编纂技术可能并不总是(明确地)谈论最小化和最大化;但是,您始终可以通过否定预期的目标值来从一种转换为另一种。

【讨论】:

  • 非常感谢!这并不容易——我就是这么想的。选项 1 似乎是最简单的方法,但我在使用的机器数量和成本之间没有联系,所以我现在将放弃优化这两个变量。
  • +1 @Dekker1 是否有关于实验性注释的进一步文档?还包括支持的求解器吗?
  • 我不确定目前是否有任何关于实验功能的官方文档,但在 MiniZinc 论坛上有一些关于它的信息。 (寻找goal_hierarchy)。我会在星期一检查,看看答案中是否有我可以指出的官方信息。
  • 你好@Dekker1,我正在尝试解决一个类似的问题,我需要通过两个参数进行优化。在 minizinc 中支持“词典优化/目标”方面有什么变化吗?或许您可以多解释一下它在辐射模型中的工作原理?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2021-06-13
  • 2016-08-12
相关资源
最近更新 更多