Анализ файла раствора (.sol) в pyomo

У меня есть модель на pyomo, скажем, на машине 1, и у меня есть решатель CPLEX на машине 2. Я конвертирую модель pyomo (ConcreteModel) в problem.lp файл с функцией model.write("problem.lp") на машине 1. Затем я передаю этот файл на машину 2 и получаю solution.sol из решателя CPLEX. Но имена переменных в файле решения отличаются от имен переменных модели.

Это вызывает проблемы при анализе решения.

Есть ли способ преобразовать или сопоставить имена переменных в файле решения с именем модели?

Спасибо.

Изменить 1: я думаю, что это сводится к поиску карты символов при написании модели. Идентификатор карты символов возвращается model.write("problem.lp") (см. здесь) . Теперь вопрос в том, что у меня есть идентификатор карты символов. Как мне получить файл карты символов и использовать его для декодирования переменных в solution.sol файле?


person Curious Iitian    schedule 05.09.2018    source источник
comment
Я подозреваю, что имена в файле problem.lp уже отличаются от имен в модели pyomo. Это верно? И я ожидал, что имена в файле solution.sol будут совпадать с именами в файле problem.lp. Если вы посмотрите на исходный код pyomo, есть process_soln_file метод, который, похоже, делает именно то, что вы ищете. Я не эксперт по пиомо, и я понятия не имею, можно ли каким-то образом использовать эту функциональность помимо обычного решения.   -  person rkersh    schedule 05.09.2018
comment
@rkersh, да, вы правы насчет того, что имена в файле problem.lp похожи на имена в файле solution.sol, но отличаются от имен переменных в самой модели pyomo. Я посмотрю на функцию, о которой вы говорите. Спасибо!   -  person Curious Iitian    schedule 10.09.2018


Ответы (1)


Как указано в Edit 1, карта символов возвращается при записи модели в problem.lp. Как указано в строках 27–29 этого кода, может быть получен кортеж имен переменных в модели и ее ссылочная переменная.

Затем XML-файл, который генерирует CPLEX (solution.sol), может быть проанализирован в python с использованием такого пакета, как xml. Теперь у нас есть карта и значения. Нам просто нужно сравнить ссылочные переменные и сохранить их значение в переменной с именем, как в модели.

person Curious Iitian    schedule 19.10.2018