В настоящее время я внедряю генерацию столбцов (вариант с несколькими товарными потоками). Примечание: я отключил предварительное разрешение, потому что подумал, что это будет проще для создания прототипов. В этом сценарии ценообразование работает нормально: добавляются правильные переменные, соответственно изменяются ограничения и т. Д. - если во время ценообразования больше не найдено переменных, первичная граница, заданная SCIP до этого раунда, является оптимальным целевым значением.
Моя проблема заключается в том, что указанная двойная граница равна «---» каждой итерации, и SCIP не распознает решение как оптимальное.
Я не совсем понимаю, что происходит внутри, тем более что двойная решения, которые SCIP дает мне во время ценообразования ( SCIPgetDualSolLinear () ) верны, одна идея состоит в том, что целевая функция как-то вырождается.
Единственное, что я могу выяснить, это то, что у него есть что-то делать с предварительным разрешением и помечать ограничения как изменяемые.
Если я не помечаю ограничения как изменяемые, SCIP сообщает правильную двойную границу, но оценка не работает, потому что SCIPgetDualSolLinear () не удается - Я предполагаю, что пометка ограничения как модифицируемого вида держит его доступным для использования в ценообразовании? В любом случае, я удивлялся, почему исходное ограничение должно быть помечено как модифицируемое, когда переменные фактически добавляются к ограничениям, полученным из SCIPgetTransformedCons () .
Включение или отключение предварительного разрешения не Если пометить ограничения как изменяемые, SCIP создаст двойную границу, но, как уже упоминалось, цены не получатся Единственное исключение из этого: если я запускаю программу со всеми добавленными переменными и iff preolving выключен, SCIPgetDualSolLinear () не завершается ошибкой, даже если ограничения не помечены как изменяемые , В этом случае двойная граница также сообщается. Я думаю, это поддерживает мысль о том, что модифицируемый флаг как-то связан с «сохранением структуры».
Надеюсь, это описание было понятно, и кто-то может указать мне правильное направление, у меня нет идея о том, как действовать.
Спасибо
edit: я только что попытался установить ограничения, полученные из SCIPgetTransformedCons () , как изменяемые, а не исходные, но результаты по-видимому, остается прежним.
edit2, дополнительная информация: я читаю в файлах .lp и использую SCIPsetConsModifiable () во время вызова activPricerXyz () , но до вызов activPricer () .