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-gecodemzn-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?

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将字符串[]数组添加到另一个字符串[]数组   java如何在flex中每次刷新浏览器时获取警报消息   导入新包时类名冲突(java)   java为什么tomcat9不接受来自eclipse的远程调试连接?   java如何创建类似ApachePOI的程序   带有内部数组类的数组pojo类的java RecyclerView适配器   javanio选择器和通道使用问题   jakarta ee如何为Java Web应用程序设置参数   java放心泛型列表反序列化   java通过多个YAML文件循环查找特定数据   通过Socksify(开放文本Socks客户端)从STS连接MS Azure中的sqlserver数据库时出现java问题   用作方法类型的java构造函数对象   java使用JFileChooser保存当前打开的文件