简单约束编程求解器

时间:2013-06-26 13:30:34

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

我试图熟悉约束编程。

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

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

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

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

3 个答案:

答案 0 :(得分:6)

这取决于你想做什么。

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

我个人觉得G12_MiniZinc_Distribution(可通过http://www.minizinc.org/获得)及其最新教程是一个非常好的开始方式(最新发布的版本有很多)。如果您想了解CP模型的外观(w.r.t minizinc语法),还有在线模型:http://www.hakank.org/minizinc

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

答案 1 :(得分:2)

FWIW,OptaPlanner(开源,java)文档有一些深入解释一些算法,例如Simulated AnnealingTabu Search。< / p>

这是一张图片:

Simulated Annealing

答案 2 :(得分:0)

如果仍然有人在寻找这样的东西:

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

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