Как минимизировать количество экземпляров литерала, в clingo 4.5

Я не уверен, как написать заявление об оптимизации в clingo4 (ASP Solver).

Я хочу минимизировать общее количество экземпляров определенных литералов в каждом наборе ответов.

Я имитирую агента реагирования на огонь в ASP. Агент может выбрать выполнение определенных простых действий в разное время, таких как:

0{call_fire_department(Area, Time, Time+1)}1:- [preconditions].
0{send_security_guard(Guard, Area, Time, Time+1)}1:- [preconditions].
0{activate_fire_suppression(Area, Time, Time+1)}1:- [preconditions].

У агента есть цели, которые требуют определенных действий в определенное время. Я хочу минимизировать количество экземпляров каждого из вышеперечисленных, при этом все еще достигая целей агента.

Как мне написать соответствующее заявление по оптимизации? (Я предполагаю, что мне понадобится заявление "минимизировать").

Благодарю.

1 ответ

Как насчет

#minimize{
    1, call, Area, Time : call_fire_department(Area, Time, Time+1) ;
    1, send, Guard, Area, Time : send_security_guard(Guard, Area, Time, Time+1) ;
    1, activate, Area, Time : activate_fire_suppression(Area, Time, Time+1)
}.
  • 1 означает счет 1 к факту
  • Отметьте (позвоните, отправьте, активируйте), Guard, Area и Time, чтобы каждый факт учитывался. Например, без тега activate_file_suppression(foo, 20, 21) а также call_fire_department(foo, 20, 21) будет объединен в наборе.
Другие вопросы по тегам