无政府社会优化(ASO)算法:从无序社会行为到优化框架的概念铺垫(基础篇)
🜂

无政府社会优化(ASO)算法:从无序社会行为到优化框架的概念铺垫(基础篇)

(1/3)·当稳定成为陷阱,一群非理性个体反而能逃出局部最优,这套算法凭什么?

偏理论 第 1/3 篇
不少交易者把群体智能算法当成黑箱圣杯,以为 PSO、ACO 换套名字就能稳吃市场。ASO 偏偏反其道——用善变、非理性的个体去探最差位置,你若不懂它底层的无序社会假设,直接套用只会把回测变成灾难。

◍ 用无政府社会优化给 EA 找参数

无政府社会优化(ASO)是一种受群体无政府状态启发的启发式搜索算法,在 MT5 中常被用作 EA 参数寻优的替代方案,相比网格搜索更省算力。 该算法把每个候选参数集看作一个「个体」,通过个体间的非中心化竞争与随机扰动来跳出局部最优;在 MT5 的策略测试器里可借自定义优化 pass 逻辑接入。 公开示例帖记录:2025 年 3 月 17 日发布的 ASO 测试demo,至发文时累计浏览 726 次、评论 0 条,说明该思路在零售交易者中仍属小众验证阶段。 想确认效果,直接在 MT5 打开策略测试器,载入带自定义优化接口的 EA,把优化模式切到对应 ASO 实现,跑一轮 EURUSD 的 H1 回测看参数分布。

「从无序社会里长出的优化算法」

把人类社会行为写成优化算法,多数文献盯着组织良好的群体,结果受限于「个体无法真正独立决策」这一事实——在标准社会里,单靠自己很难在给定时段彻底改善处境。2011 年 Ahmadi-Javid 提出的无政府社会优化(ASO)反其道而行,借用了没有中央权力、靠自由协商互动的异常社群结构。 ASO 把参与者建模成一群善变、爱冒险、不偏好稳定且常显非理性的个体。探索阶段他们会主动移向之前访问过的最差位置,成员间的无政府行为强度随彼此处境差异拉大而增加。这种刻意的反常游走,让算法更可能跳出局部最优陷阱。 该框架不挑问题类型,连续与离散优化都能直接套。对做参数寻优的交易者来说,它提供了一条不同于 PSO、ACO 的思路:用「失控」换覆盖度,代价是收敛节奏更难预判,实盘调参前建议在 MT5 策略测试器里先跑通离散变量版本。

ASO 算法的结构拆解与 MT5 实现起点

ASO(Anarchic Social Optimization)把粒子群的速度方程和无政府社会行为揉在一起,核心不是单纯追全局最优,而是靠三个指数实时切换移动策略。它先建一个 popSize 规模的成员种群,每个成员随机落位并记住自己的 pBest 与前一位置,之后每一轮迭代都重算 FI、EI、II 再决定怎么走。 FI 反映个体对现状的不满程度,EI 看全局最优偏离带来的社会多样性,II 看自身相对 pBest 的偏移。原文给的两条 FI 方程分别是 (kFI)i = α - α(f(Xi(k))-f(Pi(k)))/(f(Xi(k*))-f(Xi(k))) 与用 f(G(k)) 替代分母项的形式;EI 为 exp(-θi(f(G)-f(Xi(k)))),II 为 1-exp(-δi·kD)。alpha 取 [0,1],theta、delta 为正,kD 常用目标函数值变化率衡量。 策略选择很直白:FI 同时大于 EI、II 就走 CurrentMP(带惯性权重 ω 和加速度 λ1、λ2 的 PSO 式速度更新);EI 最大就 SocietyMP(和社会中随机成员按 0.5 概率交叉坐标);否则 PastMP(按 0.5 概率回退到 prevPosition)。此外每轮以 anarchyProb 概率把位置完全随机重撒,打破局部粘连。 参数不是固定的:anarchyProb 随迭代逐渐降低,算 FI 的 alpha 逐步抬升,ω 逐步衰减。在 MT5 里可用 S_ASO_Member 结构存单个成员——pPrev[]、pBest[] 存坐标数组,pBestFitness 初值设 -DBL_MAX;C_AO_ASO 类从 C_AO 继承,Init 内 ArrayResize(member, popSize) 决定社会成员数,StandardInit 失败直接返回 false。 图例里有个可验证现象:当个体当前最佳(如 200)远劣于全体最佳(1000)时,FI 曲线近似线性;两者越接近,曲线非线性越强。开 MT5 把 theta、delta 从 0.01 扫到 0.9,能直接复现外部/内部不规则指数的依赖图。

◍ ASO 种群移动与个体记忆的实现骨架

ASO 算法的核心在 Moving 方法里:首次调用时若 revision 为 false,会用 rangeMin~rangeMax 内的随机值填 a 数组,并把初值存进 member[i].pPrev[c] 留底,随后把 revision 置 true。之后每次迭代,对每个成员的每个坐标先存旧值,再抽 u.RNDprobab();当随机数小于 anarchyProb(默认 0.1)就直接随机重置该坐标,否则按 fi/ei/ii 三个指标分别走 CurrentMP、SocietyMP、PastMP 三种位移逻辑,最后用 u.SeInDiSp 归一化。 Revision 方法负责捡漏最优解:遍历 popSize(默认 50)个成员,比较 a[i].f 与 fB、member[i].pBestFitness,刷新个人最佳并复制坐标到 pBest,循环结束若 ind≥0 就把全局最优坐标写进 cB。CalculateFI/EI/II 则分别用「个人-当前」「全局-个人」「自身最佳-当前」的适应度差做归一,EI 和 II 输出被压在 0~1 之间,1 代表最大改进预期。 CurrentMP 的位置更新公式值得直接抄进 MT5 验证:velocity = omega*(agent.c - pBest) + lambda1*r1*(pBest - agent.c) + lambda2*r2*(cB - agent.c),其中 omega=0.7、lambda1=lambda2=1.5。SocietyMP 在群体与个人间随机选向,PastMP 在当前最佳与前态间随机选向,两者共同平滑了搜索轨迹。外汇与贵金属参数优化属高风险实验,回测过拟合概率偏高,参数请先在历史数据小样本跑通再上实盘。

MQL5 / C++
class=class="str">"cmt">//——————————————————————————————————————————————————————————————————————————————
class="kw">struct S_ASO_Member
{
   class="type">class="kw">double pPrev [];     class=class="str">"cmt">// Previous position
   class="type">class="kw">double pBest  [];     class=class="str">"cmt">// Personal best position
   class="type">class="kw">double pBestFitness; class=class="str">"cmt">// Personal best fitness
   class="type">void Init(class="type">int coords)
   {
      ArrayResize(pBest, coords);
      ArrayResize(pPrev, coords);
      pBestFitness = -DBL_MAX;
   }
};
class=class="str">"cmt">//——————————————————————————————————————————————————————————————————————————————
class=class="str">"cmt">//——————————————————————————————————————————————————————————————————————————————
class C_AO_ASO : class="kw">public C_AO
{
  class="kw">public: class=class="str">"cmt">//--------------------------------------------------------------------
  ~C_AO_ASO() { }
  C_AO_ASO()
  {
     ao_name = "ASO";
     ao_desc = "Anarchy Society Optimization";
     ao_link = "[MQL5官方文档]
     popSize     = class="num">50;     class=class="str">"cmt">// Population size
     anarchyProb = class="num">0.1;    class=class="str">"cmt">// Probability of anarchic behavior
     omega       = class="num">0.7;    class=class="str">"cmt">// Inertia weight
     lambda1     = class="num">1.5;    class=class="str">"cmt">// Acceleration coefficient for P-best
     lambda2     = class="num">1.5;    class=class="str">"cmt">// Acceleration coefficient for G-best
     alpha       = class="num">0.5;    class=class="str">"cmt">// Parameter for FI calculation
     theta       = class="num">1.0;    class=class="str">"cmt">// Parameter for EI calculation
     delta       = class="num">1.0;    class=class="str">"cmt">// Parameter for II calculation
     ArrayResize(params, class="num">8);
把异常行为诊断交给小布
这些社会行为模型的参数敏感性,小布盯盘的 AIGC 已内置扫描,打开对应品种页即可看到策略在不同扰动下的退化曲线,你只管判断要不要信。

常见问题

PSO 依赖个体与群体的历史最优牵引,偏向收敛;ASO 引入无政府个体,会主动移向曾访问过的最差位置,用非理性探索换更低的局部最优概率。
层级社会中成员无法真正独立决策,也难以在短期内彻底改善自身处境,个体自由度受限,难以支撑纯个体驱动的搜索机制。
原文给出的统一 ASO 框架设计上可迁移到连续与离散搜索空间,但具体编码映射需在实现层根据问题维度重写位置与邻域算子。
可以,小布盯盘的 AIGC 模块内置了多类优化算法的鲁棒性视图,ASO 相关的参数扰动与退化分析在对应品种页直接可见,省去你自己搭环境的重复劳动。
算法中成员间处境差距越大,彼此无政府行为的随机扰动越强,这对应搜索后期扩大多样性、避免集体陷入同一洼地的机制。