Choco 4: вызов метода всякий раз, когда логическая переменная назначается или не назначается

У меня есть технический вопрос относительно решателя Choco 4 CP.

Я хотел бы вызывать метод (давайте назовем его f()) всякий раз, когда некоторые логические переменные в моей модели назначаются или не назначаются во время поиска. Целью f() является обновление структуры данных, которая широко используется распространителями.

Моя первая попытка заключалась в реализации пользовательского IVariableMonitor, но метод onUpdate(Variable v, IEventType iEventType) вызывается только тогда, когда переменной присваивается значение 0/1, но не отменяется.

Я также пытался использовать поисковые мониторы, но пока безуспешно.

Есть ли способ выполнить эту задачу?

Спасибо!


person Avi Itzhakov    schedule 02.08.2020    source источник


Ответы (1)


Я понял, как решить эту проблему.

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

К счастью, choco предоставляет такие структуры данных с возможностью обратного отслеживания (см. org.chocosolver.util.objects). Насколько я понимаю, состояние отслеживаемой структуры данных связано с уровнем принятия решения. Когда решатель откатывает любое изменение выше текущего уровня решения, оно отменяется.

person Avi Itzhakov    schedule 03.08.2020