minizin约束建模语言的ipython扩展
iminizinc的Python项目详细描述
Author: | Guido Tack <guido.tack@monash.edu> |
---|---|
homepage: | https://github.com/minizinc/iminizinc |
本模块为ipython/jupyter笔记本电脑提供了cell magic扩展,使您能够解决minizinc模型。
模块需要MIZIN的现有安装。
安装
您可以通过PIP安装或升级此模块
pip install -U iminizinc
请参阅python文档以了解是否需要任何额外选项(例如,您可能希望仅为当前用户安装–user标志,或者您可能希望使用虚拟环境)。
启动笔记本服务器时,请确保路径上有mzn2fzn二进制文件和解算器二进制文件(当前仅支持fzn-gecode和mzn-cbc)。最简单的方法是获得“捆绑安装”,其中包括minizinIDE和一些解算器,可从github获得:https://github.com/MiniZinc/MiniZincIDE/releases/latest 然后需要更改PATH环境变量以包含minizinc安装。
基本用法
安装模块后,必须使用%load_ext iminizinc加载扩展。这将启用cell magic%%minizinc,它允许您解决minizin模型。下面是一个简单的示例:
In[1]: %load_ext iminizinc In[2]: n=8 In[3]: %%minizinc include "globals.mzn"; int: n; array[1..n] of var 1..n: queens; constraint all_different(queens); constraint all_different([queens[i]+i | i in 1..n]); constraint all_different([queens[i]-i | i in 1..n]); solve satisfy; Out[3]: {u'queens': [4, 2, 7, 3, 6, 8, 5, 1]}
如您所见,该模型将环境中的变量(在本例中为n)绑定到minizin参数,并返回一个包含所有已声明决策变量的字段的对象。
或者,您可以将决策变量绑定到python变量:
In[1]: %load_ext iminizinc In[2]: n=8 In[3]: %%minizinc -m bind include "globals.mzn"; int: n; array[1..n] of var 1..n: queens; constraint all_different(queens); constraint all_different([queens[i]+i | i in 1..n]); constraint all_different([queens[i]-i | i in 1..n]); solve satisfy; In[4]: queens Out[4]: [4, 2, 7, 3, 6, 8, 5, 1]
如果您想找到满意问题的所有解决方案,或优化问题的所有中间解决方案,可以使用-a标志:
In[1]: %load_ext iminizinc In[2]: n=6 In[3]: %%minizinc -a include "globals.mzn"; int: n; array[1..n] of var 1..n: queens; constraint all_different(queens); constraint all_different([queens[i]+i | i in 1..n]); constraint all_different([queens[i]-i | i in 1..n]); solve satisfy; Out[3]: [{u'queens': [5, 3, 1, 6, 4, 2]}, {u'queens': [4, 1, 5, 2, 6, 3]}, {u'queens': [3, 6, 2, 5, 1, 4]}, {u'queens': [2, 4, 6, 1, 3, 5]}]
您还可以存储模型以迭代方式使用该模型:
In[1]: %load_ext iminizinc In[2]: %%mzn_model queens include "globals.mzn"; int: n; array[1..n] of var 1..n: queens; constraint all_different(queens); constraint all_different([queens[i]+i | i in 1..n]); constraint all_different([queens[i]-i | i in 1..n]); solve satisfy; In[3]: for n in range(5,9): x = %minizinc queens print(x) Out[3]: {'queens': [4, 2, 5, 3, 1]} {'queens': [5, 3, 1, 6, 4, 2]} {'queens': [6, 4, 2, 7, 5, 3, 1]} {'queens': [4, 2, 7, 3, 6, 8, 5, 1]}
magic支持许多附加选项,特别是从文件加载minizin模型和数据。其中一些可能只适用于minizinc的开发版本(即,不是捆绑的二进制版本)。您可以使用查看帮助
In[1]: %%minizinc?