В настоящее время я пишу программу asp. когда я комментирую строку #maximize{S:ce(S)}. в программе, ответ выглядит следующим образом

omit the Answer 1 to 6.

Answer: 7
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(ben,english) review(nick,chinese) **ce(4)**

Answer: 8
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(nick,english) review(nick,chinese) **ce(4)**

SATISFIABLE

В котором ответ 7 и ответ 8 имеют одинаковое ce значение 4.

Когда я раскомментирую строку #maximize{S:ce(S)}., ответ выглядит следующим образом

Answer: 1
review(ben,chinese) review(nick,math) ce(2) review(harris,math) review(ben,english) review(nick,english) review(nick,chinese)
Optimization: -2

Answer: 2
review(harris,english) review(ben,math) review(ben,chinese) ce(3) review(harris,math) review(nick,english) review(nick,chinese)
Optimization: -3

Answer: 3
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) **ce(4)** review(nick,english) review(nick,chinese)
Optimization: -4

OPTIMUM FOUND

Есть только один результат ce(4), но я хотел бы получить все результаты максимального значения ce, что мне делать, чтобы получить два результата со значением ce(4).

-1
A shur 1 Дек 2019 в 15:33

1 ответ

Может быть, вы могли бы поделиться своей командой при выполнении clingo. Я упростил вашу программу, так как не знаю о проблеме, которую вы кодируете.

review(harris,english).
review(ben,math).
review(ben,chinese).
review(nick,math).
review(ben,english) | review(nick, english). % miss one in your problem
review(nick,chinese).
ce(4).
#maximize{S:ce(S)}. 

По сути, отсутствующим условием вашей проблемы является перечисление review(ben,english) и review(nick, english).

При выполнении с командой clingo 0 filename.lp вывод будет генерировать только один набор ответов:

Answer: 1
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(nick,chinese) ce(4) review(ben,english)
Optimization: -4
OPTIMUM FOUND

Подобно вашей попытке, если я прокомментирую последнюю строку, будут показаны два набора ответов:

Answer: 1
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(nick,chinese) ce(4) review(ben,english)
Answer: 2
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(nick,chinese) ce(4) review(nick,english)
SATISFIABLE

Но если вы раскомментируете последнюю строку и добавите --opt-mode=optN после исходной команды, вывод будет таким:

Answer: 1
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(nick,chinese) ce(4) review(ben,english)
Optimization: -4
Answer: 1
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(nick,chinese) ce(4) review(ben,english)
Optimization: -4
Answer: 2
review(harris,english) review(ben,math) review(ben,chinese) review(nick,math) review(nick,chinese) ce(4) review(nick,english)
Optimization: -4
OPTIMUM FOUND

Не уверен, что это то, что вы хотите. Вы также можете обратиться к руководству clingo относительно параметра --opt-mode:

--opt-mode=mode Настройте обработку операторов оптимизации. Доступные значения для mode:

opt Вычислить оптимальную модель (требуется --models=0).

enum Перечислить модели со стоимостью меньше или равной некоторой фиксированной границе (ср. --opt-bound).

optN Вычислить оптимум, а затем перечислить оптимальные модели.

игнорировать Игнорировать любые операторы оптимизации во время вычислений.

2
Community 20 Июн 2020 в 12:12