MiniZinc: 约束建模语言

    MiniZinc是一个适度的约束建模语言. 它高级到足以易于表示绝大多数约束问题, 低级到易于和一致地转化为已存在的求解器. 它是高级语言Zinc的一个子集. 希望能够被约束编程社区采纳成为一个标准.  以下两个网址有足够的资料供感兴趣的人们来学习.

官方网站: http://www.g12.cs.mu.oz.au/minizinc/

开发者网站:http://www.hakank.org/minizinc/

1. 介绍

    MiniZinc是一个在整数和实数上进行约束优化的语言。MiniZinc模型并未指定如何求解,虽然可以通过包含评注来指导求解器的运行。

    MiniZinc易于与不同的后端求解器对接。它首先把输入的MiniZinc模型和数据转换成FlatZinc模型。FlatZinc模型由变量声明和约束定义构成,当然对于优化问题还要定义目标函数。针对单个的后端求解器从MiniZinc到FlatZinc的转换可以特化,因此这能够控制最终形成的约束。特别地,MiniZinc通过分解对全局约束进行特化。

2. MiniZinc建模入门

    本节通过两个简单实例来介绍MiniZinc模型的基本结构。

2.1 示例1

MiniZinc: 约束建模语言_第1张图片

图1 澳大利亚区划

    想象一下,我们希望如图1所示的澳大利亚地图进行染色。它有七个州或区域构成,每个州染一种颜色满足相邻的州颜色不同。

    我们能够非常容易地使用MiniZinc建立这个问题的模型。模型见图2。模型的第一行是注释,用%做为注释的先导符号。MiniZinc并没用 / 开始结束的注释块。

% Colouring Australia using nc colours
int: nc = 3;
var 1..nc: wa; var 1..nc: nt; var 1..nc: sa; var 1..nc: q;
var 1..nc: nsw; var 1..nc: v; var 1..nc: t;
constraint wa != nt;
constraint wa != sa;
constraint nt != sa;
constraint nt != q;
constraint sa != q;
constraint sa != nsw;
constraint sa != v;
constraint q != nsw;
constraint nsw != v;
solve satisfy;
output ["wa=", show(wa), "\t nt=", show(nt), "\t sa=", show(sa), "\n",
"q=", show(q), "\t nsw=", show(nsw), "\t v=", show(v), "\n",
"t=", show(t), "\n"];

图2 澳大利亚区划地图染色的MiniZinc模型aust.mzn

 

你可能感兴趣的:(编程,优化,语言)