【问题标题】:Simple constraint programming solver简单的约束规划求解器
【发布时间】:2013-06-23 16:08:51
【问题描述】:

我正在尝试熟悉约束编程。

到目前为止,我看到的所有文档/视频都只包含对基于 CP 库利用率(如 Choko、Gecode、JaCoP 等)的顶级概念和代码示例的描述。

我想至少在没有任何库的情况下用 Java 实现一些简单的东西。

是否有任何资源可以让我在 Java/C#/C++/Python 中找到实现主要 CP 理念的工作代码? (至少“多送钱”的问题解决方案)。

(或者,也许,如果有人可以在这里解释一下,那就太好了)。

【问题讨论】:

  • Coursera?课程页面上没有链接到一些优化工具的选项卡吗? class.coursera.org/optimization-001/wiki/view?page=tools
  • @ZiyaoWei:是的。但有什么意义呢?我可以从engine.addConstraint(a); engine.addConstraint(b); print(engine.solve()); 学到什么?
  • CHOCO不是开源的吗?
  • @ZiyaoWei:我尝试调查 JaCoP 的来源。他们很大。这就像通过查看 Apache 源代码来了解如何通过网络发送“Hello”。
  • 如果你想实现一些东西,为什么你需要工作代码?

标签: java artificial-intelligence mathematical-optimization constraint-programming


【解决方案1】:

这取决于你想做什么。

1- 如果您想开始使用约束编程 (CP) 工具,您首先需要了解这种方法中的建模。为此,您可以将给定问题定义为一组约束,然后将模型发布到求解器(该求解器已经知道如何处理这些约束)。

我个人认为 G12_MiniZinc_Distribution(可通过http://www.minizinc.org/ 获得)及其最新教程是一个非常好的入门方式(最新的发行版带有很多模型)。如果您想查看 CP 模型的外观(w.r.t minizinc 语法),还有在线模型:http://www.hakank.org/minizinc

2- 如果您对 CP 有深入的理论理解,您可能会直接从可用库中看到一些技术(例如传播器)的实现,因为从头开始开发 CP Solver 是 (IMO) 一个愚蠢的想法。 这些是一些开源求解器/库:G12、Choco、Mistral、Or-Tools。

【讨论】:

    【解决方案2】:

    FWIW,OptaPlanner(开源,java)文档有对一些算法的深入解释,例如Simulated AnnealingTabu Search

    这是一张来自那里的图片:

    【讨论】:

      【解决方案3】:

      如果还有人找这样的东西:

      您可能想查看Minicp 您可以在其中找到幻灯片,它是一个用 Java 编写的求解器。

      如果您想使用高级但快速的编程语言从头开始编写自己的求解器,请查看我的博客系列: ConstraintSolver.jl blog posts

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多