Я применяю PSO в задаче оптимизации. У меня есть функция стоимости c (x), в которой x является размерным массивом. Используя 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 ), Я хотел бы сообщить алгоритму, где начать рой. Я пробую параметр init_pos, описанный в документации pyswarms.
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)
, я получаю следующую ошибку:
Трассировка (последний вызов был последним):
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
?