Оптимизация производительности CLPFD (накопительная, global_cardinality) - PullRequest
0 голосов
/ 27 ноября 2018

Я написал несколько предикатов для решения большой задачи планирования, и они работают хорошо, но я бы хотел, чтобы у них была лучшая производительность.Я запускаю profile/1 и вижу, что предикаты, связанные с CLPFD, занимают 99% времени.Особенно garbage_collect - это занимает 37% времени выполнения.

Теперь, что я могу сделать?Мой код не особенно сложен, он использует много cumulative/2 и немного global_cardinality/2, ничего особенного сверх этого.Я пробовал несколько разных вариантов для labeling/1 (ff, ffc, bisect), но нет никакой разницы (на самом деле bisect ухудшает ситуацию).Я пытался увеличить лимиты памяти с помощью set_prolog_stack/2 (глобальный лимит, локальный лимит, глобальный min_free, локальный min_free).

Есть ли что-нибудь еще, что я могу сделать?

Есть ли альтернативные имплементацииcumulative/2 или global_cardinality/2, которые могут иметь лучшую производительность?

...