AxisError:轴 1 超出 0 维粒子群优化数组的范围

问题描述

我正在 psopy 的帮助下尝试粒子群优化。它从具有 38 个变量的更大数组的 init_feasible 函数中给出空值,但从 26 个变量中给出正确的值。

p1=np.array((0.15,0.15,1,2.8,0.05,0.25,0.1,3,0.2,0.1))+np.array((84,212,67,84,88,76,400,390,208,19,7,23.5,17.5,44,42.5,54,176))
p2=np.array((0.85,0.85,0.9,2,0.08,2.15,0.85))+np.array((84,176))
a=np.concatenate((p1,p2))
a.reshape((1,38))

fun = lambda x,a: np.dot(a,x)
capa=np.array((1500,2000,1500,4000,1000,5000,6000,3000,20000,5000))
cons = ({'type': 'ineq','fun': lambda x:  1500-x[0]- x[19]},{'type': 'ineq','fun': lambda x:  2000-x[1]- x[20]},'fun': lambda x:  1500-x[2]- x[21]},'fun': lambda x:  1500-x[3]- x[22]},'fun': lambda x:  2000-x[4]- x[23]},'fun': lambda x:  1500-x[5]- x[24]},'fun': lambda x:  4000-x[6]- x[25]},'fun': lambda x:  2000-x[7]- x[26]},'fun': lambda x:  2000-x[8]- x[27]},'fun': lambda x:  1000-x[9]- x[28]},'fun': lambda x:  2000-x[10]- x[29]},'fun': lambda x:  5000-x[11]- x[30]},'fun': lambda x:  6000-x[12]- x[31]},'fun': lambda x:  2000-x[13]- x[32]},'fun': lambda x:  3000-x[14]- x[33]},'fun': lambda x:  3000-x[15]- x[34]},'fun': lambda x:  2000-x[16]- x[35]},'fun': lambda x:  20000-x[17]- x[36]},'fun': lambda x:  5000-x[18]- x[37]},'fun': lambda x: x[0]},'fun': lambda x: x[1]},'fun': lambda x: x[2]},'fun': lambda x: x[3]},'fun': lambda x: x[4]},'fun': lambda x: x[5]},'fun': lambda x: x[6]},'fun': lambda x: x[7]},'fun': lambda x: x[8]},'fun': lambda x: x[9]},'fun': lambda x: x[10]},'fun': lambda x: x[11]},'fun': lambda x: x[12]},'fun': lambda x: x[13]},'fun': lambda x: x[14]},'fun': lambda x: x[15]},'fun': lambda x: x[16]},'fun': lambda x: x[17]},'fun': lambda x: x[18]},'fun': lambda x: x[19]},'fun': lambda x: x[20]},'fun': lambda x: x[21]},'fun': lambda x: x[22]},'fun': lambda x: x[23]},'fun': lambda x: x[24]},'fun': lambda x: x[25]},'fun': lambda x: x[26]},'fun': lambda x: x[27]},'fun': lambda x: x[28]},'fun': lambda x: x[29]},'fun': lambda x: x[30]},'fun': lambda x: x[31]},'fun': lambda x: x[32]},'fun': lambda x: x[33]},'fun': lambda x: x[34]},'fun': lambda x: x[35]},'fun': lambda x: x[36]},'fun': lambda x: x[37]}
        )
capacity=np.array([[0,1500],[0,2000],4000],1000],5000],6000],3000],20000],5000]])

from psopy import init_feasible
# print(capacity.shape)

# vectorized implementation---------------
low=np.array((0,0))
high=np.array((1500,5000))
print(low)
print(high)
x0=init_feasible(cons,low=low,high=high,shape=(1,38),max_retries=1500)
print(x0)
res = minimize(fun,x0,args=a,constraints=cons,options={'g_rate': 1.,'l_rate': 1.,'max_veLocity': 4.,'stable_iter': 100})
print(res)
print('quants:\n')
print(res.x.reshape((2,19)))
q=res.x.reshape(2,19)
print('qunatity from plant 1:',q[0,],'\n quantity from plant 2:',q[1,])

x0 没有显示,但它应该给出一个 (1,38) 的数组。对于 none,我们无法进一步处理最小化函数代码

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0]
[ 1500  2000  1500  1500  2000  1500  4000  2000  2000  1000  2000  5000
  6000  2000  3000  3000  2000 20000  5000  1500  2000  1500  1500  2000
  1500  4000  2000  2000  1000  2000  5000  6000  2000  3000  3000  2000
 20000  5000]
None
---------------------------------------------------------------------------
AxisError                                 Traceback (most recent call last)
<ipython-input-14-a9aeb759bbcc> in <module>()
     77 x0=init_feasible(cons,max_retries=1500)
     78 print(x0)
---> 79 res = minimize(fun,'stable_iter': 100})
     80 print(res)
     81 print('quants:\n')

3 frames
<__array_function__ internals> in apply_along_axis(*args,**kwargs)

/usr/local/lib/python3.6/dist-packages/numpy/lib/shape_base.py in apply_along_axis(func1d,axis,arr,*args,**kwargs)
    359     arr = asanyarray(arr)
    360     nd = arr.ndim
--> 361     axis = normalize_axis_index(axis,nd)
    362 
    363     # arr,with the iteration axis at the end

AxisError: axis 1 is out of bounds for array of dimension 0

我想请教您如何从 x0 中获取 (1,38) 的数组,尽管没有。在尝试使用 26 个变量时,它给出了正确的输出,但没有使用 28 个变量。从 init_feasible 函数删除 low 和 high 时,它没有给出正确的答案,但没有来自 x0 的值

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)