非线性规划中的粒子群优化算法基础题
题目描述
考虑一个简单的二维非线性规划问题:
最小化目标函数 \(f(x_1, x_2) = (x_1 - 3)^2 + (x_2 + 1)^2 + 5\)
约束条件为:
\(x_1^2 + x_2^2 \leq 25\)(可行域为半径为5的圆内区域)
\(-6 \leq x_1 \leq 6\)
\(-6 \leq x_2 \leq 6\)
要求使用粒子群优化算法求解该问题,并解释算法每一步的细节。
解题过程循序渐进讲解
1. 算法原理概述
粒子群优化是一种基于群体智能的随机优化算法,模拟鸟群或鱼群的社会行为。每个"粒子"代表一个候选解,在搜索空间中移动,通过跟踪个体历史最优位置和群体全局最优位置来更新自身状态。核心要素包括:
- 粒子位置 \(\mathbf{x}_i\):表示当前解
- 粒子速度 \(\mathbf{v}_i\):控制移动方向和步长
- 个体最优位置 \(\mathbf{p}_i\):粒子自身历史最佳位置
- 全局最优位置 \(\mathbf{g}\):群体中所有粒子的最佳位置
2. 初始化粒子群
设粒子数量 \(N = 10\),每个粒子的位置和速度在可行域内随机初始化:
- 位置 \(x_1 \in [-6, 6]\), \(x_2 \in [-6, 6]\) 均匀随机生成
- 速度 \(v_1, v_2 \in [-1, 1]\) 随机生成
示例:粒子1初始位置 \((2.0, -3.0)\),速度 \((0.5, -0.2)\)
3. 处理约束条件
由于目标函数是凸函数,约束为凸集,但PSO本身是无约束算法。需在评估目标函数时处理约束:
- 若粒子飞出圆域 \(x_1^2 + x_2^2 > 25\),则赋予极大惩罚值(如 \(f_{\text{penalty}} = 1000\)),使其被淘汰
- 边界约束 \([-6, 6]\) 通过速度更新后直接截断处理
4. 迭代更新过程
对每个粒子 \(i\),每一代按以下公式更新:
速度更新:
\[\mathbf{v}_i^{t+1} = w \mathbf{v}_i^t + c_1 r_1 (\mathbf{p}_i - \mathbf{x}_i^t) + c_2 r_2 (\mathbf{g} - \mathbf{x}_i^t) \]
位置更新:
\[\mathbf{x}_i^{t+1} = \mathbf{x}_i^t + \mathbf{v}_i^{t+1} \]
参数设置:
- 惯性权重 \(w = 0.7\)(平衡全局与局部搜索)
- 加速常数 \(c_1 = c_2 = 1.5\)(控制个体与社会学习权重)
- \(r_1, r_2 \in [0,1]\) 为随机数
5. 具体迭代示例
假设第1代:
- 粒子1当前位置 \((2.0, -3.0)\),计算 \(f = (2-3)^2 + (-3+1)^2 + 5 = 10\)
- 当前个体最优 \(\mathbf{p}_1 = (2.0, -3.0)\)
- 假设全局最优粒子在 \((3.0, -2.0)\),\(f = 5.0\)(当前最佳)
更新粒子1速度(设 \(r_1=0.6, r_2=0.8\)):
\[v_1^{new} = 0.7 \times 0.5 + 1.5 \times 0.6 \times (2.0 - 2.0) + 1.5 \times 0.8 \times (3.0 - 2.0) = 1.55 \]
\[v_2^{new} = 0.7 \times (-0.2) + 0 + 1.5 \times 0.8 \times (-2.0 - (-3.0)) = 0.96 \]
更新位置:
\[x_1^{new} = 2.0 + 1.55 = 3.55,\quad x_2^{new} = -3.0 + 0.96 = -2.04 \]
检查约束: \(3.55^2 + (-2.04)^2 = 16.8 \leq 25\),有效。
6. 更新最优位置
计算新位置函数值:
\[f(3.55, -2.04) = (0.55)^2 + (-1.04)^2 + 5 = 6.33 \]
对比个体最优:6.33 < 10,更新 \(\mathbf{p}_1 = (3.55, -2.04)\)
对比全局最优:6.33 > 5.0,故全局最优不变。
7. 终止条件与结果
重复迭代50代后,粒子群收敛至理论最优解 \((3, -1)\) 附近(实际可能受随机性影响)。理论最小值 \(f(3,-1) = 5\)。算法优势在于无需梯度信息,适用于非凸、不可微问题。
关键点总结
- 速度更新平衡了惯性、个体认知和社会学习
- 约束通过惩罚函数处理
- 随机性 \(r_1, r_2\) 避免早熟收敛
- 参数 \(w, c_1, c_2\) 需经验调优