正在加载中...

展开本页目录
算法教程EO-平衡优化

EO-平衡优化

No.182 · 在线教程

平衡优化算法(Equilibrium Optimizer, EO)是一类受质量平衡模型启发的连续优化方法,通过构造 equilibrium pool 并围绕平衡状态更新粒子浓度来实现全局寻优。本项目的实现位于 EO-平衡优化/core/calculator.py,明确参考 Ma…

EO-平衡优化

1. 方法概述

平衡优化算法(Equilibrium Optimizer, EO)是一类受质量平衡模型启发的连续优化方法,通过构造 equilibrium pool 并围绕平衡状态更新粒子浓度来实现全局寻优。本项目的实现位于 EO-平衡优化/core/calculator.py,明确参考 Matlab 版 EO.m,并保留了 equilibrium pool 与 memory saving 两个关键机制。

设第 \(i\) 个候选解在第 \(t\) 轮迭代时的状态向量记为

$$ \boldsymbol{C}_i^{(t)}=(C_{i1}^{(t)},C_{i2}^{(t)},\ldots,C_{id}^{(t)})^\top \in \Omega \tag{1} $$

其中 \(d\) 为维度,\(\Omega=[\boldsymbol{l},\boldsymbol{u}]\subset\mathbb{R}^d\) 为变量边界。项目默认面向单目标最小化问题;若切换到上传代理优化模式,则仍以内部最小化形式求解,再在结果层恢复目标方向。

2. 问题定义与输入模式

2.1 基准函数模式

在基准函数模式下,系统支持 Sphere、Rastrigin、Ackley、Rosenbrock 和 Griewank 五类连续测试函数。基本求解问题为

$$ \min_{\boldsymbol{C}\in\Omega} f(\boldsymbol{C}) \tag{2} $$

2.2 上传数据代理优化

upload_surrogate 模式下,系统会基于上传样本训练随机森林代理模型。设训练样本为

$$ \mathcal{D}=\{(\boldsymbol{x}^{(n)},y^{(n)})\}_{n=1}^{N_s} \tag{3} $$

则代理目标函数写为

$$ \hat{f}(\boldsymbol{x})=\frac{1}{B}\sum_{b=1}^{B}T_b(\boldsymbol{x}) \tag{4} $$

其中 \(T_b(\cdot)\) 为第 \(b\) 棵回归树输出,本项目默认 \(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{5} $$

若上传模式中目标方向为“最大化”,则内部目标函数定义为

$$ \tilde{f}(\boldsymbol{x})= \begin{cases} \hat{f}(\boldsymbol{x}), & \text{min}\\ -\hat{f}(\boldsymbol{x}), & \text{max} \end{cases} \tag{6} $$

从而保证 EO 核心计算器始终按最小化形式求解。

3. 核心数学模型

3.1 初始化

项目使用均匀随机采样生成初始浓度种群:

$$ \boldsymbol{C}_i^{(0)}=\boldsymbol{l}+\boldsymbol{r}_i\odot(\boldsymbol{u}-\boldsymbol{l}),\qquad \boldsymbol{r}_i\sim U(0,1)^d \tag{7} $$

其中种群规模为 \(N\),对应代码中的 pop_size

3.2 Equilibrium pool

在每轮迭代中,系统将当前种群与历史最优池 ceq 合并,按适应度升序选出最优 4 个候选向量,记为

$$ \boldsymbol{C}_{eq,1}^{(t)},\ \boldsymbol{C}_{eq,2}^{(t)},\ \boldsymbol{C}_{eq,3}^{(t)},\ \boldsymbol{C}_{eq,4}^{(t)} \tag{8} $$

并构造其均值向量

$$ \boldsymbol{C}_{eq,\mathrm{ave}}^{(t)}=\frac{1}{4}\sum_{k=1}^{4}\boldsymbol{C}_{eq,k}^{(t)} \tag{9} $$

于是 equilibrium pool 表示为

$$ \mathcal{P}_{eq}^{(t)}=\left\{\boldsymbol{C}_{eq,1}^{(t)},\boldsymbol{C}_{eq,2}^{(t)},\boldsymbol{C}_{eq,3}^{(t)},\boldsymbol{C}_{eq,4}^{(t)},\boldsymbol{C}_{eq,\mathrm{ave}}^{(t)}\right\} \tag{10} $$

对每个个体,程序会从池中随机抽取一个平衡候选 \(\boldsymbol{C}_{eq}^{(t)}\) 用于后续更新。

3.3 Memory saving 机制

EO 实现中保留了 memory saving 机制:若当前代某个个体的适应度比上一代更差,则直接回滚到上一代状态。记上一代个体与适应度分别为 \(\boldsymbol{C}_{i,\mathrm{old}}^{(t-1)}\)、\(f_{i,\mathrm{old}}^{(t-1)}\),当前代对应为 \(\boldsymbol{C}_i^{(t)}\)、\(f_i^{(t)}\),则项目实现等价于

$$ \left(\boldsymbol{C}_i^{(t)},f_i^{(t)}\right)= \begin{cases} \left(\boldsymbol{C}_{i,\mathrm{old}}^{(t-1)},f_{i,\mathrm{old}}^{(t-1)}\right), & f_{i,\mathrm{old}}^{(t-1)}<f_i^{(t)}\\ \left(\boldsymbol{C}_i^{(t)},f_i^{(t)}\right), & \text{否则} \end{cases} \tag{11} $$

这一步保证了个体不会因数值波动而退化。

3.4 时间控制项

项目直接采用源码中标注的 Eq.(9) 形式定义时间控制变量:

$$ t^{(iter)}=\left(1-\frac{iter}{T}\right)^{a_2\cdot iter/T} \tag{12} $$

其中 \(iter\) 为当前迭代编号,\(T\) 为最大迭代次数,\(a_2\) 为控制参数。

3.5 指数项 \(F\)

对每个个体和每个维度,首先随机生成 \(\lambda\) 和 \(r\),然后按 Eq.(11) 计算指数项:

$$ \boldsymbol{F}^{(iter)}= a_1\cdot \operatorname{sign}(\boldsymbol{r}-0.5)\odot\left(\exp(-\boldsymbol{\lambda}\, t^{(iter)})-1\right) \tag{13} $$

其中 \(a_1\) 为控制参数。

3.6 生成率控制项

项目中生成率控制参数 GCP 对应 Eq.(15):

$$ \mathrm{GCP}=0.5\,r_1\,\mathbf{1}\cdot \mathbb{I}(r_2\ge GP) \tag{14} $$

其中 \(r_1,r_2\sim U(0,1)\),\(GP\) 为超参数,\(\mathbb{I}(\cdot)\) 为示性函数,\(\mathbf{1}\) 为全 1 向量。

进一步得到

$$ \boldsymbol{G}_0=\mathrm{GCP}\odot\left(\boldsymbol{C}_{eq}^{(iter)}-\boldsymbol{\lambda}\odot \boldsymbol{C}^{(iter)}\right) \tag{15} $$

以及

$$ \boldsymbol{G}=\boldsymbol{G}_0\odot \boldsymbol{F}^{(iter)} \tag{16} $$

3.7 平衡更新公式

项目核心更新式与源码注释中的 Eq.(16) 一致:

$$ \boldsymbol{C}^{(iter+1)}= \boldsymbol{C}_{eq}^{(iter)} + \left(\boldsymbol{C}^{(iter)}-\boldsymbol{C}_{eq}^{(iter)}\right)\odot \boldsymbol{F}^{(iter)} + \left(\frac{\boldsymbol{G}}{\boldsymbol{\lambda}}\cdot V\right)\odot \left(1-\boldsymbol{F}^{(iter)}\right) \tag{17} $$

其中 \(V\) 对应项目参数 v。更新后所有分量均会被截断到边界区间内。

3.8 收敛记录

若第 \(iter\) 轮的平衡池最优个体适应度为 \(f_{eq,1}^{(iter)}\),则程序记录的收敛曲线为

$$ g^{(iter)}=f_{eq,1}^{(iter)} \tag{18} $$

并以最优运行曲线与多运行平均统计的形式输出。

4. 算法流程

结合 EoCalculator.calculate_run_eo_once,本项目的 EO 求解流程可概括为:

  1. 解析问题模式,确定是基准函数优化还是上传代理优化。
  2. 初始化种群浓度向量,并设置 equilibrium pool 的 4 个候选槽位。
  3. 在每轮迭代中计算全部个体适应度,更新 Ceq1..4
  4. 执行 memory saving,回滚退化个体。
  5. 构造 \( \boldsymbol{C}_{eq,\mathrm{ave}} \) 并形成 equilibrium pool。
  6. 按式(12)至式(17)更新全部个体位置。
  7. 记录当前平衡池最优值作为收敛曲线。
  8. run_times>1,则对多次运行的最优值、均值和标准差进行统计。

5. 关键参数说明

  • pop_size:种群规模 \(N\)。
  • max_iter:最大迭代次数 \(T\)。
  • a1:指数项 \(F\) 的放缩参数,对应式(13)。
  • a2:时间控制项指数参数,对应式(12)。
  • gp:生成率门限参数 \(GP\),对应式(14)。
  • v:更新式中生成率项的幅度参数 \(V\),对应式(17)。
  • run_times:独立重复运行次数,用于输出多运行统计。
  • seed:随机种子,第 \(r\) 次运行使用 seed + r
  • objective_direction:仅在上传代理优化时使用,决定结果展示为最小化或最大化方向。

6. 评价指标与输出结果解释

设共有 \(R\) 次独立运行,第 \(r\) 次运行的最终最优值为 \(b_r\),则项目输出的汇总统计满足

$$ \bar{b}=\frac{1}{R}\sum_{r=1}^{R}b_r \tag{19} $$

$$ s_b=\sqrt{\frac{1}{R}\sum_{r=1}^{R}(b_r-\bar{b})^2} \tag{20} $$

其中 \(s_b\) 对应代码中的标准差统计(ddof=0)。同时,全部运行的收敛曲线会整理到 History_AllRuns,最佳运行曲线单独存入 History_BestRun,最佳运行对应的 equilibrium pool 会导出到 Equilibrium_Pool 工作表。

最终结果通常包括:

  • Best_Summary:最佳运行的最优值、均值、标准差、耗时和运行编号等摘要;
  • Best_Solution:最佳运行对应的最优解向量;
  • History_BestRun:最佳运行收敛曲线;
  • History_AllRuns:全部运行的迭代轨迹;
  • Equilibrium_Pool:最佳运行的平衡池候选向量;
  • 上传代理模式下额外包含边界明细、训练数据预览和代理模型误差。

论文结果部分建议以 Best_Summary 为主表报告 best_fitness / mean_best_fitness / std_best_fitness,并结合 History_BestRunHistory_AllRuns 说明收敛过程和稳定性。若需要解释 EO 的工程实现特征,可进一步引用 Equilibrium_Pool 说明最佳运行末期的平衡候选集;Best_Solution 则单独作为最优决策变量表呈现。

7. 论文写作模板

可在论文方法部分表述为:

“本文采用平衡优化算法对连续变量单目标问题进行求解。算法首先随机初始化候选解种群,并在每轮迭代中根据适应度更新 equilibrium pool,保留 4 个最优候选及其均值向量作为平衡状态参考。随后利用时间控制项、指数项和生成率项构造浓度更新公式,使个体围绕平衡状态进行搜索。为提高搜索稳定性,本文实现中加入了 memory saving 机制:若某个个体在当前代发生退化,则回滚至上一代状态。对于数据驱动问题,则先以随机森林回归器构造代理目标函数,再采用 EO 完成黑箱寻优。”

在结果部分可进一步写为:

“本文记录了 EO 在多次独立运行下的最优值、均值、标准差及收敛曲线,并输出最佳运行对应的 equilibrium pool、最优解向量和参数摘要,以支撑结果复现与算法行为分析。”

7.1 结果部分补充模板

若需把实验结果直接写入论文结果部分,可进一步表述为:

“表X给出了算法在当前问题上的最优目标值、平均最优值和标准差(如有多次独立运行),图X展示了收敛曲线变化。结果表明,该算法在迭代前期能够快速逼近优势区域,并在后期逐步趋于稳定,最终获得最优解 \(\boldsymbol{x}^*\) 及其对应目标值 \(f(\boldsymbol{x}^*)\)。对于上传代理优化场景,结合代理模型误差指标可认为该最优结果具有一定的数据驱动解释性。”

7.2 写作替换提示

为便于直接落稿,正文撰写时可将结果文件中的字段替换为以下论文措辞:

  • best_fitness 或结果汇总表中的最优值,可写为“最优目标函数值”或“最优适应度值”;
  • BestSolutionBestPositionBest_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. 实现说明与注意事项

  • 本实现适用于连续变量单目标优化,且核心求解器按最小化形式设计。
  • a1a2gpv 会显著影响平衡更新强度与收敛速度,应结合问题尺度调参。
  • equilibrium pool 不仅包含 4 个最优候选,还包含其平均向量;论文说明时不应漏写这一实现细节。
  • memory saving 是本项目的重要稳定机制,会影响实际迭代轨迹,与纯理论 EO 写法有所不同。
  • 上传代理优化实质上优化的是随机森林近似函数,样本覆盖不足时需结合 RMSE、MAE、\(R^2\) 指标谨慎解读最优结果。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Best_Summary 表可写为:表X EO 最佳运行汇总结果。
  • Best_Solution 表可写为:表X EO 最优解向量。
  • History_BestRun 表可写为:表X EO 最佳运行收敛曲线。
  • History_AllRuns 表可写为:表X EO 全部运行历史轨迹。
  • Equilibrium_Pool 表可写为:表X EO 最佳运行末期平衡池候选向量。

9.2 终审说明

  • 这篇文档结果结构已经较完整,正式落稿时应把 Best_Summary / History_BestRun / History_AllRuns 这些真实表名保持不变,不要改写成泛化的 Summary / Convergence
  • Equilibrium_Pool 是该实现区别于普通优化算法结果表的关键内容,若论文要体现 EO 机制,应优先引用该表。

9.3 全量强化补充

本次全量强化绑定的真实上传验证目录为 具体的算法3/优化与多目标/EO-平衡优化/results/manual_upload_verify_20260329_fixcheck。主结果文件为 EO_results.xlsx,实际工作表为 ParametersProcessed_InfoBest_SummaryBest_SolutionRun_BestHistory_BestRunHistory_AllRunsEquilibrium_PoolRaw_InfoChartsUploadedDataSurrogateMetrics

当前真实图文件为 charts/convergence_best.pngcharts/convergence_mean.png。论文中可分别写为“EO 最佳运行收敛曲线”和“EO 平均收敛曲线”;若只有一次运行,平均曲线与最佳曲线的解释应保持谨慎。

复现脚本为 repro_eo.py,输入口径为 INPUT_FILE = Path('repro_inputs/eo_sample.csv'),参数中显式包含 problem_mode = 'upload_surrogate'target_column = 'f_sphere'objective_direction = 'min' 与特征列 ['x1', 'x2', 'x3']。因此这篇文档在论文附录中应按“上传代理 EO 复现 + equilibrium pool 结果表”描述,不要省略 Equilibrium_Pool 这个实现特征。

10. 软件实现核查补充(2026-07)

本篇对应的软件源码目录是 具体的算法3/优化与多目标/EO-平衡优化。软件实现提供优化模式和上传数据代理优化模式;上传模式读取数值表并训练代理模型后,再由平衡优化器维护平衡池并搜索最优解。理论部分关于平衡池、指数项、生成率和浓度更新公式可以保留,但软件结果应按 EO_ParamsEquilibrium_PoolProblem.problem_mode 解释。

当前较新的代表性目录为 results/EO-平衡优化分析结果_20260517_103911-优化模式results/EO-平衡优化分析结果_20260517_103924-上传数据代理优化。主工作簿 EO_results_*.xlsx 在优化模式下包含 结果说明字段说明SummaryProblemEO_ParamsBoundsRun_SummaryHistory_MeanBest_SolutionEquilibrium_PoolCharts;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。与旧文中的 Best_Summary/History_BestRun/History_AllRuns 相比,当前较新导出更偏向统一的 Summary/Run_Summary/History_Mean 命名,写交付说明时应以当前实际工作簿为准。

图表目录形如 EO_results_时间戳_plots/,稳定输出包括 convergence_best.pngconvergence_mean.png,分别用于最佳运行与平均收敛曲线解释。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/eo_sample.xlsx,复现结果进入 repro_outputs/Equilibrium_Pool 是 EO 的关键实现特征,文档和论文中应保留为单独结果表解释。