简单的约束规划求解器

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

【讨论】:

以上是关于简单的约束规划求解器的主要内容,如果未能解决你的问题,请参考以下文章

线性规划求解器中上限和下限的参数

Python数模笔记-模拟退火算法约束条件的处理

MPC的终结——二次规划求解约束极值问题

4. 整数规划:割平面法python代码

求用动态规划的方法求解简单的整数规划问题的matlab程序或者C++程序代码,高手们帮帮忙

如何用matlab求解0-1规划问题