CSA-变色龙群优化
CSA-变色龙群优化 的真实核心位于:
CSA-变色龙群优化
1. 方法概述
CSA-变色龙群优化 的真实核心位于:
core/csa.pycore/csa_calculator.pycore/excel_handler.pycore/benchmarks.py
这份实现对应 Chameleon Swarm Algorithm。其主循环同时包含:
- 基于个体历史最优与全局最优的探索更新
- 速度驱动的猎捕更新
- 个体历史最优与全局最优的贪心刷新
设第 \(i\) 个体位置为 \(x_i^{(t)}\),速度为 \(v_i^{(t)}\),历史最优为 \(p_i^{(t)}\),群体最优为 \(g^{(t)}\)。
2. 时间调度参数
当前实现按时间计算四个核心系数。首先是惯性样式系数
$$ \omega(t)=\Big(1-\frac{t}{T}\Big)^{\rho\sqrt{t/T}} \tag{1} $$
其次是两个随时间变化的搜索系数
$$ p_1(t)=p_{1,0}\exp\!\Big(-2\big(\tfrac{t}{T}\big)^2\Big) \tag{2} $$
$$ p_2(t)=\frac{p_{2,0}}{1+\exp\!\big(\frac{-t+T/2}{100}\big)} \tag{3} $$
以及一个衰减项
$$ \mu(t)=\gamma\exp\!\Big(-\big(\alpha\tfrac{t}{T}\big)^\beta\Big) \tag{4} $$
这些公式都直接写在 core/csa.py 中,不是 UI 假参数。
3. 位置与速度更新
3.1 探索分支
代码以 0.9 的概率进入基于群体信息的探索更新:
$$ x_i^{(t+\frac{1}{2})} =x_i^{(t)} +p_1(t)\big(p_{k(i)}^{(t)}-x_i^{(t)}\big)r_1 +p_2(t)\big(g^{(t)}-x_i^{(t)}\big)r_2 \tag{5} $$
其中 \(p_{k(i)}^{(t)}\) 是随机抽到的另一个个体历史最优,\(r_1,r_2\sim U(0,1)\)。
3.2 跳跃分支
其余 0.1 的概率会围绕全局最优执行重定位:
$$ x_i^{(t+\frac{1}{2})} =g^{(t)}+\mu(t)\Big((u-l)\odot r+l\Big)\odot s \tag{6} $$
其中 \(s\in\{-1,1\}^d\) 是随机符号向量。
3.3 速度更新与猎捕位移
随后不管来自哪一条分支,都会继续做速度更新:
$$ v_i^{(t+1)} =\omega(t)v_i^{(t)} +p_1(t)\big(p_i^{(t)}-x_i^{(t+\frac{1}{2})}\big)r_3 +p_2(t)\big(g^{(t)}-x_i^{(t+\frac{1}{2})}\big)r_4 \tag{7} $$
再利用加速度形式推进位置:
$$ x_i^{(t+1)} =x_i^{(t+\frac{1}{2})} +\frac{\big(v_i^{(t+1)}\big)^2-\big(v_i^{(t)}\big)^2}{2a(t)} \tag{8} $$
其中
$$ a(t)=2590\big(1-e^{-\log t}\big) \tag{9} $$
但由于 \(t=1\) 时理论上 \(a(1)=0\),代码专门把它钳成 1e-10,避免首轮出现除零。
3.4 历史最优与群体最优
若当前位置更优,则刷新个体历史最优:
$$ p_i^{(t+1)}= \begin{cases} x_i^{(t+1)}, & f(x_i^{(t+1)})<f(p_i^{(t)})\\ p_i^{(t)}, & \text{否则} \end{cases} \tag{10} $$
随后全局最优取所有个体历史最优里的最优者。
4. 上传代理优化与输出结果
上传模式下,程序会先训练随机森林代理模型:
$$ \hat y(x)=\mathrm{RandomForestRegressor}_{300}(x) \tag{11} $$
再把 spec.objective 传给 CSA 做最小化搜索。若上传方向为 max,则该方向已经编码进 spec.objective 里,最终导出时再恢复原始口径。
真实 Excel 工作表为:
原始数据参数边界设置运行汇总收敛曲线最佳解UploadedData(上传模式)SurrogateMetrics(上传模式)结果解读图表清单
其中 运行汇总 保存的不是多次运行记录,而是单次优化后的若干统计量,例如 best_fitness、curve_mean、curve_std。
5. 实现说明与注意事项
从真实代码看,这个目录有几个必须写清的实现细节:
c1和c2虽然作为参数暴露出来,但在core/csa.py主循环里实际上没有被使用。- 代码里写了
_rotation(),但主循环明确注释掉了旋转阶段,所以当前版本并不会执行旋转更新。 - 为避免首轮除零,
a(t)在 \(t=1\) 时被强制替换为很小的正数,这属于实现层面的数值修补。 - 当前实现没有
n_runs多次运行逻辑,只有单次优化。 - 上传模式本质仍然是“随机森林代理模型 + CSA 搜索”,而不是 CSA 直接对原始样本表进行运算。
6. 论文写作模板
可在论文“方法部分”中写为:
“本文采用变色龙群优化算法对连续变量优化问题进行求解。首先,在给定边界内初始化个体位置、速度、个体历史最优和群体最优,并依据时间计算惯性样式系数及多组搜索调度参数;其次,个体以较高概率执行基于历史最优与全局最优的探索更新,以较低概率执行围绕群体最优的跳跃重定位;随后,再结合速度驱动的猎捕位移更新当前位置,并以贪心方式刷新个体历史最优与群体最优;最后,输出最优解、运行汇总、收敛曲线和代理优化结果,用于评价算法的寻优效果。”
7. 单篇终审补充
7.1 表格标题模板
运行汇总表可写为:表X CSA 最优值与收敛统计汇总。收敛曲线表可写为:表X CSA 各迭代最优适应度变化。最佳解表可写为:表X CSA 求得的最优解向量。图表清单表可写为:表X CSA 导出图表索引。
7.2 图表题注模板
convergence.png可写为:图X 变色龙群优化算法收敛曲线。
7.3 结果解释模板段落
“由 运行汇总、收敛曲线 与 最佳解 可见,CSA 在当前实现下能够通过探索更新、跳跃重定位和速度驱动猎捕位移逐步逼近更优区域。图X 所示 convergence.png 展示了最优适应度随迭代的变化过程,可据此判断算法是在前期快速改进还是在后期缓慢逼近最优值。由于当前版本未启用旋转阶段且只执行单次运行,因此论文中应如实写作单次优化结果,而不宜将其表述为包含完整多次重复试验的稳定性结论。”
7.4 全量强化补充
本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/CSA-变色龙群优化/results/CSA-变色龙群优化分析结果_20260324_012045。主结果文件为 CSA-变色龙群优化分析结果_20260324_012045.xlsx,实际工作表为 原始数据、参数、边界设置、运行汇总、收敛曲线、最佳解、结果解读、图表清单。当前主图文件为 charts/convergence.png。
这篇文档需要特别把“主程序支持上传代理”和“当前复现实例是 benchmark 函数”区分开写。虽然该工作簿中含有 原始数据,但当前 repro_csa.py 并没有使用 repro_inputs 或上传文件,而是直接把 objective_name 设为 F1,并将 output_dir 写成相对目录 results。也就是说,这个结果目录对应的是标准测试函数口径的实跑与复现,不是上传样本驱动复现。
因此正文里若说明可复现性,应写成“CSA 支持上传代理优化,但当前绑定证据目录的 repro 实例采用 benchmark/F1 问题直接复算”。不要把这一份 repro_csa.py 误写成 repro_inputs/... 驱动,也不要把 原始数据 表泛化理解成来自用户上传表的副本;在这类优化算法中,它更接近求解过程或问题配置关联数据的导出结果。
8. 软件实现核查补充(2026-07)
本篇对应的软件源码目录是 具体的算法3/优化与多目标/CSA-变色龙群优化。软件实现提供优化模式与上传数据代理优化模式,上传模式将 csv/xlsx/xls 数值表转成随机森林代理问题后再执行 CSA。理论部分关于变色龙搜索、速度更新、跳跃重定位和猎捕阶段可以保留,但说明软件结果时必须以工作簿中的 Problem、CSA_Params 和 problem_mode 为准。
当前较新的代表性目录为 results/CSA-变色龙群优化分析结果_20260517_121004-优化模式 与 results/CSA-变色龙群优化分析结果_20260517_121016-上传数据代理优化。主工作簿同时保留英文审计表和中文说明表,包括 Summary、Problem、CSA_Params、Bounds、Run_Summary、History_Mean、History_All、Best_Solution、Charts、参数、边界设置、运行汇总、稳定性统计、收敛曲线、最佳解、最佳适应度、结果解读、图表清单、结果说明;上传模式额外包含 UploadedProblem、UploadedData、SurrogateMetrics。如果正文使用中文表名,应在附录或字段说明中保留英文表对应关系,便于审计。
当前稳定图表为 charts/convergence.png,用于展示最优目标值随迭代变化。复现脚本位于 复现代码/优化模式/ 或 复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/csa_sample.xlsx,复现结果进入 repro_outputs/。旧文中提到 benchmark/F1 的历史结果可以作为旧证据保留,但当前较新结果已能覆盖上传代理模式,因此用户说明中应优先按最新两类模式解释。