Хранение возможных решений в терминах исходных переменных - PullRequest
0 голосов
/ 04 июля 2019

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

Достаточно ли будет отключить предварительное разрешение (используя SCIPsetPresolving()), чтобы SCIP всегда ссылался на исходные переменные в функциях обратного вызова? Есть ли какой-то конкретный способ, который вы бы порекомендовали для этого?

Спасибо!

1 Ответ

0 голосов
/ 04 июля 2019

Убедитесь, что ваш обработчик событий может получить доступ к массиву исходных переменных (SCIPget(N)OrigVars() делает свое дело). Вы всегда можете запросить значения решений исходных переменных даже из преобразованных решений , используя SCIPgetSolVal(), и сохранить значения в решении, созданном с помощью SCIPcreateOrigSol().

Чтобы передать это решение в другой экземпляр SCIP, необходимо правильно сопоставить переменные первичного и вторичного экземпляра SCIP. Создайте новое решение для вторичного экземпляра SCIP и установите для значения решения переменной значение его (предварительной) переменной изображения в основном SCIP.

...