用于minizing工具管道的python包装器。

pymzn的Python项目详细描述


PYMZN

pymzn是一个python库,它包装并增强了 MiniZinc约束编程工具。PYMZN建成 在minizinc工具包之上 提供许多现成的功能,以方便解决编码的问题 使用minizin语言,并将返回的解决方案作为python字典。

用法

首先,我们需要通过minizinc定义一个约束程序。 下面是一个用minizinc编码的简单0-1背包问题:

    %% knapsack01.mzn %%
    int: n;                     % number of objects
    set of int: OBJ = 1..n;
    int: capacity;              % the capacity of the knapsack
    array[OBJ] of int: profit;  % the profit of each object
    array[OBJ] of int: size;    % the size of each object

    var set of OBJ: x;
    constraint sum(i in x)(size[i]) <= capacity;
    var int: obj = sum(i in x)(profit[i]);
    solve maximize obj;


    %% knapsack01.dzn %%
    n = 5;
    profit = [10, 3, 9, 4, 8];
    size = [14, 4, 10, 6, 9];

您可以使用pymzn.minizinc函数来解决上述问题:

importpymznsolns=pymzn.minizinc('knapsack01.mzn','knapsack01.dzn',data={'capacity':20})print(solns)

结果将是:

[{'x':{3,5}}]

返回的对象是一个延迟的解决方案流,可以迭代或 作为列表直接索引。pymzn.minizinc函数负责 预处理、与minizinc可执行文件的通信以及解析 的解决方案流到python字典中。

PYMZN还可以:

  • 将python字典转换为 dzn格式和返回(例如,当 将数据传递给pymzn.minizinc函数);
  • 与许多不同的 solvers
  • Preprocess微型锌模型 通过嵌入来自Jinja2模板的代码 语言;
  • 执行concurrent微量锌 使用python协同程序执行。

有关上一示例的后续信息,请阅读 PyMzn tutorial

有关pymzn类和函数的更多信息,请参阅 reference manual

安装

PYMZN可以通过PIP安装:

    pip install pymzn

或者从可用的源代码 在GitHub

    python setup.py install

要求

pymzn是在python 3.5中开发和维护的。从0.18.0版开始, 对Python2和3.5之前的版本的支持已经被放弃了(它也是 维护它们的工作很多)。使用包pymzn.aio进行并发 执行需要Python3.6(尽管它是可选的)。

Pymzn要求在您的计算机上安装minizin工具包。启动 从pymzn 0.18.0开始,所需的最小minizinc版本是2.2.0。如果你 需要使用以前版本的minizin,pymzn 0.17.1应该可以正常工作。

安装minizinc的最简单方法是下载 MiniZincIDE包,其中 包含minizinc二进制文件和多个解算器。下载后 包,通过设置 PATH环境变量或通过使用pymzn.config配置它 模块。

有关更多详细信息,请查看 Install section在 文档。

可选依赖项包括:

  • Jinja2,用于预处理 通过Jinja模板语言;
  • PyYAMLappdirs,用于加载和保存 配置文件。

作者

Paolo Dragone,美国国立大学博士生 特伦托(意大利)。

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

推荐PyPI第三方库


热门话题
在java中的字符串字符下打印星号(*)   java在比较数据后得到错误的结果   java如何在使用JSP创建的网站中创建父子关系和处理?   java配置单元UDF:无法执行求值方法   java GAE项目Intellij远程调试在关闭时不释放端口   java按钮上的放大和缩小功能点击JfreeChart折线图?   java Selenium Chrome Web驱动程序SessionNotCreatedException   java由ADFactoryBuilder生成的线程工厂是线程安全的吗?   java将字符串[]传递给另一个类Android(使用intent)   我为什么要嘲笑java?   JavaLiferay门户不将对象从流程阶段发送到jsp   java我想在单击每个树节点时将要添加的信息放入jpanel jscrollpane中   在Java中模拟数组引用(即对引用的引用)的按引用传递   Jackson将JSON属性反序列化为不同的Java对象   java使用JSP/servlet在网页上显示Excel工作表?   仿射变换Java:使用仿射变换时游戏速度减慢   Servlet JBoss AS 7的java EJB注入   在Oracle数据库中使用Java的plsql   java管理Maven项目中的库依赖项   JavaEclipseLink(JPA)异常:复合主键@JoinColumn