COA-郊狼优化
COA-郊狼优化 的真实核心位于:
COA-郊狼优化
1. 方法概述
COA-郊狼优化 的真实核心位于:
core/coa.pycore/benchmarks.pyui/upload_widget.pyui/results_widget.py
这份实现对应 Coyote Optimization Algorithm。它把种群拆成若干个包(pack),每个包内再进行社交更新、幼崽产生与最差个体替换。
设总种群规模为 \(N\),每包郊狼数为 \(n_c\),则包数为
$$ N_{pack}=\left\lfloor \frac{N}{n_c}\right\rfloor \tag{1} $$
若存在余数,代码会把剩余郊狼直接并到最后一个包,而不是新建一个小包。
2. 包内更新机制
2.1 Alpha 与社会趋势
每个包先按适应度排序,取最优个体作为该包 alpha。同时计算包内平均位置
$$ \mathrm{tendency}=\frac{1}{|\mathcal{P}|}\sum_{x\in\mathcal{P}} x \tag{2} $$
这就是代码里的 Social Tendency。
2.2 个体社交更新
对包内第 \(i\) 只郊狼,随机选两只不同同伴 rc1、rc2,然后执行
$$ x_i^{(t+1)}=x_i^{(t)}+r_1\big(x_{\alpha}-x_{rc1}\big)+r_2\big(\mathrm{tendency}-x_{rc2}\big) \tag{3} $$
其中 \(r_1,r_2\sim U(0,1)\)。新解统一裁剪到边界后重新计算适应度,若更优则贪心接受。
2.3 幼崽产生
每个包每轮还会从一对父母生成一只幼崽。设维度为 \(d\),代码定义父母基因继承概率
$$ p=\frac{1-\frac{1}{d}}{2} \tag{4} $$
对每个维度 \(j\):
$$ x_{pup,j}= \begin{cases} x_{dad,j}, & r_j<p\\ x_{mom,j}, & r_j>1-p\\ U(l_j,u_j), & \text{否则} \end{cases} \tag{5} $$
也就是说,剩余维度不是复制父母,而是直接做随机噪声重采样。
2.4 幼崽生存
包内个体会按“适应度更差优先、同适应度时更年轻优先”排序;这是因为代码实际使用的是 sort(key=lambda x: (x['fitness'], -x['age']), reverse=True)。若幼崽更优,则替换当前最差个体:
$$ x_{worst}\leftarrow x_{pup}, \qquad \text{若 } f(x_{pup})<f(x_{worst}) \tag{6} $$
3. 包间交换与年龄更新
3.1 离包概率
COA 代码里离包概率并不是自由参数,而是固定写成
$$ p_{leave}=\min\big(1,\ 0.005\,n_c^2\big) \tag{7} $$
3.2 包间交换
若当前存在多个包,并且触发离包事件,则随机选两个包,再随机交换其中各一只郊狼。这一步不重新评估适应度,只是交换所属包。
3.3 年龄更新
每轮结束后,每只郊狼的年龄加一:
$$ \mathrm{age}_i^{(t+1)}=\mathrm{age}_i^{(t)}+1 \tag{8} $$
年龄主要在“最差个体替换排序”时作为次级准则使用。
4. 上传代理优化与输出结果
虽然 COAOptimizer 核心只接受一个黑箱目标函数,但 UI 层已经支持上传代理优化。上传后先训练随机森林代理模型
$$ \hat y(x)=\mathrm{RandomForestRegressor}_{300}(x) \tag{9} $$
再把 spec.objective 传给 COA 进行搜索。UI 主流程导出的 Excel 一般包含:
运行汇总参数收敛曲线最优解图表清单
在上传模式下,主界面导出还可能额外出现:
UploadedDataSurrogateMetrics
但复现脚本自己再次导出时,通常只保留最基础的四张表。
5. 实现说明与注意事项
从真实代码看,这个目录应明确写出:
- COA 核心实现始终按最小化比较,不提供 benchmark 最大化接口。
- 包数采用
floor(pop_size / n_coyotes),余下个体并入最后一个包。 - 幼崽的“第三类基因来源”是随机重采样,不是父母平均或高斯扰动。
- 上传代理优化主要由 UI 层封装实现,核心优化器本身只知道“调用传入目标函数”。
- 当前结果导出相对简化,没有像 AFT、BA 那样导出完整群体矩阵或多次运行统计。
6. 论文写作模板
可在论文“方法部分”中写为:
“本文采用郊狼优化算法对连续变量优化问题进行求解。首先,将总体种群划分为多个包,并在每个包内根据适应度确定 alpha 个体和社会趋势;其次,各郊狼依据 alpha 个体与社会趋势执行社交更新,同时在每轮迭代中由父母个体生成幼崽,并以贪心准则尝试替换当前最差个体;随后,在多包场景下执行随机离包与跨包交换机制,以增强种群多样性;最后,输出最优解、收敛曲线和运行汇总结果,用于评价算法的搜索性能。”
7. 单篇终审补充
7.1 表格标题模板
运行汇总表可写为:表X COA 最优适应度与问题规模汇总。参数表可写为:表X COA 参数设置说明。收敛曲线表可写为:表X COA 各迭代最优适应度变化。最优解表可写为:表X COA 求得的最优解向量。图表清单表可写为:表X COA 导出图表路径索引。
7.2 图表题注模板
convergence.png可写为:图X 郊狼优化算法收敛曲线。
7.3 结果解释模板段落
“由 运行汇总、收敛曲线 与 最优解 可见,COA 能够通过包内 alpha 引导、社会趋势更新和幼崽替换机制逐步改进候选解。图X 所示 convergence.png 反映了最优适应度在迭代中的变化过程;若曲线前期下降较快而后期趋稳,说明算法已由全局搜索逐步过渡到局部精化。由于当前实现结果导出相对简化,论文结果部分宜围绕最优值、收敛趋势和最优解向量展开,而不宜声称存在完整的多次运行稳定性统计,除非另行补做重复实验。”
7.4 全量强化补充
本次全量强化绑定的真实上传验证目录为 具体的算法3/优化与多目标/COA-郊狼优化/results/manual_upload_verify_20260328/COA-郊狼优化分析结果_20260328_114035。主结果文件为 COA-郊狼优化分析结果_20260328_114035.xlsx,实际工作表为 运行汇总、参数、收敛曲线、最优解、UploadedData、SurrogateMetrics、图表清单。
当前真实图文件为 charts/convergence.png,复现脚本为 repro_coa.py,复现输出会进入 repro_outputs/COA-郊狼优化分析结果_20260328_114035_repro.xlsx。论文中如果只陈述主实验,应优先引用首层主结果文件和 charts/convergence.png,把 repro_outputs 作为附录复现证据。
复现参数中 problem_mode = 'upload_surrogate',输入口径为 source_file = 'repro_inputs/coa_sample.xlsx',并使用 target_column = 'f_sphere'、objective_direction = 'min'。因此这篇文档应明确写成上传代理优化模式;若正文解释最优值,应同时引用 SurrogateMetrics,避免把代理模型寻优结果误写成直接解析目标函数结果。
8. 软件实现核查补充(2026-07)
本篇对应的软件源码目录是 具体的算法3/优化与多目标/COA-郊狼优化。软件实现支持优化模式和上传数据代理优化模式;上传模式通过 csv/xlsx/xls 数值表构造代理问题,优化结果需要与 UploadedProblem、UploadedBounds、UploadedData、SurrogateMetrics 联合解读。理论中关于郊狼群体、alpha、社会趋势、幼崽替换和包间交换的内容可以保留,但应说明当前软件导出的是工程化单目标连续优化链路。
当前较新的代表性目录为 results/COA-郊狼优化分析结果_20260517_101952-优化模式 与 results/COA-郊狼优化分析结果_20260517_102033-上传数据代理优化。主工作簿 COA_results_*.xlsx 在优化模式下包含 字段说明、Summary、Problem、COA_Params、Bounds、Run_Summary、History_Mean、History_All、Best_Solution、Charts;上传模式额外包含 UploadedProblem、UploadedBounds、UploadedData、SurrogateMetrics。Run_Summary 记录每次运行,History_Mean 和 History_All 对应平均与完整收敛历史。
当前图表文件通常直接位于结果目录下,例如 COA_convergence_时间戳.png 和 COA_preview_时间戳.png,复现输出中也会生成 COA_convergence_*.png。复现脚本位于 复现代码/优化模式/ 或 复现代码/上传数据代理优化/,上传模式使用 repro_inputs/coa_sample.xlsx,复现产物进入 repro_outputs/。与 ALO/AHA 不同,COA 当前不是固定使用 charts/ 子目录,因此文档中图表路径应按实际 Charts 表或结果目录文件解释。