
科学计算【免费下载链接】scikit-opt主流群体智能算法差分进化算法、遗传算法、粒子群算法、模拟退火算法、蚁群算法、免疫优化算法、鱼群算法解决常规最优化问题以及旅行商问题项目地址https://gitcode.com/guofei9987/scikit-opt点击查看免费下载本文以 docs/en/args.md 为核心骨架逐表梳理 scikit-opt 中遗传算法GA、旅行商遗传算法GA_TSP、粒子群算法PSO、差分进化算法DE、模拟退火算法SA、蚁群算法ACA_TSP、免疫优化算法IA_TSP与人工鱼群算法AFSA的全部输入参数、默认值、输出属性并结合 sko 目录下的源码实现讲解每个参数背后的运行原理。读完本文你将能够不看文档直接读懂并调优任何一个求解器的参数并根据输出属性提取收敛曲线与历史轨迹。1. 最快的参数查阅方式help() 内省scikit-opt 的所有求解器类都带有完整的 NumPy 风格 docstring因此在任何 Python 交互环境IPython、Jupyter中直接使用help()或?即可查看参数细节、属性说明与使用示例import sko help(sko.GA.GA) help(sko.GA.GA_TSP) help(sko.PSO.PSO) help(sko.DE.DE) help(sko.SA.SA) help(sko.SA.SA_TSP) help(sko.ACA.ACA_TSP) help(sko.IA.IA_TSP) help(sko.AFSA.AFSA)其中help(sko.SA.SA)与help(sko.SA.SA_TSP)分别对应连续优化与 TSP 两种形态的模拟退火。所有类的 docstring 中均包含 Parameters、Attributes 与 Examples 三段例如 sko/GA.py 中GA的 docstring 明确列出了Lind每维变量对应的基因段数、generation_best_X每代最优解等属性以及指向examples/demo_ga.py的示例说明。2. GA遗传算法的输入参数与编码原理参数默认值含义func必填目标函数求极小值n_dim必填目标函数的维度输入参数的个数size_pop50种群规模max_iter200最大迭代次数prob_mut0.001变异概率lb-1变量下界可为 int / float / listub1变量上界可为 int / float / listconstraint_eq()等式约束函数元组constraint_ueq()不等式约束函数元组precision1e-7精度可为 int / float / listn_processes0进程数0 表示使用全部 CPU从 sko/GA.py 的GA.__init__可以看到文档表格之外还有两个实际存在的参数early_stopNone连续 N 代最优值不变则提前终止与n_processes0。以下是几个参数在源码层面的关键细节size_pop必须为偶数GeneticAlgorithmBase在初始化时直接断言assert size_pop % 2 0sko/GA.py因为锦标赛选择与两点交叉都以配对为单位进行。lb/ub支持标量或向量内部执行np.array(lb) * np.ones(self.n_dim)完成广播因此传入lb-1等价于lb[-1,-1,...]传入长度等于n_dim的 list 则可实现逐维独立边界。precision决定染色体长度每个变量的基因段长度由Lind_raw np.log2((ub - lb) / precision 1)计算并向上取整得到Lind整条染色体的总长度len_chrom sum(Lind)sko/GA.py。精度越高值越小基因段越长搜索空间越大。当precision为整数且Lind_raw非整数时算法会自动扩展上界ub_extend使取值总数恰好等于2^n即int_mode分支sko/GA.py。约束以罚函数实现当传入constraint_eq或constraint_ueq时x2y()计算Y Y_raw 1e5 * penalty_eq 1e5 * penalty_ueqsko/GA.py其中等式约束要求ceq[i] 0不等式约束要求c[i] 0。违反约束的解会被施加固定系数1e5的巨大惩罚从而在排序时被淘汰。n_processes的底层实现所有目标函数都会经过 sko/tools.py 中的func_transformer包装n_processes0时创建不限制大小的线程/进程池Pool()默认取全部 CPU 核心并通过pool.map并行批量求值。该工具函数同时支持set_run_mode(func, vectorization | multithreading | multiprocessing | cached | joblib | common)六种运行模式可参见 docs/en/speed_up.md 与examples/demo_ga_udf.py。一个完整的最小示例来源examples/demo_ga.pyfrom sko.GA import GA def demo_func(p): x1, x2, x3 p return x1 ** 2 (x2 - 0.05) ** 2 x3 ** 2 ga GA(funcdemo_func, n_dim3, size_pop50, max_iter800, lb[-1, -10, -5], ub[2, 10, 2], precision1e-7) best_x, best_y ga.run() print(best_x:, best_x, \n, best_y:, best_y)GA 还支持通过ga.to(device)将染色体与变异、交叉算子迁移到 PyTorch 张量上获得并行加速见 sko/GA.py 与 examples/demo_ga_gpu.py以及EGA精英保留遗传算法新增n_elitist参数和RCGA实数编码遗传算法新增prob_cros交叉概率参数两个变体详情可参考 docs/en/more_ga.md。3. GA_TSP面向旅行商问题的遗传算法参数默认值含义func必填目标函数一条路径的代价如总路程n_dim必填城市数量size_pop50种群规模max_iter200最大迭代次数prob_mut0.001变异概率与普通 GA 的最大区别在于染色体编码方式GA_TSP的染色体是城市编号的排列每个个体就是一条回路由crtbp()中np.random.rand(...).argsort(axis1)生成sko/GA.py。算子也完全不同——交叉采用PMX部分映射交叉crossover_pmx变异采用逆转突变mutation_reversesko/GA.py。此外GA_TSP.run()采用了父代 子代合并后择优的精英保留策略每代将父代染色体与交叉变异后的子代拼接评估后只保留代价最小的size_pop个个体进入下一代sko/GA.py因此它天然不会退化且无需lb/ub/precision等连续变量相关参数。典型调用完整代码见 examples/demo_ga_tsp.pyimport numpy as np from scipy import spatial from sko.GA import GA_TSP num_points 8 points_coordinate np.random.rand(num_points, 2) distance_matrix spatial.distance.cdist(points_coordinate, points_coordinate, metriceuclidean) def cal_total_distance(routine): num_points, routine.shape return sum([distance_matrix[routine[i % num_points], routine[(i 1) % num_points]] for i in range(num_points)]) ga_tsp GA_TSP(funccal_total_distance, n_dimnum_points, size_pop50, max_iter200, prob_mut0.001) best_points, best_distance ga_tsp.run()4. PSO粒子群算法的参数与速度更新参数默认值含义func必填目标函数n_dim必填目标函数的维度pop40粒子数量源码默认值见下max_iter150最大迭代次数源码默认值见下lb-1e5变量下界源码默认值见下ub1e5变量上界源码默认值见下w0.8惯性权重c10.5认知参数个体学习因子c20.5社会参数群体学习因子constraint_ueq()不等式约束n_processes0进程数0 表示使用全部 CPU需要特别说明args.md 表格中 PSO 的size_pop50 / max_iter200 / lbNone / ubNone与 sko/PSO.py 的实际签名不完全一致——源码中 PSO 使用参数名pop默认 40注释说明沿用 GA 的语义max_iter默认为 150lb/ub默认为 ±1e5。实际使用时以源码签名为准且参数名应写作pop而非size_pop。PSO 的核心更新逻辑在 sko/PSO.py# 速度更新V w*V c1*r1*(pbest_x - X) c2*r2*(gbest_x - X) self.V self.w * self.V \ self.cp * r1 * (self.pbest_x - self.X) \ self.cg * r2 * (self.gbest_x - self.X) # 位置更新后裁剪到边界 self.X self.X self.V self.X np.clip(self.X, self.lb, self.ub)w惯性权重控制粒子保持原有飞行速度的程度越大越偏向全局探索越小越偏向局部收敛c1认知参数粒子向自身历史最优pbest_x学习的权重c2社会参数粒子向全局最优gbest_x学习的权重。三者共同决定种群的探索—开发平衡这一公式正是 Kennedy 与 Eberhart 于 1995 年提出的经典 PSO 形式PSO 类 docstring 中给出了完整的数学定义与文献引用sko/PSO.py。PSO 还有一些文档表格之外但源码中确实存在的特性不等式约束update_pbest中只有满足全部constraint_ueq即c(x) 0的粒子才允许更新个体最优sko/PSO.py因此约束是以可行性过滤而非罚函数方式处理的与 GA 不同提前停止run(max_iterNone, precisionNone, N20)支持传入precision当连续 N 代所有粒子pbest_y的极差小于precision时提前终止sko/PSO.pyverbose设为True时每代打印Iter: k, Best fit: ...record_mode置为True后逐代记录每个粒子的位置、速度与函数值详见第 10 节输出属性。from sko.PSO import PSO def demo_func(p): x1, x2 p return x1 ** 2 (x2 - 0.05) ** 2 pso PSO(funcdemo_func, n_dim2, pop40, max_iter150, lb[-1, -1], ub[1, 1], w0.8, c10.5, c20.5) pso.run() print(best_x is, pso.gbest_x, best_y is, pso.gbest_y)完整的可运行示例见 examples/demo_pso.py更多调参与可视化含动画绘制见 examples/demo_pso_ani.py 与 docs/en/more_pso.md。5. DE差分进化算法的参数与变异策略参数默认值含义func必填目标函数n_dim必填目标函数的维度size_pop50种群规模max_iter200最大迭代次数prob_mut0.3交叉概率源码默认值见下F0.5变异系数lb-1变量下界ub1变量上界constraint_eq()等式约束constraint_ueq()不等式约束n_processes0进程数0 表示使用全部 CPU注意 args.md 表格中 DE 的prob_mut0.001与 sko/DE.py 的实际签名不一致DE 中prob_mut默认值是0.3且它扮演的角色是交叉概率而非变异概率DE继承自GeneticAlgorithmBase但覆写了变异与交叉的实现。DE 的三种操作在 sko/DE.py 中依次实现变异差分向量对每个个体i随机抽取三个互不相同的个体r1, r2, r3生成变异向量V[i] X[r1] F * (X[r2] - X[r3])。若变异结果越出[lb, ub]则用边界范围内的均匀随机数替换。F是缩放因子越大搜索步长越大源码注释提示固定F易早熟可替换为自适应值交叉按位生成mask rand prob_mut试验向量U np.where(mask, V, X)即每个维度以prob_mut概率取变异值选择贪心比较目标值X优于U则保留X否则接受U保证每代种群不会变差。from sko.DE import DE def demo_func(p): x1, x2, x3 p return x1 ** 2 (x2 - 0.05) ** 2 x3 ** 2 de DE(funcdemo_func, n_dim3, size_pop50, max_iter800, lb[-1, -10, -5], ub[2, 10, 2], F0.5, prob_mut0.3) best_x, best_y de.run()可运行示例见 examples/demo_de.py。6. SA 与 SA_TSP模拟退火的温度参数体系6.1 SA连续优化默认 SAFast参数默认值含义func必填目标函数x0必填初始点长度等于n_dim的数组T_max100最高温度初始温度T_min1e-7最低温度终止温度L300链长每个温度下的迭代次数max_stay_counter150冷却时间最优值连续不变 N 轮后提前停止lb/ub可选变量上下界需同时传入SA 的停止与接受机制在 sko/SA.py 的run()中外层循环在T T_min或stay_counter max_stay_counter时终止内层循环每个温度下重复L次邻域搜索。新解采用Metropolis 准则接受df 0更优必然接受否则以np.exp(-df / T) rand的概率接受劣化解sko/SA.py——这正是模拟退火跳出局部最优的核心。关于参数使用需要注意的几点x0是唯一必填且决定维度与初始位置的参数n_dim len(x0)由源码自动推导sko/SA.pylb/ub通过**kwargs传入必须同时给出或同时不给出否则抛ValueErrorsko/SA.py。给出边界时新解会被np.clip限制在范围内还可以传hop移动步长默认取ub - lb控制单步探索幅度默认导出SA SAFast快速退火sko/SA.py其降温柔性为T T_max * exp(-c * k^quench)额外参数m1, n1, quench1控制降温速度另提供SABoltzmannT T_max / log(1k)额外参数learn_rate0.5与SACauchyT T_max / (1k)额外参数learn_rate0.5两种变体sko/SA.py可通过from sko.SA import SAFast, SABoltzmann, SACauchy分别导入连续值版本构造时支持lb、ub、hop关键字参数示例见 examples/demo_sa.py更多讨论见 docs/en/more_sa.md。from sko.SA import SA demo_func lambda p: p[0] ** 2 (p[1] - 0.05) ** 2 p[2] ** 2 sa SA(funcdemo_func, x0[1, 1, 1], T_max1, T_min1e-9, L300, max_stay_counter150, lb[-1, -1, -1], ub[1, 1, 1]) best_x, best_y sa.run()6.2 SA_TSP参数默认值含义func必填目标函数路径总代价x0必填初始路径城市编号排列T_max100最高温度T_min1e-7最低温度L300链长max_stay_counter150冷却时间SA_TSP 与 SA 参数相同但无lb/ub因为解是离散排列。其邻域操作在 sko/SA.py 中随机三选一mutation.swap交换两点、mutation.reverse片段逆转、mutation.transpose片段搬移降温公式为T T_max / (1 ln(1 k))。示例见 examples/demo_sa_tsp.py。7. ACA_TSP蚁群算法的信息素参数参数默认值含义func必填目标函数路径总距离n_dim必填城市数量目标函数维度size_pop10蚂蚁数量max_iter20最大迭代次数distance_matrix必填城市间距离矩阵alpha1信息素的重要程度beta2适应度启发信息的重要程度rho0.1信息素挥发速度ACA_TSP 的实现非常完整地体现了经典蚁群算法的三要素sko/ACA.py距离矩阵预处理prob_matrix_distance 1 / (distance_matrix 1e-10 * np.eye(n_dim, n_dim))sko/ACA.py加单位阵微扰避免除零取倒数作为启发信息距离越短越优先转移概率每只蚂蚁按prob (Tau ** alpha) * (prob_matrix_distance) ** beta在禁忌表之外的候选城市中归一化采样sko/ACA.py。alpha越大越依赖历史信息素积累beta越大越偏向走当前最近的边信息素更新一代结束后delta_tau[n1, n2] 1 / y[j]路径越短涂抹越多再执行Tau (1 - rho) * Tau delta_tausko/ACA.py。rho越大历史信息素挥发越快算法记忆越短。import numpy as np from scipy import spatial from sko.ACA import ACA_TSP num_points 8 points_coordinate np.random.rand(num_points, 2) distance_matrix spatial.distance.cdist(points_coordinate, points_coordinate, metriceuclidean) def cal_total_distance(routine): num_points, routine.shape return sum([distance_matrix[routine[i % num_points], routine[(i 1) % num_points]] for i in range(num_points)]) aca ACA_TSP(funccal_total_distance, n_dimnum_points, size_pop10, max_iter20, distance_matrixdistance_matrix, alpha1, beta2, rho0.1) best_x, best_y aca.run()完整示例见 examples/demo_aca_tsp.py。8. IA_TSP免疫优化算法的抗体参数参数默认值含义func必填目标函数n_dim必填城市数量目标函数维度size_pop50种群规模max_iter200最大迭代次数prob_mut0.001变异概率T0.7抗体与抗体间的亲和度阈值alpha0.95多样性相对于抗体浓度的重要性IA_TSP 是 GA_TSP 的子类通过替换排序算子实现免疫机制sko/IA.py。其核心immune_rankingsko/IA.py计算每个抗体的期望繁殖概率A 1 / self.Y # 抗体与抗原的亲和度目标值越小亲和度越高 dist_matrix1 spatial.distance.cdist(self.Chrom, self.Chrom, metrichamming) similiar_matrix1 dist_matrix1 1 - self.T # 相似度超过 T 视为亲和 S (similiar_matrix1.sum(axis1) - 1) / (self.size_pop - 1) # 抗体浓度 self.FitV self.alpha * A / A.sum() (1 - self.alpha) * S / (S.sum() 1e-5)参数含义因此很直观T是抗体两两之间的 Hamming 距离判定阈值大于1 - T才计为相似从而影响浓度 S 的计算alpha权衡亲和度逼近抗原/最优解与多样性抗体浓度两项在适应度中的权重alpha越接近 1 越强调解的质量越接近 0 越强调种群多样性、防止早熟。示例见 examples/demo_ia.py。from sko.IA import IA_TSP ia_tsp IA_TSP(funccal_total_distance, n_dimnum_points, size_pop50, max_iter200, prob_mut0.001, T0.7, alpha0.95) best_points, best_distance ia_tsp.run()9. AFSA人工鱼群算法的行为参数参数默认值含义func必填目标函数n_dim必填目标函数的维度size_pop50种群规模鱼群大小max_iter300最大迭代次数max_try_num100单次移动中最大捕食尝试次数step0.5单步最大位移visual0.3鱼的最大感知范围q0.98感知范围衰减系数每代visual * qdelta0.5鱼的拥挤度容忍阈值AFSA 模拟鱼群的四种行为sko/AFSA.py捕食prey在当前鱼周围visual范围内随机试探最多尝试max_try_num次找到更优位置就移动过去全部失败则执行随机移动movesko/AFSA.py聚群swarm计算视野内其他鱼的中心若中心处更优且不拥挤center_y * n delta * y则向中心移动否则转捕食sko/AFSA.py追尾follow视野内最优鱼的位置若满足拥挤度条件则向其移动否则转捕食sko/AFSA.pyq衰减每个 epoch 结束后self.visual * self.q使感知范围逐渐缩小、从全局搜索过渡到精细搜索sko/AFSA.py。各参数的作用由此清晰step控制收敛速度与精度过大易震荡visual与q共同控制探索半径与衰减节奏delta越大越容易接受聚群与追尾、收敛越快但易早熟。示例见 examples/demo_afsa.py。from sko.AFSA import AFSA def demo_func(p): x1, x2 p return x1 ** 2 (x2 - 0.05) ** 2 afsa AFSA(funcdemo_func, n_dim2, size_pop50, max_iter300, max_try_num100, step0.5, visual0.3, q0.98, delta0.5) best_x, best_y afsa.run()10. 输出属性如何提取每代最优与历史轨迹运行求解器后所有结果都保存在实例的公开属性中原文档说明中x既指目标函数的输入向量也指目标函数值下述属性以各算法源码中的真实字段为准。下面是全量对照10.1 GA 与 GA_TSPsko/GA.pyga.generation_best_Y每一代的最优函数值列表ga.generation_best_X每一代最优函数值对应的最优解列表ga.all_history_FitV每一代每个个体的适应度值ga.all_history_Y每一代每个个体的函数值ga.best_y/ga.best_x全局最优函数值与最优解run()的返回值sko/GA.py。GA_TSP 除all_history_FitV外同样拥有上述属性另在run()中拼接父代与子代后择优sko/GA.py。10.2 DEsko/DE.pyde.generation_best_Y每一代的最优函数值de.generation_best_X每一代最优函数值对应的解de.all_history_Y每一代每个个体的函数值DE 无 FitVde.best_y/de.best_x全局最优。10.3 PSOsko/PSO.pypso.record_value字典{X: [], V: [], Y: []}逐代记录每个粒子的位置、速度与函数值——注意必须先将pso.record_mode True才会开始记录sko/PSO.pypso.gbest_y_hist每一代的全局最优函数值列表可直接用于绘制收敛曲线PSO 中全局最优使用pso.gbest_x/pso.gbest_y历史兼容名best_x/best_y与之等价sko/PSO.py另有pbest_x/pbest_y保存每个粒子的历史个体最优。10.4 SAsko/SA.pysa.generation_best_Y每个温度循环后的最优函数值sa.generation_best_X对应的最优解sa.best_x/sa.best_y全局最优run()返回值。10.5 ACA_TSPsko/ACA.pyaca.generation_best_Y每一代每次迭代的最优距离aca.generation_best_X每一代对应的最优路径aca.best_x/aca.best_y全局最优路径与最短距离。原文档此处误写作sa.generation_best_Y按 sko/ACA.py 实际为aca.generation_best_Y/aca.generation_best_X。10.6 AFSAsko/AFSA.pyafsa.best_x/afsa.best_y全局最优解与最优值run()返回值大写别名best_X/best_Y在源码注释中标注will be deprecated, use lowercase应优先使用小写版本。10.7 IA_TSPsko/IA.py 继承 GA_TSPia.generation_best_Y/ia.generation_best_X每代最优函数值与最优解ia.all_history_FitV每一代每个个体的适应度免疫排序后的期望繁殖概率ia.all_history_Y每一代每个个体的函数值ia.best_y/ia.best_x全局最优。11. 参数调优速查小结算法影响收敛速度的关键参数影响解质量/多样性的关键参数必填项GAsize_pop、max_iterprob_mut、precision、constraint_*func、n_dimGA_TSPsize_pop、max_iterprob_mutfunc、n_dimPSOw、max_iterc1、c2、constraint_ueqfunc、n_dimDEF、size_popprob_mut交叉概率、constraint_*func、n_dimSAL、max_stay_counter、T_max/T_minx0、lb/ub、hopfunc、x0ACA_TSPsize_pop、max_iteralpha、beta、rhofunc、n_dim、distance_matrixIA_TSPsize_pop、max_iterT、alpha、prob_mutfunc、n_dimAFSAstep、max_itervisual、q、delta、max_try_numfunc、n_dim在动手调参前建议优先用第 1 节的help()查看类签名确认当前版本的默认值本文指出过文档表格与源码签名在 PSO、DE 两处的差异再结合各算法的generation_best_Y/gbest_y_hist输出属性绘制收敛曲线观察早熟或收敛过慢的现象定向调整。所有可运行示例均位于 examples 目录英文文档索引见 docs/en中文版见 docs/zh。赞分享科学计算【免费下载链接】scikit-opt主流群体智能算法差分进化算法、遗传算法、粒子群算法、模拟退火算法、蚁群算法、免疫优化算法、鱼群算法解决常规最优化问题以及旅行商问题项目地址https://gitcode.com/guofei9987/scikit-opt点击查看免费下载相关推荐scikit-opt中的蚁群算法ACA详解scikit opt中的蚁群算法ACA详解 引言为什么需要蚁群算法 在现实世界的优化问题中特别是组合优化问题传统的数学方法往往面临维度灾难的困境科学计算scikit-opt中的遗传算法GA详解scikit opt中的遗传算法GA详解 引言优化问题的智能求解新范式 在工程优化、机器学习参数调优、路径规划等众多领域我们经常面临复杂的非线性优化问题科学计算遗传算法终极指南scikit-opt源码深度解析与实战应用遗传算法终极指南scikit opt源码深度解析与实战应用 遗传算法、粒子群优化、模拟退火等群体智能算法是解决复杂优化问题的强大工具而scikit opt正科学计算上一篇【亲测免费】 开源项目使用教程Open Computer Use下一篇libtpa加速网络传输提升应用性能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考