DMOA-侏儒獴优化
侏儒獴优化算法(Dwarf Mongoose Optimization Algorithm, DMOA)是一类面向连续变量优化的群智能方法,通过模拟侏儒獴群体中的领导觅食、侦察搜索、育幼保姆与群体迁移行为实现全局寻优。本项目的实现位于 DMOA-侏儒獴优化/core/dmoar…
DMOA-侏儒獴优化
1. 方法概述
侏儒獴优化算法(Dwarf Mongoose Optimization Algorithm, DMOA)是一类面向连续变量优化的群智能方法,通过模拟侏儒獴群体中的领导觅食、侦察搜索、育幼保姆与群体迁移行为实现全局寻优。本项目的实现位于 DMOA-侏儒獴优化/core/dmoa_runner.py,支持单目标连续优化、min/max 模式、自定义目标函数与罚函数约束,以及上传数据后的代理优化。
设第 \(t\) 轮迭代时,第 \(i\) 个候选解为
$$ \boldsymbol{x}_i^{(t)}=(x_{i1}^{(t)},x_{i2}^{(t)},\ldots,x_{id}^{(t)})^\top\in\Omega \tag{1} $$
其中 \(d\) 为维度,\(\Omega=[\boldsymbol{l},\boldsymbol{u}]\subset\mathbb{R}^d\) 为可行域。算法以种群中的 alpha 组作为主要搜索群体,并通过 babysitter 个体数量控制重置与探索节奏。
2. 问题定义与输入模式
2.1 基本优化问题
对内置基准函数或自定义目标函数,项目求解的基本问题写为
$$ \operatorname*{best}_{\boldsymbol{x}\in\Omega} f(\boldsymbol{x}) \tag{2} $$
其中 best 在最小化模式下表示 \(\min\),在最大化模式下表示 \(\max\)。
2.2 自定义目标与罚函数约束
若用户选择 Custom 模式,系统允许输入目标表达式 \(\phi(\boldsymbol{x})\),并支持不等式约束
$$ g_k(\boldsymbol{x})\le 0,\qquad k=1,2,\ldots,m \tag{3} $$
以及等式约束
$$ h_\ell(\boldsymbol{x})=0,\qquad \ell=1,2,\ldots,q \tag{4} $$
core/custom_objective.py 中采用罚函数构造适应度。罚项定义为
$$ P(\boldsymbol{x})= \rho\sum_{k=1}^{m}\max\!\big(0,g_k(\boldsymbol{x})\big)^p + \rho_{\mathrm{eq}}\sum_{\ell=1}^{q}\max\!\big(0,|h_\ell(\boldsymbol{x})|-\varepsilon_{\mathrm{eq}}\big)^p \tag{5} $$
于是最小化情形对应
$$ F(\boldsymbol{x})=\phi(\boldsymbol{x})+P(\boldsymbol{x}) \tag{6} $$
最大化情形则按项目实现写为
$$ F(\boldsymbol{x})=\phi(\boldsymbol{x})-P(\boldsymbol{x}) \tag{7} $$
2.3 上传数据代理优化
当 problem_mode=upload_surrogate 时,系统先从上传数据中识别数值特征列与目标列,使用随机森林回归器训练代理模型。设样本集为
$$ \mathcal{D}=\{(\boldsymbol{x}^{(n)},y^{(n)})\}_{n=1}^{N_s} \tag{8} $$
则代理目标函数可写为
$$ \hat{f}(\boldsymbol{x})=\frac{1}{B}\sum_{b=1}^{B}T_b(\boldsymbol{x}) \tag{9} $$
其中 \(B=300\) 为树的数量。搜索边界由样本特征极值给出:
$$ l_j=\min_{1\le n\le N_s}x_j^{(n)},\qquad u_j=\max_{1\le n\le N_s}x_j^{(n)} \tag{10} $$
对于代理优化模式,项目内部统一按最小化求解,但通过 direction_sign 在结果层恢复目标方向。
3. 核心数学模型
3.1 群体划分与初始化
设总种群规模为 \(N\),babysitter 个体数为 \(N_b\)。则 alpha 搜索组规模为
$$ N_\alpha = N - N_b \tag{11} $$
项目中 scout 组数量与 alpha 组相同,即
$$ N_s^{\mathrm{cout}} = N_\alpha \tag{12} $$
alpha 组位置按均匀分布初始化:
$$ \boldsymbol{x}_i^{(0)}=\boldsymbol{l}+\boldsymbol{r}_i\odot(\boldsymbol{u}-\boldsymbol{l}),\qquad \boldsymbol{r}_i\sim U(0,1)^d \tag{13} $$
同时定义 babysitter 触发阈值
$$ L=\max\!\left(1,\ \operatorname{round}(\lambda_L \cdot d \cdot N_b)\right) \tag{14} $$
其中 \(\lambda_L\) 对应 L_multiplier。
3.2 轮盘赌觅食概率
设第 \(i\) 个个体当前代价为 \(c_i^{(t)}\),其群体均值为
$$ \bar{c}^{(t)}=\frac{1}{N_\alpha}\sum_{i=1}^{N_\alpha}c_i^{(t)} \tag{15} $$
在最小化模式下,项目按如下方式构造轮盘赌适应度:
$$ \Phi_i^{(t)}=\exp\!\left(-\frac{c_i^{(t)}}{\bar{c}^{(t)}}\right) \tag{16} $$
在最大化模式下,代码先对代价取相反数,再使用同样形式计算概率。最终选择概率为
$$ P_i^{(t)}=\frac{\Phi_i^{(t)}}{\sum_{j=1}^{N_\alpha}\Phi_j^{(t)}} \tag{17} $$
3.3 Alpha 组觅食更新
在领导觅食阶段,程序根据式(17)轮盘赌选择个体 \(i\),再随机选择另一只不同个体 \(k\),构造扰动向量
$$ \boldsymbol{\phi}^{(t)}=\frac{\mathrm{peep}}{2}\,\boldsymbol{\xi}^{(t)},\qquad \boldsymbol{\xi}^{(t)}\sim U(-1,1)^d \tag{18} $$
并生成候选位置
$$ \widetilde{\boldsymbol{x}}_i^{(t+1)}= \boldsymbol{x}_i^{(t)}+\boldsymbol{\phi}^{(t)}\odot\left(\boldsymbol{x}_i^{(t)}-\boldsymbol{x}_k^{(t)}\right) \tag{19} $$
随后对候选位置执行边界截断并按优劣保留:若 \(\widetilde{\boldsymbol{x}}_i^{(t+1)}\) 更优,则更新个体,否则其试验计数 trials[i] 增加 1。
3.4 Scout 组与 sleeping mould 指标
对 scout 组中的第 \(i\) 个个体,项目同样使用式(19)构造候选解,并定义 sleeping mould 指标
$$ \mathrm{SM}_i^{(t)}= \frac{\widetilde{c}_i^{(t)}-c_i^{(t)}}{\max\!\left(|\widetilde{c}_i^{(t)}|,\ |c_i^{(t)}|,\ 10^{-12}\right)} \tag{20} $$
其中 \(\widetilde{c}_i^{(t)}\) 为候选解代价,\(c_i^{(t)}\) 为原代价。该量在后续群体迁移阶段被用作位置修正依据。
3.5 Babysitter 重置机制
对前 \(N_b\) 个 babysitter 负责监视的个体,若其失败计数超过阈值 \(L\),则执行随机重置:
$$ \boldsymbol{x}_i^{(t+1)}\sim U(\boldsymbol{l},\boldsymbol{u}),\qquad \text{当 } \mathrm{trials}_i \ge L \tag{21} $$
同时将 trials[i] 重新置零。
3.6 群体迁移修正
项目实现中定义随迭代变化的控制因子
$$ \mathrm{CF}^{(t)}=\left(1-\frac{t}{T}\right)^{2t/T} \tag{22} $$
其中 \(T\) 为最大迭代次数。进一步计算群体平均 sleeping mould 指标
$$ \tau^{(t)}=\frac{1}{|\mathcal{I}^{(t)}|}\sum_{i\in\mathcal{I}^{(t)}} \mathrm{SM}_i^{(t)} \tag{23} $$
其中 \(\mathcal{I}^{(t)}\) 为有限 sleeping mould 值对应的索引集合。对第 \(i\) 个 scout 个体,程序将 \(\mathrm{SM}_i^{(t)}\) 扩展成逐维常量向量 \(\boldsymbol{m}_i^{(t)}\),然后使用
$$ \boldsymbol{\phi}_2^{(t)}=\frac{\mathrm{peep}}{2}\,\boldsymbol{\zeta}^{(t)},\qquad \boldsymbol{\zeta}^{(t)}\sim U(-1,1)^d,\qquad \boldsymbol{r}^{(t)}\sim U(0,1)^d \tag{24} $$
构造新的候选位置。若 \(\tau^{(t)} > \tau^{(t-1)}\),则按
$$ \widehat{\boldsymbol{x}}_i^{(t+1)}= \boldsymbol{x}_i^{(t)}-\mathrm{CF}^{(t)}\, \boldsymbol{\phi}_2^{(t)}\odot \boldsymbol{r}^{(t)}\odot\left(\boldsymbol{x}_i^{(t)}-\boldsymbol{m}_i^{(t)}\right) \tag{25} $$
否则按
$$ \widehat{\boldsymbol{x}}_i^{(t+1)}= \boldsymbol{x}_i^{(t)}+\mathrm{CF}^{(t)}\, \boldsymbol{\phi}_2^{(t)}\odot \boldsymbol{r}^{(t)}\odot\left(\boldsymbol{x}_i^{(t)}-\boldsymbol{m}_i^{(t)}\right) \tag{26} $$
更新位置。生成的新候选解同样经过边界裁剪,并仅在更优时回写。
3.7 全局最优与历史记录
每轮迭代后,全局最优值记为
$$ g^{(t)}=\operatorname*{best}_{1\le i\le N_\alpha} c_i^{(t)} \tag{27} $$
程序同时记录 best_fitness、mean_fitness、worst_fitness 以及参数 \(L\)、\(\mathrm{CF}^{(t)}\)、\(\tau^{(t)}\) 形成迭代历史表。
4. 算法流程
根据 core/dmoa_runner.py,本项目的 DMOA 求解流程可概括为:
- 解析问题模式:基准函数、自定义目标或上传代理优化。
- 根据
uniform/per_dim生成边界向量,并初始化 alpha 组位置。 - 计算当前个体代价,确定全局最优个体。
- 依据式(16)至式(17)计算轮盘赌概率,执行 alpha 组觅食更新。
- 执行 scout 搜索并计算 sleeping mould 指标。
- 对超过阈值 \(L\) 的 babysitter 监视对象执行随机重置。
- 根据式(22)至式(26)执行群体迁移修正。
- 记录历史信息,若设置
runs>1则对多次独立运行结果汇总平均收敛曲线和最优值统计。
5. 关键参数说明
n_pop:总种群规模 \(N\)。n_babysitter:babysitter 个体数量 \(N_b\),影响 alpha 组规模和重置机制。max_iters:最大迭代次数 \(T\)。runs:独立重复运行次数,用于形成Run_Summary与平均历史曲线。seed:随机种子,第 \(r\) 次运行采用seed + r派生。peep:扰动尺度参数,对应式(18)和式(24)。L_multiplier:阈值放缩参数,对应式(14)。penalty_rho、penalty_rho_eq、penalty_power、eq_epsilon:自定义目标约束罚函数参数,对应式(5)。
6. 评价指标与输出结果解释
若共有 \(R\) 次独立运行,第 \(r\) 次运行的最优值记为 \(b_r\),则程序汇总结果满足
$$ b_{\mathrm{best}}= \begin{cases} \min_{1\le r\le R} b_r, & \text{最小化}\\ \max_{1\le r\le R} b_r, & \text{最大化} \end{cases} \tag{28} $$
并对所有运行的迭代历史按相同迭代步做均值统计:
$$ \bar{g}^{(t)}=\frac{1}{R}\sum_{r=1}^{R} g_r^{(t)} \tag{29} $$
项目实际导出的主要工作表包括:
Summary:最佳适应度、运行次数、目标信息等摘要;Problem、DMOA_Params:问题配置与侏儒獴算法参数;Bounds:变量边界;Run_Summary:多次运行最优值汇总;History_Mean:跨运行平均历史;History_All:所有运行的迭代历史;Best_Solution:最优解向量表;Charts:收敛图路径。
若为 Custom 模式,还会追加 Custom_Objective;代理优化模式下还会追加 UploadedData、SurrogateMetrics。
论文结果部分建议先用 Summary 和 Run_Summary 汇报总体最优值与运行间差异,再结合 History_Mean 与 History_All 说明算法稳定性,最后用 Best_Solution 给出代表性最优解。若为上传代理模式,SurrogateMetrics 应与最优预测结果同步报告。
7. 论文写作模板
可在论文方法部分表述为:
“本文采用侏儒獴优化算法对连续变量单目标问题进行求解。算法首先将种群划分为 alpha 搜索组与 babysitter 组,利用轮盘赌机制选择主导个体执行局部觅食更新,并通过 scout 搜索计算 sleeping mould 指标,以反映当前搜索环境变化。对长期未改进的个体,采用 babysitter 触发的随机重置策略恢复种群多样性;随后依据 sleeping mould 平均水平与迭代控制因子对个体位置作进一步修正,从而兼顾局部开发与全局探索。对于含约束的自定义目标,本文采用罚函数将约束违反程度并入适应度;对于上传数据问题,则以随机森林回归器构造代理目标函数后再执行 DMOA 搜索。”
在结果部分可进一步写为:
“本文统计了 DMOA 在多次独立运行下的最优值、平均收敛轨迹和最优解向量,并输出参数设置、变量边界与代理模型训练指标,以支撑实验复现与稳定性分析。”
7.1 结果部分补充模板
若需把实验结果直接写入论文结果部分,可进一步表述为:
“表X给出了算法在当前问题上的最优目标值、平均最优值和标准差(如有多次独立运行),图X展示了收敛曲线变化。结果表明,该算法在迭代前期能够快速逼近优势区域,并在后期逐步趋于稳定,最终获得最优解 \(\boldsymbol{x}^*\) 及其对应目标值 \(f(\boldsymbol{x}^*)\)。对于上传代理优化场景,结合代理模型误差指标可认为该最优结果具有一定的数据驱动解释性。”
7.2 写作替换提示
为便于直接落稿,正文撰写时可将结果文件中的字段替换为以下论文措辞:
best_fitness或结果汇总表中的最优值,可写为“最优目标函数值”或“最优适应度值”;BestSolution、BestPosition、Best_Solution、最优解等工作表,可统一写为“最优决策变量组合 \(\boldsymbol{x}^*\)”;Convergence、收敛曲线等图表,可统一写为“算法收敛曲线图”;SurrogateMetrics可写为“代理模型训练误差与拟合优度指标”,如 RMSE、MAE、\(R^2\)。
7.3 可直接替换的论文结果段落
若需进一步直接落稿,可按以下模板替换其中的表号、图号和数值:
“由表X可知,该算法在[问题名称]上的最优目标值为 [best_fitness]。若进行了多次独立运行,则其平均最优值与标准差分别为 [mean_best_fitness] 和 [std_best_fitness]。由图X所示收敛曲线可见,算法在迭代前期快速逼近优势区域,后期逐渐趋于平稳,表现出较好的收敛性。最终得到的最优决策变量组合为 \(\boldsymbol{x}^*=[x_1^*,x_2^*,\ldots,x_d^*]\)。若采用上传代理优化模式,则结合 RMSE、MAE 和 \(R^2\) 等代理误差指标,可认为该优化结果具有一定的数据驱动可信度。”
8. 实现说明与注意事项
- 本实现适用于连续变量单目标优化,不直接适用于离散组合优化或显式多目标问题。
min/max、自定义约束罚函数和上传代理优化均是项目实现的重要组成部分,论文说明时不应忽略。L_multiplier与n_babysitter会共同影响随机重置频率,参数过大可能导致收敛变慢,过小则可能造成搜索停滞。- 群体迁移阶段使用 sleeping mould 标量扩展成逐维向量的实现方式,这是本项目代码中的具体写法。
- 上传代理优化的结果依赖随机森林拟合质量,因此应结合 RMSE、MAE、\(R^2\) 等训练指标一起解读。
9. 单篇终审补充
9.1 图题与表题对齐建议
Run_Summary表可写为:表X DMOA 多次独立运行结果汇总。History_Mean表可写为:表X DMOA 平均收敛曲线。History_All表可写为:表X DMOA 全部运行历史轨迹。Best_Solution表可写为:表X DMOA 求得的最优解向量。Charts中收敛图建议写为:图X 侏儒獴优化算法收敛曲线。
9.2 终审说明
- 正文里若出现“总体最优值统计”,应优先引用
Run_Summary,不要泛化写成并不存在的Summary表。 - 代理优化模式下,最优结果和
SurrogateMetrics必须成对解释。
9.3 全量强化补充
本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/DMOA-侏儒獴优化/results/DMOA-侏儒獴优化分析结果_20260329_171912。主结果文件为 DMOA_results_20260329_171912.xlsx,实际工作表为 Summary、Problem、DMOA_Params、Bounds、Run_Summary、History_Mean、History_All、Best_Solution、Charts。当前主图文件为 DMOA_convergence_20260329_171912.png 和 DMOA_preview_20260329_171912.png。
这篇文档当前绑定的是 benchmark 口径,而不是上传代理口径。repro_dmoa.py 里真实写入的是 problem_mode = 'benchmark'、objective_name = 'Sphere'、source_file = ''、target_column = '',并通过 runs = 2 在模块目录下直接复算后再次 save_results()。因此这里没有 repro_inputs 子目录,也不存在上传数据副本。
结合真实目录结构可见,DMOA 在当前时间段既有很多历史运行目录,也有 manual_upload_verify_20260329_fixcheck 这类上传验证目录,但本次文档强化绑定的不是那一批上传目录,而是 20260329_171912 这份 benchmark 主结果。正文若引用这份证据,应把 Run_Summary、History_Mean、History_All 明确解释为 benchmark 多次运行统计;若后续要写上传代理版实验,应另行绑定带 UploadedData、SurrogateMetrics 的结果目录,而不能把两类口径混在同一个结果说明段落里。
10. 软件实现核查补充(2026-07)
本篇对应的软件源码目录是 具体的算法3/优化与多目标/DMOA-侏儒獴优化。当前软件实现支持优化模式和上传数据代理优化模式;上传代理模式读取 csv/xlsx/xls 数值表,构造随机森林代理目标后由 DMOA 搜索。文档中的侏儒獴群体、觅食、侦察和保姆机制可作为理论说明保留,但软件结果应以工作簿中的 Problem.problem_mode、DMOA_Params 和 Bounds 为准。
当前较新的代表性目录为 results/DMOA-侏儒獴优化分析结果_20260517_124417-优化模式 与 results/DMOA-侏儒獴优化分析结果_20260517_124505-上传数据代理优化。主工作簿包含 结果说明、Summary、Problem、DMOA_Params、Bounds、Run_Summary、History_Mean、History_All、Best_Solution、Charts、参数、边界设置、运行汇总、收敛曲线、最佳解、最佳适应度、结果解读、图表清单;上传模式额外包含 UploadedProblem、UploadedData、SurrogateMetrics。这说明当前文档既要保留英文审计表,也要说明中文表是给普通用户阅读的同义导出。
当前稳定图表为 charts/convergence.png,同时结果目录还会生成 DMOA_preview_时间戳.png 作为界面预览图。复现代码位于 复现代码/优化模式/ 或 复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/dmoa_sample.xlsx,复现输出进入 repro_outputs/。旧文中绑定的 benchmark 历史目录可作为历史证据保留,但当前较新证据已经覆盖上传代理链路,正式用户说明应优先按这两类模式解释。