перечисление подмножества минимальных моделей с помощью библиотеки Python clingo

Я хочу перечислить все минимальные модели подмножества. Это работает, если я вызываю clingo из терминала, но не работает, когда я использую библиотеку clingo для Python. Что мне не хватает?

пример программы:

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", parameters={}, 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 contains 55 elements:
    • [[1], [2], [1, 2], [3], [1, 3], ... , [9, 10], [8, 9]]

Что я делаю не так?


person Leevi L    schedule 06.07.2021    source источник


Ответы (1)


Вы должны добавить все параметры команды из командной строки при создании объекта 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

person sus_hml    schedule 07.07.2021