Увеличьте интервал в клинго

У меня есть следующий код clingo, который генерирует пространство поиска, за которым следуют ограничения.

      {in(I,1..4)}=1 :- I=1..n.
:- [constraint1]
:- [constraint2]

Этот код работает. Но мне нужно clingo, чтобы найти наибольшее значение n, для которого существует устойчивая модель. Как лучше всего это сделать?

3 ответа

Чуть более производительный вариант должен быть:

      value(I) :- in(I,_).
value(I-1) :- value(I), I > 0.
#maximize {1,I : value(I)}.

Не знаю как быть, поэтому просто написал следующим образом.

{in(I,1..4)}=1 :- I=1..100.

:- [ограничение1]

:- [ограничение2]

v(I) :- in(I, _).

:- не v(I), v(I + 1), I > 0.

#максимизировать { 1, I : v(I).

Есть ли более элегантный способ заменить первое предложение «{in(I,1..4)}=1 :- I=1..100»?

Вы можете использовать агрегат #min, чтобы найти min n.

      value(I) :- I = #min {I:in(I,X) }.

и используйте директиву #maximize, чтобы найти стабильные модели, в которых ценность совокупного эксперимента больше.

      #maximize {I: value(I)}.
Другие вопросы по тегам