问题描述
我正在 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 (将#修改为@)