在演化计算中,多样性是算法有效的前提:只有维持足够多的候选解,选择压力才不会过早把种群挤进局部最优。但多样性同时意味着庞大的计算量——一次运行往往需要评价数万乃至数百万个候选解。当候选被写成普通的对象数组,用逐项循环把它们一个个送去做评价时,计算的大部分时间都消耗在逐项调度与宿主语言的控制流上,而不是真正的数值运算,这正是传统串行 CPU 循环在处理数万次候选评价时效率低下的根本原因。
表达方式的跃迁:从候选列表到张量化计算图
EvoX 带来的改变不是某个算子的局部加速,而是演化过程表达方式的改变:从逐个候选的列表式处理,转向以张量为一等公民的批量计算。候选集合不再散落在对象数组里,而是与评价结果、算法状态一起被统一组织为张量,使它们可以整体参与运算。
- 候选张量:把整代候选写成形状为 [种群规模, 解维度] 的张量。此时“一个候选”只是张量中的一行,而不再是一个独立的宿主语言对象。
- 批量算子:变异等操作直接作用于整个种群,一次调用即完成对全部候选的更新,而不是循环调用 N 次。
- 批量评价:以 evaluate(候选张量) 的形式一次性得到整代的评价结果,评价的数量单位从“个”变成“批”。
- 计算图:选择与状态更新不再只是串行控制逻辑,而是图中的节点,因而获得算子融合、并行调度等编译优化机会。
两种写法的对照
列表式写法近似于:逐个取出候选、逐个评价、逐个比较并更新状态——每一步都依赖宿主语言的循环,难以整体优化。张量化写法则是:候选张量 → 变异 → 评价 → 选择 → 状态更新,整条链路由张量运算组成并表达为一张计算图,编译器可以对整张图做融合与设备调度。注意:算法的逻辑(变异分布、选择压力)并没有被改写,被改写的是表达方式。
核心术语
张量化计算——以张量为最小处理单位,让变异、评价、选择、状态更新都以批量形式作用于整个种群,并允许这些批量运算进入计算图接受编译优化。本页的关键跃迁可以记作一句话:从“候选列表”到“张量化计算图”。