gpt4 book ai didi

python - 在 pyswarm 中选择初始位置(粒子群优化)

转载 作者:行者123 更新时间:2023-12-04 10:47:26 27 4
gpt4 key购买 nike

我正在优化问题中应用 PSO。我有一个成本函数 c(x),其中 x 是一个 n 维数组。使用 pyswarms 可以使用以下方法计算最小值

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)

我收到以下错误:

Traceback (most recent call last):


File "<ipython-input-110-f2477b03016c>", line 1, in <module>
runfile('/home/lps/Downloads/pso.py', wdir='/home/lps/Downloads')

File "/home/lps/anaconda3/lib/python3.7/site-
packages/spyder_kernels/customize/spydercustomize.py", line 668, in
runfile
execfile(filename, namespace)

File "/home/lps/anaconda3/lib/python3.7/site-
packages/spyder_kernels/customize/spydercustomize.py", line 108, in
execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "/home/lps/Downloads/pso.py", line 234, in <module>
init_pos = init_pos)

File "/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/single/global_best.py", line 132, in __init__
init_pos=init_pos,

File "/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/base/base_single.py", line 110, in __init__
self.reset()

File "/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/base/base_single.py", line 197, in reset
options=self.options,

File "/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/backend/generators.py", line 245, in create_swarm
return Swarm(position, velocity, options=options)

File "<attrs generated init
73b4f2f5e7b2bdb45fae355f5990e313431ea4d3>", line 11, in __init__
self.dimensions = __attr_factory_dimensions(self)

File "/home/lps/anaconda3/lib/python3.7/site-
packages/pyswarms/backend/swarms.py", line 117, in dimensions_default
return self.position.shape[1]

IndexError: tuple index out of range
init_pos的正确使用方法是什么?范围?

最佳答案

Pyswarms 的作者在这里:)
init_pos尺寸应该是 (swarm_size, num_dimensions) .然而,正如你所说:

n this case, the variable init_pos is an array of size (len(X),). However, when I execute the code



由于您传递的是一维数组,因此会出错。同样,要解决此问题,请初始化您的位置矩阵,使其具有二维。

希望能帮助到你!

关于python - 在 pyswarm 中选择初始位置(粒子群优化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59637245/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com