算法参数说明#
每个公开算法的英文 API 页面都说明构造参数的类型、形状、默认值及当前实现中的用途。 本页用中文解释共同约定与容易混淆的参数。完整类名见算法目录。 “正数预算”等要求属于使用约定,不表示每个构造函数都会主动校验所有输入。 具体签名应以相应类的 API 页面为准。
种群、目标、边界与设备#
参数 |
类型与形状 |
含义 |
|---|---|---|
|
正整数 |
请求的候选解数量。部分参考向量算法会按实际采样数调整,请读取 |
|
整数,通常至少为 2 |
最小化目标的个数,须匹配问题返回目标张量的列数,与决策维数不同。 |
|
浮点张量, |
每个决策变量的下界、上界。形状、dtype、设备须一致,并逐元素满足 |
|
显式支持时为 |
暴露该参数的构造函数中, |
|
支持时为额外命名设置 |
通常不会读取,包括未识别的 |
显式支持 device 的构造函数是 HypE、IBEA、LMOCSO、MOEAD、NSGA2、NSGA3、
RVEA、RVEAa 和 TensorMOEAD。其他算法需要先将两个边界张量放到目标设备,再构造算法。
初始化后,常见状态 pop 的决策维数为 D,fit 的目标维数为 n_objs。
算法还可能保存档案、稀疏掩码、速度、参考向量或 NaN 占位槽;读取状态时按算法语义筛选有效结果。
step() 原地更新状态并返回 None,调用前需要先执行 workflow.init_step()。
当前这组算法中,文档说明的 NSGA2 评估路径支持 (fitness, constraint_violation)。
其他当前实现要求返回目标张量。接入约束问题前请阅读约束指南。
分解与差分进化#
以下 N 表示权重采样后的实际种群数量。
参数 |
使用算法及默认值 |
用途与限制 |
|---|---|---|
|
|
最近权重向量构成的交配邻域大小,包含自身;应为正数,超过 |
|
|
自动取 |
|
|
自动取 |
|
|
在局部邻域中抽取交配父代的概率,范围为 |
|
|
单个子代最多替换的已有解数,与交配邻域大小是两个设置。 |
|
|
自动取 |
|
|
外部档案容量; |
|
|
正的差分步长系数,乘在父代决策向量的差上。 |
|
|
二项交叉中选择变异向量分量的概率,范围为 |
|
|
构造函数接受并保存,但当前未使用。该实现直接生成差分子代,再施加多项式变异,没有二项交叉。 |
|
|
分别表示受限排名允许的最近参考权重数,或更新时按余弦相似度考虑的子问题数。应为正数,且不能超过可用向量数量。 |
|
|
奖励窗口的记录条数,自动值为 |
|
|
|
|
|
分别用于已有解比较和合格子代选择的两个聚合函数名称。可选 |
调度、选择与稀疏性#
参数 |
使用算法及默认值 |
用途与限制 |
|---|---|---|
|
|
正的代数调度上限,用于自适应或惩罚系数;终止循环由调用者控制。 |
|
|
正的评估量调度上限。 |
|
|
|
|
|
正的参考向量调整频率,实际间隔为 |
|
|
轨迹缓存容量,含初始条目。后续步骤数应小于该容量,因为缓存不会循环覆盖。 |
|
|
指数型指标适应度的正缩放系数;更小的值放大指标差异的影响。 |
|
|
每次超体积估计的正蒙特卡洛样本数;增加样本降低估计噪声,也增加计算成本。 |
|
|
每个目标上的正网格划分数;更大的值产生更细的目标空间网格。 |
|
|
|
|
|
对角度接近的一对解进行淘汰时,归一化收敛分数差的阈值。 |
|
|
采用 |
|
|
所有目标共用的正加法网格宽度,以目标值的单位度量。 |
|
|
初始决策中零分量比例的两个端点,满足 |
|
|
正的决策变量分组数,也决定权重向量维数;通常不大于 |
|
|
目标空间偏好点,形状为 |
|
|
|
LSMOF 还会从 **kwargs 读取参考解数 wD=5、权重候选数 SubN=20、
决策重构尺度 wmax=0.1 和评估调度上限 max_fe=10000。
第一阶段每步评估 2 * wD * SubN 个决策向量。数量参数应为正数,且须有足够的不同参考解满足 wD。
wmax 缩放沿单位方向的偏移,并非评估预算比例;初始评估计入阶段切换计数。
自定义算子接口#
参数 |
调用约定 |
默认值与例外 |
|---|---|---|
|
|
暴露该参数时, |
|
|
默认使用 |
|
|
交配选择,默认 |
|
|
环境选择。RVEA 两版默认使用 EvoMO 的 |
|
构造签名接受该参数 |
当前实现将其覆盖为 |
|
构造函数保存该参数 |
当前 |
MOEADFRRMAB 示例#
下面的示例将边界显式放到所选设备,使用自动窗口大小,执行三个工作流步骤, 并输出实际种群数与窗口大小。这些步骤不构成相同评估预算的性能对比。
"""Show MOEADFRRMAB's effective population and reward-window sizes."""
import torch
from evomo.algorithms import MOEADFRRMAB
from evomo.problems.numerical import DTLZ2
from evomo.workflows import UnifiedWorkflow
def main():
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
torch.set_default_device(device)
torch.manual_seed(42)
problem = DTLZ2(d=12, m=3)
algorithm = MOEADFRRMAB(
pop_size=100,
n_objs=problem.m,
lb=torch.zeros(problem.d, device=device),
ub=torch.ones(problem.d, device=device),
T=20,
delta=0.9,
nr=2,
window_size=None,
)
workflow = UnifiedWorkflow(algorithm, problem, device=device)
workflow.init_step()
for _ in range(3):
workflow.step()
assert torch.isfinite(workflow.algorithm.fit).all()
print(f"Population shape: {tuple(workflow.algorithm.pop.shape)}")
print(f"Reward window entries: {workflow.algorithm.W}")
print(f"Fitness shape: {tuple(workflow.algorithm.fit.shape)}")
if __name__ == "__main__":
main()
完整构造字段与生命周期方法见 MOEADFRRMAB API。