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

图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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值