简单的约束规划求解器
Posted
技术标签:
【中文标题】简单的约束规划求解器【英文标题】: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”。
如果你想实现一些东西,为什么你需要工作代码?
【参考方案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 Annealing和Tabu Search。
这是一张来自那里的图片:
【讨论】:
【参考方案3】:如果还有人找这样的东西:
您可能想查看Minicp 您可以在其中找到幻灯片,它是一个用 Java 编写的求解器。
如果您想使用高级但快速的编程语言从头开始编写自己的求解器,请查看我的博客系列: ConstraintSolver.jl blog posts
【讨论】:
以上是关于简单的约束规划求解器的主要内容,如果未能解决你的问题,请参考以下文章