Python 优化时的模糊元素,fmin_powell

Python 优化时的模糊元素,fmin_powell,python,scipy,Python,Scipy,我在使用fmin_-powell方法优化参数时遇到了一个问题 coeff = np.array([1.,1.,1.,1.]) def run(coeff, *func): if np.any(coeff < 0): return (np.minimum(coeff, 0)**2 + 1) * 100000000.0 else: [some math operations] return Energy def optimize(

我在使用fmin_-powell方法优化参数时遇到了一个问题

coeff = np.array([1.,1.,1.,1.])

def run(coeff, *func):
     if np.any(coeff < 0): return (np.minimum(coeff, 0)**2 + 1) * 100000000.0
     else:
          [some math operations]
          return Energy

def optimize(f):
   return opt.fmin_powell(run, coeff, args=(f,f), disp=0)

f = ['1a','2b','3c', '4d', '5e', '6e', '7f', '8g']

p = Pool(processes=8)
async_ret = p.map(optimize,f,chunksize=1)
result = async_ret.get()
p.terminate()
我认为问题出在这行:
如果np.any(coeff<0):返回(np.minimum(coeff,0)**2+1)*100000000.0
,但是,我没有注意到错误


有人知道问题在哪里吗

在我这方面,这个代码是有效的。。。我看不出你的错误。但是async_ret.get()失败,因为map的输出是一个列表,而列表没有get()方法……当在需要标量布尔值的上下文中使用布尔数数组时,会产生此错误。
if
语句是最明显的
表达式也有问题(Python
短路),您的代码可能在错误的位置生成数组,但错误出现在
多处理
中。挖那里。
  async_ret = p.map(optimize,f,chunksize=1)
  File "/apps/anaconda/lib/python2.7/multiprocessing/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/apps/anaconda/lib/python2.7/multiprocessing/pool.py", line 567, in get
    raise self._value
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()