正規分布を用いてpsoの位置更新を行いたいのですが、正規分布の計算時にエラーが出てしまいます。

実現したいこと

・正規分布を用いてのpsoの計算

前提

・正規分布を用いて、psoの位置更新を行いたいのですが、エラーが出て困っています。

発生している問題・エラーメッセージ

エラーメッセージ
if objective_function(xrand) < objective_function(gauss[i] + velocities[i]):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

該当のソースコード

ソースコード positions = np.array( [[random.uniform(xy_min, xy_max) for _ in range(dimensions)] for _ in range(number_of_particles)]) velocities = np.zeros(positions.shape) def objective_function(position): return np.sum((position+s) ** 2, axis=0) def F_gauss(xlist, ave, var): return np.exp(-((xlist - ave)**2)/(2*var**2)) / np.sqrt(2*np.pi)*var def gauss_update_positions(positions, personal_best_positions, velocities): gauss = positions ave = (gauss + personal_best_positions) / 2 var = abs(gauss - personal_best_positions) xrand = [] for i in range(Nums): if random.uniform(0, 1) > 0.5: if objective_function(personal_best_positions[i]) < objective_function(gauss[i] + velocities[i]): gauss[i] = personal_best_positions[i] else: gauss[i] += velocities[i] elif var_check_0(var[i]): gauss[i] = ave[i] if objective_function(positions[i] + velocities[i]) < objective_function(gauss[i]): gauss[i] = positions[i]+velocities[i] else: xrand = (F_gauss(gauss[i], ave, var)) if objective_function(xrand) < objective_function(gauss[i] + velocities[i]): gauss[i] = xrand else: gauss[i] += velocities[i] return gauss

コメントを投稿

0 コメント