代码之家  ›  专栏  ›  技术社区  ›  Vondoe79

错误:从data=None构造组件“objective”失败:TypeError:“float”对象不可下标

  •  0
  • Vondoe79  · 技术社区  · 8 年前

    Pyomo团队, 我需要帮助解决上述错误。我已经尽了我所能,但仍然无法让我的模型工作。下面是我的“目标函数”的公式,以及错误消息的屏幕截图。非常感谢。

    enter image description here

    命令提示下运行代码的错误截图: enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   Bethany Nicholson    8 年前

    假设 model.x model.d 如果使用二维索引正确声明,问题在于使用的是双方括号。访问特定索引的正确方法是 model.x[i,j] .

    以下是正确的申报方式 模型x个 , 模型d model.a .

    假设 模型一 是二维的:

    model.a = Set(initialize=[(1,1),(1,2),(2,1),(2,2)])
    model.d = Param(model.a, default=0)
    model.x = Var(model.a)
    
    def _obj_rule(m):
        return sum(m.d[i,j]*m.x[i,j] for i,j in m.a)
    model.obj = Objective(rule=_obj_rule)
    

    假设 模型一 是一维的:

    model.a = Set(initialize=[1,2,3])
    model.d = Param(model.a,model.a,default=0)
    model.x = Param(model.a,model.a)
    
    def _obj_rule(m):
        return sum(m.d[i,j]*m.x[i,j] for i in m.a for j in m.a)
    model.obj = Objective(rule=_obj_rule)
    

    请注意: 模型一 声明为二维或 模型x个 模型d 索引依据 模型一 两次还请注意,目标中的总和的书写方式略有不同。