Не удается преобразовать объект типа «список» в числовое значение

Я делаю модель pyomo, где я хочу использовать случайные числа для своих двумерных параметров. Я поставил небольшой скрипт на Python для случайных чисел, который выглядит именно так, как я хотел видеть для моего двумерного параметра. Я получаю TypeError: Cannot convert object of type 'list'(value =[[....]] числовое значение. в моей целевой функции. Ниже приведена моя целевая функция и сценарий случайных чисел.

model.obj = Objective(expr=sum(model.C[v,l] * model.T[v,l] for v in model.V for l in model.L) + \
            sum(model.OC[o,l] * model.D[o,l] for o in model.O for l in model.L), sense=minimize)

import random
C = [[] for i in range(7)]
for i in range(7):
     for j in range(5):
        C[i]+= [random.randint(100,500)]
model.C = Param(model.V, model.L, initialize=C)

Пожалуйста, дайте мне знать, если кто-то может помочь исправить это.


person Vikas    schedule 30.03.2017    source источник
comment
Как правило, будет полезнее включить полное сообщение об ошибке.   -  person mechanical_meat    schedule 31.03.2017
comment
извините, список был слишком длинным, чтобы скопировать и вставить   -  person Vikas    schedule 04.04.2017
comment
Не беспокойся, чувак. Рад, что у тебя получилось. Вы должны принять ответ ниже с галочкой.   -  person mechanical_meat    schedule 04.04.2017
comment
Спасибо, что сообщили мне, я очень новичок в stackoverflow.   -  person Vikas    schedule 04.04.2017


Ответы (1)


Вы должны инициализировать свой параметр, используя функцию вместо вложенного списка

def init_c(m, i, j):
    return random.randint(100,500)
model.c = Param(model.V, model.L, initialize=init_c)
person Bethany Nicholson    schedule 31.03.2017
comment
Привет, Бетани, я изменил свой параметр как случайные числа, но мое решение по какой-то причине неосуществимо. Я получаю ValueError: нет значения для неинициализированного объекта NumericValue T[1,1], но T[v,l] является двоичной переменной, и я уже определил свои переменные в начале. - person Vikas; 03.04.2017
comment
def Constraint1_rule(model, v, myDim): возвращаемая сумма(model.SOD[o,myDim] * model.A[o,v] для o в model.O) ‹= model.B[v, myDim] * model. S[v] model.Constraint1 = Constraint(model.V, model.MyDim, правило=Constraint1_rule) - person Vikas; 03.04.2017
comment
Это мое первое ограничение, в котором используется случайное число параметров model.sod и model.b, и оба они умножаются на двоичные переменные. Не могли бы вы сказать мне, почему я получаю эту ошибку / - person Vikas; 03.04.2017
comment
Не могли бы вы опубликовать это как отдельный вопрос и включить всю свою модель? Ограничение, которое вы включили в свой комментарий, не включает T, поэтому я не думаю, что это проблема. Не видя всей модели, я не могу знать, должна ли ваша модель быть выполнимой для каждой возможной комбинации случайных значений параметров. - person Bethany Nicholson; 04.04.2017
comment
Я изменил калибровку своих случайных чисел, и это дало мне подходящее решение. Двоичная переменная T[v,l] находится в целевой функции, которая умножается на стоимость (случайный параметр). Я думаю, что это была проблема, другие ограничения связаны друг с другом, которые в дальнейшем связаны с моей целевой функцией. Он не выбирал какое-либо значение для переменной T в целевой функции, что приводит к невозможности. Я очень ценю ваш быстрый ответ и спасибо за вашу помощь. в следующий раз задам отдельный вопрос, пока это сработало :) - person Vikas; 04.04.2017