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

Я не знаю, как написать оператор оптимизации в clingo4 (решатель ASP).

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

Я моделирую пожарного агента в 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].

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

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

Спасибо.


person hassapikos    schedule 15.06.2015    source источник


Ответы (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 к факту
  • Тег (вызов, отправка, активация), охрана, зона и время гарантируют, что каждый факт будет учтен. Например. без тега activate_file_suppression(foo, 20, 21) и call_fire_department(foo, 20, 21) будут объединены в наборе.
person vukk    schedule 16.06.2015