Увеличьте интервал в клинго
У меня есть следующий код 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)}.