Доступ к каждому значению переменной в индексируемой переменной Pyomo - PullRequest
0 голосов
/ 25 марта 2020

Я решаю MINLP, используя Pyomo, который берет вектор целочисленных входных данных (пропускную способность графика) и возвращает потерю пакетов в сети. Что делает словарь edge_enum, он перечисляет все ребра графа. Например,

{0: (0, 4), 
1: (1, 4), 
2: (1, 5), ...
a=0
for e in G.edges():
    edge_enum[a]=e  
    a+=1

model=ConcreteModel
key_list=list(edge_enum.keys())
edge_list=list(edge_enum.values())
model.A=Set(initialize=edge_list)
lb={}
for j in edge_list:
    lb[j]=pmf_maxima(j,lamd,q)
ub={}
for j in edge_list:
    ub[j]=pmf_length(j,lamd,q)
def fb(model,i):
    return (lb[i],ub[i])
model.vars=Var(model.A,domain=PositiveIntegers,bounds=fb)
print(model.vars[edge_enum[0]].value)

Мой вопрос: как я могу получить доступ к каждому элементу переменного вектора 'vars', потому что это мой вектор входной емкости. Мне нужно получить доступ к каждому из них, чтобы определить мою целевую функцию.

1 Ответ

0 голосов
/ 26 марта 2020

В вашем коде есть много вещей, которые я не понимаю, так как вы скопировали здесь только часть этого, но из того, что я вижу, вы пытаетесь напечатать значение 'vars' для элемента со значением индекса '0'. Тем не менее, 'vars' - это переменная, которую нужно определить ПОСЛЕ того, как вы решите модель, поэтому пока не имеет значения. У него есть только нижняя и верхняя границы, которые вы определили как 'lb' и 'ub'. Итак, сначала решите модель, прежде чем выводить значения.

Однако, если вы просто хотите использовать значение «vars» в целевой функции, просто запишите уравнение с «vars» там. Когда модель решается, Pyomo и выбранный решатель будут обрабатывать это.

Помогает ли это?

...