C++ | Python | 机器人 | 集群 | 算法 | 神经网络 | 集群行为 | 导航避障 | 耦合共振 | 同步 | 相机 | 拖拽 | 寻觅 | 搬运 | 可视化 | 物理 | 数学
🎯机器人群行为配置和C++行为实现:🖊脚底机器人狭隘空间导航避让障碍物行为 | 🖊脚底机器人使用摄像头耦合共振,实现同步动作 | 🖊脚底机器群使用相机,计算彼此间“分子间势能”的方式寻觅彼此 | 🖊脚底机器拖拽可移动物体,模拟清理行为 | 🖊预先规划机器群活动轨迹,模拟群机导航避障 | 🖊预先规划机器群身份号,模拟群机导航避障 | 🖊模拟蚂蚁搬运食物,预先划定巢穴和外界食物区,使用OpenGL可视化机群搬运过程,机器人使用上述避障和寻觅方式执行动作 | 🖊模拟蚊虫趋光性,使用神经网络和算法创建脚底机器人趋光性动作 | 🖊模拟上级指挥下级动作,下级机群等待上级主机器人命令,收到命令执行各种动作行为。🎯统计学机器人集群量化属性 | 🎯浮标机器人集群
在计算科学中,粒子群优化 是一种计算方法,它通过迭代尝试改进候选解决方案来优化问题,以满足给定的质量标准。它通过拥有一组候选解决方案(这里称为粒子)并根据粒子位置和速度的简单数学公式在搜索空间中移动这些粒子来解决问题。每个粒子的运动都受到其局部最佳已知位置的影响,但也被引导到搜索空间中的最佳已知位置,这些位置会随着其他粒子找到更好的位置而更新。这有望使群体向最佳解决方案移动。
此算法的一个基本变体是通过拥有一个候选解决方案(称为粒子)的种群(称为群体)来工作的。这些粒子根据一些简单的公式在搜索空间中移动。粒子的移动由它们自己在搜索空间中的最佳位置以及整个群体的最佳位置引导。当发现改进的位置时,这些位置将引导群体的移动。这个过程不断重复,希望最终能找到令人满意的解决方案,但不能保证。
Copy for 每个粒子 i = 1, ..., S do
使用均匀分布的随机向量初始化粒子的位置: xi ~ U(blo, bup)
将粒子的已知位置初始化为其初始位置: pi ← xi
if f(pi) < f(g) then
更新群体最知名的位置: g ← pi
初始化粒子速度: vi ~ U(-|bup-blo|, |bup-blo|)
while 不满足终止条件 do:
for 每个粒子 i = 1, ..., S do
for 每个维度 d = 1, ..., n do
选择随机数: rp, rg ~ U(0,1)
更新粒子的速度: vi,d ← w vi,d + φp rp (pi,d-xi,d) + φg rg (gd-xi,d)
更新粒子的位置: xi ← xi + vi
if f(xi) < f(pi) then
更新粒子的已知位置: pi ← xi
if f(pi) < f(g) then
更新群体最知名的位置: g ← pi
在数学优化中,葛根函数是一个非凸函数,用作优化算法的性能测试问题。它是非线性多峰函数的典型示例。由于搜索空间大且局部最小值数量多,因此寻找此函数的最小值是一个相当困难的问题。
Copy import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def rastrigin(x):
n = len(x)
return 10*n + sum([xi**2 - 10*np.cos(2*np.pi*xi) for xi in x])
def pso(cost_func, dim=2, num_particles=30, max_iter=100, w=0.5, c1=1, c2=2):
particles = np.random.uniform(-5.12, 5.12, (num_particles, dim))
velocities = np.zeros((num_particles, dim))
best_positions = np.copy(particles)
best_fitness = np.array([cost_func(p) for p in particles])
swarm_best_position = best_positions[np.argmin(best_fitness)]
swarm_best_fitness = np.min(best_fitness)
for i in range(max_iter):
r1 = np.random.uniform(0, 1, (num_particles, dim))
r2 = np.random.uniform(0, 1, (num_particles, dim))
velocities = w * velocities + c1 * r1 * (best_positions - particles) + c2 * r2 * (swarm_best_position - particles)
particles += velocities
fitness_values = np.array([cost_func(p) for p in particles])
improved_indices = np.where(fitness_values < best_fitness)
best_positions[improved_indices] = particles[improved_indices]
best_fitness[improved_indices] = fitness_values[improved_indices]
return swarm_best_position, swarm_best_fitness
solution, fitness = pso(rastrigin, dim=dim)
print('Solution:', solution)
print('Fitness:', fitness)
x = np.linspace(-5.12, 5.12, 100)
y = np.linspace(-5.12, 5.12, 100)
X, Y = np.meshgrid(x, y)
Z = rastrigin([X, Y])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.scatter(solution[0], solution[1], fitness, color='red')
plt.show()