Я пытаюсь написать скрипт для анализа файлов lp модели pyomo. Я хочу сначала перечислить все ограничения, которые появляются в файле lp. Вот небольшой фрагмент файла lp:
\* Source Pyomo model name=urbs *\
min
obj:
+1 costs(Environmental)
+1 costs(Fixed)
+1 costs(Fuel)
+1 costs(Invest)
+1 costs(Variable)
s.t.
c_e_res_vertex(1_Mid_Biomass_Stock)_:
+1 e_co_stock(1_Mid_Biomass_Stock)
-1 e_pro_in(1_Mid_Biomass_plant_Biomass)
= 0
c_e_res_vertex(1_Mid_Coal_Stock)_:
+1 e_co_stock(1_Mid_Coal_Stock)
-1 e_pro_in(1_Mid_Coal_plant_Coal)
= 0
Так что, если файл lp похож на приведенный выше, мой скрипт должен распечатать или написать в текстовом файле следующие строки :
res_vertex(1_Mid_Biomass_Stock)
res_vertex(1_Mid_Coal_Stock)
Я обнаружил, что каждое ограничение начинается с 'c_e_'
и заканчивается ')_'
, поэтому я написал следующую строку для получения первого ограничения res_vertex(1_Mid_Biomass_Stock)
:
with open('lp_file.lp', 'r') as lp:
lp = lp.read().replace('\n', ' ')
lp = str(lp[lp.find('c_e_')+4:
lp.find(')_')+1])
print(lp)
Над фрагментом кода фактически выводится первое ограничение, но мне нужно сделать это для последовательных ограничений (2-го, 3-го, 4-го и т. Д.) С циклом for, вероятно.
Я не могу заставить .find()
искать какой-то индекс. Так как бы я решил это?
PS: имена ограничений не имеют одинаковую длину