PyGAD使用指南
以下是PyGAD中GA
类构造函数所有参数的详细说明表格,结合参数功能和实际使用场景(如你的RAG重排序任务)进行解释:
参数名称 | 类型/可选值 | 默认值 | 作用描述 |
---|---|---|---|
基本迭代设置 | |||
num_generations | 整数 | - | 算法迭代的总代数。例如设置为30,表示种群会经历30轮进化(选择、交叉、变异)。在RAG任务中,代数越多可能找到更优文本块组合,但计算成本越高。 |
num_parents_mating | 整数 | - | 每代中参与交配的父代个体数量。例如10表示从当前种群中选10个优质个体作为父母生成后代。值越大,后代多样性可能越高,但计算量增加。 |
适应度函数设置 | |||
fitness_func | 函数/方法 | - | 评估个体(解决方案)优劣的函数。需返回一个数值(适应度),值越高表示个体越优。在你的RAG任务中,该函数需综合文本块的相关性、多样性等指标(如_rag_fitness_function )。 |
fitness_batch_size | 整数/None | None | 适应度计算的批次大小。若为None 或1,逐个计算个体适应度;若为3,则每3个个体批量计算。可用于优化大规模种群的计算效率(如结合批量推理加速相关性评分)。 |
种群初始化设置 | |||
initial_population | 二维数组(形状为(sol_per_pop, num_genes) ) | None | 用户自定义的初始种群。若为None ,则由算法自动生成。在RAG任务中,可手动初始化一批“合理”的文本块选择方案(如优先选相关性高的文本块),加速收敛。 |
sol_per_pop | 整数 | None | 种群大小(每代的个体数量)。例如50表示每代有50个文本块选择方案。值越大,搜索范围越广但计算成本越高。 |
num_genes | 整数 | None | 每个个体的基因数量(变量数)。在你的RAG任务中,等于初始召回的文本块数量(如20,每个基因对应“是否选择该文本块”的二进制值)。 |
init_range_low | 数值 | -4 | 初始种群基因的随机生成范围下限(适用于连续值基因)。若基因是二进制(如你的场景),此参数无效。 |
init_range_high | 数值 | 4 | 初始种群基因的随机生成范围上限(适用于连续值基因)。若基因是二进制,此参数无效。 |
gene_type | 数据类型(如int /float /np.int32 等) | float | 基因的数据类型。在你的RAG任务中需设为int (因为基因是0/1二进制值)。 |
父代选择设置 | |||
parent_selection_type | 字符串("sss" /"rws" /"tournament" /"rank" 等) | "sss" | 父代选择策略: - "sss" :稳定状态选择- "rws" :轮盘赌选择- "tournament" :锦标赛选择(常用,配合K_tournament )- "rank" :基于排名选择。在RAG任务中,锦标赛选择("tournament" )较常用,平衡选择压力和多样性。 |
keep_parents | 整数(-1/0/正整数) | -1 | 保留到下一代的父代数量: - -1 :保留所有父代- 0 :不保留父代- 正整数:保留指定数量的父代。若 keep_elitism >0,则此参数无效。 |
keep_elitism | 整数(0/正整数) | 1 | 保留到下一代的“精英个体”数量(每代中适应度最高的个体)。例如1表示保留最优个体到下一代,防止优秀方案丢失。在RAG任务中建议设为1~2,加速收敛。 |
K_tournament | 整数 | 3 | 锦标赛选择的规模(从K个个体中随机选1个最优者作为父代)。K越大,选择压力越大(更倾向于选优质个体)。在RAG任务中常用3~5。 |
交叉操作设置 | |||
crossover_type | 字符串("single_point" /"two_points" /"uniform" 等)或None | "single_point" | 交叉方式(基因重组策略): - "single_point" :单点交叉- "two_points" :两点交叉(你的代码中使用,适合二进制基因)- "uniform" :均匀交叉- None :不进行交叉。交叉是产生新个体的主要方式,影响种群多样性。 |
crossover_probability | 浮点数(0~1)或None | None | 个体被选中进行交叉的概率。例如0.8表示80%的父代个体参与交叉。若为None ,则默认所有父代参与交叉。 |
变异操作设置 | |||
mutation_type | 字符串("random" /"swap" /"inversion" 等)或None | "random" | 变异方式(基因随机变化策略): - "random" :随机替换基因值(你的代码中使用,适合二进制基因)- "swap" :交换两个基因位置- "inversion" :反转基因片段- None :不进行变异。变异用于维持种群多样性,避免过早收敛。 |
mutation_probability | 浮点数(0~1)或长度为2的列表(自适应变异)或None | None | 基因被选中变异的概率。例如0.1表示每个基因有10%概率变异。若设置,则mutation_percent_genes 和mutation_num_genes 失效。在二进制基因(0/1)中,此参数控制变异频率。 |
mutation_by_replacement | 布尔值 | False | 仅用于mutation_type="random" :- True :直接替换基因为新值(如0→1或1→0,适合二进制基因)- False :在原基因值上叠加随机值(适合连续值基因)。你的RAG任务中需设为True 。 |
mutation_percent_genes | 字符串("default" )或浮点数(0~100) | "default" (10%) | 每代中变异基因的百分比。例如10表示10%的基因会被变异。若mutation_probability 或mutation_num_genes 已设置,则此参数无效。 |
mutation_num_genes | 整数或None | None | 每代中变异基因的具体数量。例如2表示每代变异2个基因。若mutation_probability 已设置,则此参数无效。 |
random_mutation_min_val | 数值 | -1.0 | 随机变异时的数值范围下限(适用于连续值基因)。二进制基因场景中无效。 |
random_mutation_max_val | 数值 | 1.0 | 随机变异时的数值范围上限(适用于连续值基因)。二进制基因场景中无效。 |
基因约束与空间 | |||
gene_space | 列表(离散值)或字典(每个基因独立空间)或None | None | 基因的可能取值范围(离散空间)。例如[0,1] 表示基因只能是0或1(你的RAG任务中需设置,确保基因是二进制)。若为字典,可指定每个基因的独立空间(如[0,1,2] 表示基因可取值0、1、2)。 |
gene_constraint | 列表(每个基因的约束函数)或None | None | 基因的约束条件(每个基因对应一个函数)。例如限制基因值必须为偶数。在RAG任务中可用于强制“选中的文本块总数不超过5”(但你的代码用惩罚项实现,更灵活)。 |
sample_size | 整数 | 100 | 为满足gene_constraint 时的抽样数量(从样本中选符合约束的基因值)。样本量越大,越可能找到符合约束的值,但计算量增加。 |
allow_duplicate_genes | 布尔值 | True | 是否允许个体中存在重复基因值。例如False 表示一个个体的基因值必须唯一(适用于需避免重复选择的场景,但你的RAG任务中允许重复选择同一文本块吗?不,因此需设为True ,但实际通过二进制0/1确保每个文本块只被选一次)。 |
回调函数 | |||
on_start | 函数/方法或None | None | 算法开始前触发的函数(仅一次)。可用于初始化日志、打印参数等。 |
on_fitness | 函数/方法或None | None | 每代适应度计算完成后触发的函数。可用于监控适应度分布、筛选异常值等。 |
on_parents | 函数/方法或None | None | 父代选择完成后触发的函数。可用于分析父代特征(如优质文本块的共性)。 |
on_crossover | 函数/方法或None | None | 交叉操作完成后触发的函数。可用于验证交叉后个体的有效性(如是否符合文本块数量约束)。 |
on_mutation | 函数/方法或None | None | 变异操作完成后触发的函数。可用于统计变异对个体适应度的影响。 |
on_generation | 函数/方法或None | None | 每代进化完成后触发的函数。你的代码中用于打印“第X代最优适应度”,方便监控收敛过程。若函数返回"stop" ,可提前终止算法。 |
on_stop | 函数/方法或None | None | 算法停止时触发的函数(无论是否完成所有代数)。可用于保存最终结果、生成报告等。 |
保存与日志 | |||
save_best_solutions | 布尔值 | False | 是否保存每代的最优解到best_solutions 属性。便于事后分析进化过程,但可能占用大量内存(尤其代数多或基因数量大时)。 |
save_solutions | 布尔值 | False | 是否保存每代的所有解到solutions 属性。内存消耗大,仅建议小规模实验使用。 |
suppress_warnings | 布尔值 | False | 是否抑制警告信息(如参数冲突、无效值等)。建议调试时设为False ,正式运行时设为True 。 |
logger | logging.Logger 对象或None | 默认日志对象 | 用于记录算法运行信息的日志对象。可自定义日志格式、输出位置(如文件),方便实验复现和调试。 |
其他设置 | |||
stop_criteria | 字符串或列表(如"saturate_50" 表示连续50代适应度不变则停止)或None | None | 提前停止进化的条件。例如"saturate_10" 表示连续10代最优适应度无提升时停止,节省计算资源。 |
parallel_processing | 整数(线程数)或元组(类型, 数量) (如("thread", 4) )或None | None | 并行计算设置: - None :不并行- 整数N:使用N个线程 - ("process", 4) :使用4个进程。可加速适应度计算(如批量计算文本块相关性)。 |
random_seed | 整数或None | None | 随机数种子。设置后可复现实验结果(每次运行的进化路径相同),便于对比不同参数的效果(如你的RAG任务中对比不同适应度函数权重的影响)。 |