首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Python访问minizinc数据

从Python访问minizinc数据
EN

Stack Overflow用户
提问于 2021-10-13 10:06:27
回答 1查看 344关注 0票数 2

我正在使用Python接口到Minizinc,并从外部文件中读取模型(.mzn)和数据(.dzn)。有办法从Python访问问题数据吗?

例如,我使用Minizinc手册中的cakes2 2模型,它有一个决策变量b和一个数据字段面粉。

代码语言:javascript
复制
    from minizinc import Instance, Model, Solver
    solverToUse = "coinbc"
    solver = Solver.lookup(solverToUse)
    print(solver.name, ",", solver.version)
    model = Model("cakes2.mzn")
    model.add_file("cakes2.dzn")
    instance = Instance(solver, model)
    print(instance.method)
    result=instance.solve()
    b = result.solution.b
    print(b)

这个没问题。但是我如何访问数据/参数面粉呢?以下是以与决策变量相同的方式交互请求数据时的结果:

代码语言:javascript
复制
C:\Users\MartinJo>python -i callingMinizinc2.py
COIN-BC , 2.10.5/1.17.5
Method.MAXIMIZE
3
>>> result.solution.b
3
>>> result.solution.flour
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Solution' object has no attribute 'flour'
>>> 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 00:19:07

MiniZinc接口目前是一个使用minizinc可执行文件进行通信的接口。默认情况下,MiniZinc不会在解决方案输出中提供有关其参数变量的任何信息。这个问题有两种解决办法。

  • --如果您可以在解决之前更改模型而不修改Python代码,则可以将::add_to_output注释添加到您感兴趣的决策变量和参数变量中。这样就可以使用result.solution.flour了。

  • Alternatively,MiniZinc有自己的DZN解析器。这可以通过将包安装为pip install minizinc[dzn]来启用,然后将parse_data标志设置为True的数据文件包括进来。在您的示例中,model.add_file("cakes2.dzn", parse_data=True)。之后,数据将按Model对象的索引可用:Model
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69553538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档