【问题标题】:Cannot convert object of type 'list' to a numeric value无法将“列表”类型的对象转换为数值
【发布时间】:2017-03-30 23:15:22
【问题描述】:

我正在制作一个 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)

如果有人可以帮助解决此问题,请告诉我。

【问题讨论】:

  • 如果您包含完整的错误消息,通常会更有帮助。
  • 抱歉列表太长,无法复制粘贴
  • 别担心,伙计。很高兴你解决了。您应该接受下面带有复选标记的答案。
  • 感谢您告诉我,我是 stackoverflow 的新手。

标签: random numbers typeerror pyomo


【解决方案1】:

您应该使用函数而不是嵌套列表来初始化参数

def init_c(m, i, j):
    return random.randint(100,500)
model.c = Param(model.V, model.L, initialize=init_c)

【讨论】:

  • 嗨,Bethany,我已将参数更改为随机数,但由于某种原因,我的解决方案不可行。我收到 ValueError: No value for uninitialized NumericValue object T[1,1] 但是 T[v,l] 是一个二进制变量,我已经在开始时定义了我的变量。
  • def Constraint1_rule(model, v, myDim): return sum(model.SOD[o,myDim] * model.A[o,v] for o in model.O)
  • 这是我的第一个约束,它使用参数 model.sod 和 model.b 的随机数,它们都与二进制变量相乘。你能告诉我为什么我会收到这个错误/
  • 您能否将其作为一个单独的问题发布并包含您的整个模型?您在评论中包含的约束不包括 T 所以我认为这不是问题。在没有看到整个模型的情况下,我无法知道您的模型是否应该适用于随机参数值的每种可能组合。
  • 我改变了随机数的校准,它给了我一个可行的解决方案。 T[v,l] 二元变量在与成本(随机参数)相乘的目标函数中。我认为这是问题所在,其他约束相互关联,进一步与我的目标函数相关联。它没有为目标函数中的 T 变量选择任何值,导致不可行。我非常感谢您的快速回复,并感谢您的帮助。下次我会问一个单独的问题,现在这有效:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2022-01-22
相关资源
最近更新 更多