微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Python 库 clingo 枚举子集最小模型

如何解决使用 Python 库 clingo 枚举子集最小模型

我想枚举所有子集最小模型。如果我从终端调用 clingo 会起作用,但是当我使用 python 的 clingo 库时它会失败。我错过了什么?

示例程序

1 {x(C) : C=1..10} 2.
#show x/1.

来自终端的解决方

clingo program.asp --models=0 --enum-mode=domrec --heuristic=Domain --dom-mod=5,16
clingo version 5.4.0
Reading from program.asp
Solving...
Answer: 1
x(1)
Answer: 2
x(10)
...
Answer: 10
x(5)
SATISFIABLE

Models       : 10
Calls        : 1
Time         : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
cpu Time     : 0.001s

使用 Python 和 clingo 的解决方

from clingo import Control,Model

control = Control(arguments=[f"--models=0","--opt-mode=optN"])
control.heuristic = "domain"
control.dom_mod = "5,16"
control.enum_mode = "domrec"

control.add(name="base",parameters={},program="1 {x(C) : C=1..10} 2.")
control.add(name="base",program="#show x/1.")

solutions = []

def add_solution_to_list(model: Model):
    solution = [symbol.arguments[0].number for symbol in model.symbols(shown=True)]
    solutions.append(solution)

control.ground(parts=[("base",[])])
result = control.solve(on_model=add_solution_to_list)
  • solutions 包含 55 个元素:
    • [[1],[2],[1,2],[3],3],...,[9,10],[8,9]]

我做错了什么?

解决方法

当您创建 Control 对象而不是手动设置时,您应该从命令行添加所有命令选项。

control = Control(arguments=[f"--models=0","--opt-mode=optN","--enum-mode=domRec","--heuristic=Domain","--dom-mod=5,16",])

如果您想以不同的方式发送它们,则必须使用 Configurarion API:

https://potassco.org/clingo/python-api/5.5/clingo/configuration.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?