Python 在PySarm(粒子群优化)中选择初始位置

Python 在PySarm(粒子群优化)中选择初始位置,python,python-3.x,particle-swarm,Python,Python 3.x,Particle Swarm,我正在一个优化问题中应用粒子群优化算法。我有一个代价函数c(x),其中x是一个n维数组。使用PySarms,可以使用 swarm_size = 200 dim = len(X) # Dimension of X epsilon = 1.0 options = {'c1': 1.7, 'c2':1.7, 'w':0.729} bdmin = np.array(bdmin) bdmax = np.array(bdmax) constraints = (bdmin,bdmax) opti

我正在一个优化问题中应用粒子群优化算法。我有一个代价函数c(x),其中x是一个n维数组。使用PySarms,可以使用

swarm_size = 200
dim = len(X)      # Dimension of X
epsilon = 1.0
options = {'c1': 1.7, 'c2':1.7, 'w':0.729}
bdmin = np.array(bdmin)
bdmax = np.array(bdmax)


constraints = (bdmin,bdmax)
optimizer = ps.single.GlobalBestPSO(n_particles=swarm_size,
                                dimensions=dim,
                                options=options,
                                bounds=constraints)

cost, joint_vars = optimizer.optimize(opt_func, iters=1000)
然而,由于收敛速度很慢,并且我有一个关于向量x的概念,它的结果是c(x)的最小值,我想告诉算法从哪里开始群集。我尝试pyswarms文档中描述的参数init_pos

init_pos = np.array(init_pos) #My guess for a initial swarm
在本例中,变量init_pos是一个大小为(len(X),)的数组。但是,当我执行代码时

optimizer = ps.single.GlobalBestPSO(n_particles=swarm_size,
                                dimensions=dim,
                                options=options,
                                bounds=constraints,
                                init_pos = init_pos)
我得到以下错误:

回溯(最近一次呼叫最后一次):

文件“”,第1行,在
运行文件('/home/lps/Downloads/pso.py',wdir='/home/lps/Downloads')
文件“/home/lps/anaconda3/lib/python3.7/site-
packages/spyder_kernels/customize/spydercurustomize.py”,第668行,在
运行文件
execfile(文件名、命名空间)
文件“/home/lps/anaconda3/lib/python3.7/site-
packages/spyder_kernels/customize/spydercurustomize.py”,第108行,在
执行文件
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“/home/lps/Downloads/pso.py”,第234行,在
初始位置=初始位置)
文件“/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/single/global_best.py”,第132行,in_u_init__
初始位置=初始位置,
文件“/home/lps/anaconda3/lib/python3.7/site-
封装/pyswarms/base/base_single.py”,第110行,初始__
self.reset()
文件“/home/lps/anaconda3/lib/python3.7/site-
封装/pyswarms/base/base_single.py”,第197行,复位
选项=self.options,
文件“/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/backend/generators.py”,第245行,在create_swarm中
返回群(位置、速度、选项=选项)
文件“”,第11行,在_init中__
self.dimensions=\uu属性\u工厂\u维度(self)
文件“/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/backend/swarms.py”,第117行,默认尺寸
返回自我位置形状[1]
索引器错误:元组索引超出范围
使用
init\u pos
参数的正确方法是什么?

Pysarms作者:)

init\u pos
的大小应为
(群集大小、数量维度)
。然而,正如你所说:

在这种情况下,变量init_pos是一个大小为(len(X),)的数组。但是,当我执行代码时

optimizer = ps.single.GlobalBestPSO(n_particles=swarm_size,
                                dimensions=dim,
                                options=options,
                                bounds=constraints,
                                init_pos = init_pos)
由于传递的是一维数组,因此会出错。同样,要解决这个问题,请初始化位置矩阵,使其具有两个维度

希望有帮助

请共享整个错误消息。