Python Scipy目标函数

Python Scipy目标函数,python,pandas,numpy,scipy,scipy-optimize-minimize,Python,Pandas,Numpy,Scipy,Scipy Optimize Minimize,我正在尝试将我的gurobi代码转换为scipy,但在定义目标函数时遇到了问题。在测试函数定义是否正确时,会出现以下错误: TypeError: 'float' object is not iterable 代码如下: import pandas as pd import numpy as np import scipy as sp from scipy.optimize import minimize import matplotlib.pyplot as plt %matplotlib i

我正在尝试将我的gurobi代码转换为scipy,但在定义目标函数时遇到了问题。在测试函数定义是否正确时,会出现以下错误:

TypeError: 'float' object is not iterable
代码如下:

import pandas as pd
import numpy as np
import scipy as sp
from scipy.optimize import minimize
import matplotlib.pyplot as plt
%matplotlib inline
step=80
f1load=[44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48]
fload=f1load[0:step+1]
i1load=[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40]
iload=i1load[0:step+1]
#Following command converts fload&iload to arrays and subtracts them from each other 
load1=np.array(iload)-np.array(fload)
load1
#This command converts array to list so we can use it as a list in the rest of the code
load2=load1.tolist()
load=load2
x = np.zeros(80)
x = x.tolist()
def objective(x,load):
# this line is from my gurobi code    obj1=sum(((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])) for i in range (n)))
    for i in range(step):
        obj1 = sum((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])))
        obj2 = obj2 + obj1
    return obj2

objective(x,load)
错误的完整堆栈跟踪:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-26-cef8470baf0d> in <module>
----> 1 objective(x,load)

<ipython-input-25-a9de3ab9ff2b> in objective(x, load)
      2 #     obj1=sum(((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])) for i in range (n)))
      3     for i in range(step):
----> 4         obj1 = sum((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])))
      5         obj2 = obj2 + obj1
      6     return obj2

TypeError: 'float' object is not iterable
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
---->1个目标(x,负载)
在目标中(x,载荷)
2#obj1=范围(n)内i的总和((加载[i+1]-(6*x[i])*(加载[i+1]-(6*x[i]))
3对于范围内的i(步骤):
---->4 obj1=总和((荷载[i+1]-(6*x[i]))*(荷载[i+1]-(6*x[i]))
5 obj2=obj2+obj1
6返回obj2
TypeError:“float”对象不可编辑
在这一行:

obj1 = sum((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])))
parantesses中的表达式,
(load[i+1]-(6*x[i])*(load[i+1]-(6*x[i])
,计算结果为一个
float
,对该表达式调用
sum
会产生错误,因为
sum
函数需要一个iterable参数