優(yōu)化實戰(zhàn)指南:從 NSGA-II 到 Pareto 前沿的科學(xué)計算方案)
Pymoo 多目標(biāo)優(yōu)化實戰(zhàn)指南從 NSGA-II 到 Pareto 前沿的科學(xué)計算方案【免費下載鏈接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.項目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills導(dǎo)讀本文基于 scientific-agent-skills 倉庫中的 pymoo Agent Skill 編寫圍繞 pymoo SKILL 文檔 及其下完整的 references 參考文檔 與可執(zhí)行 scripts 腳本系統(tǒng)講解如何在 Python 中使用 pymoo 解決單目標(biāo)、多目標(biāo)與高維多目標(biāo)優(yōu)化問題。讀完本文你將掌握統(tǒng)一minimize()接口、三種問題定義風(fēng)格、九大實操工作流、算法與遺傳算子選型、約束處理、多準(zhǔn)則決策MCDM、可視化與并行化等完整技術(shù)??芍苯釉诠こ淘O(shè)計、科學(xué)研究與 AI Agent 場景中落地使用。一、Skill 概覽為什么用它何時用它Pymoo 是一個以多目標(biāo)優(yōu)化為核心的 Python 優(yōu)化框架內(nèi)置了 NSGA-II、NSGA-III、MOEA/D、SPEA2 等前沿算法ZDT、DTLZ、WFG 等標(biāo)準(zhǔn)基準(zhǔn)測試問題可自定義的遺傳算子以及一整套多準(zhǔn)則決策方法。它最擅長處理的是**目標(biāo)相互沖突、需要尋找折中解Pareto 前沿**的優(yōu)化問題。倉庫中的 Skill 元數(shù)據(jù)將其定位為Multi-objective optimization framework. NSGA-II, NSGA-III, MOEA/D, Pareto fronts, constraint handling, benchmarks (ZDT, DTLZ), for engineering design and optimization problems.見 SKILL.md。根據(jù) SKILL.md 的 When to Use 章節(jié)本 Skill 適用于以下場景求解單目標(biāo)或多目標(biāo)優(yōu)化問題尋找 Pareto 最優(yōu)解并分析目標(biāo)間的折中關(guān)系實現(xiàn)進化算法GA、DE、PSO、NSGA-II/III 等處理帶約束的優(yōu)化問題在標(biāo)準(zhǔn)測試問題ZDT、DTLZ、WFG上對算法做基準(zhǔn)評測自定義交叉、變異、選擇等遺傳算子可視化高維優(yōu)化結(jié)果從多個競爭解中做決策選優(yōu)處理二進制、離散、連續(xù)或混合變量問題。二、安裝與運行環(huán)境Skill 前端元數(shù)據(jù)聲明compatibility: Requires Python 3.10 and pymoo (uv pip install)即要求 Python 3.10 及以上版本并通過 uv 安裝 pymoo?;景惭buv pip install pymoo可復(fù)現(xiàn)環(huán)境的版本鎖定uv pip install pymoo0.6.1.6依賴說明見 SKILL.mdNumPy自 0.6.1.3 起兼容 NumPy 2.xSciPy科學(xué)計算基礎(chǔ)依賴matplotlib可視化繪制散點圖、平行坐標(biāo)圖等必需autograd可選自 0.6.1.3 起支持基于梯度的特性joblib可選用于JoblibParallelization并行化見 parallelization.mdoptuna可選當(dāng)使用pymoo.algorithms.soo.nonconvex.optuna.Optuna包裝器時需單獨安裝。當(dāng)前穩(wěn)定版本為pymoo 0.6.1.62025 年 11 月發(fā)布。三、核心概念統(tǒng)一接口與問題定義3.1 統(tǒng)一的minimize()接口Pymoo 所有優(yōu)化任務(wù)都通過同一個minimize()函數(shù)完成參數(shù)語義高度一致優(yōu)化什么、如何優(yōu)化、何時停止from pymoo.optimize import minimize result minimize( problem, # What to optimize algorithm, # How to optimize termination, # When to stop seed1, verboseTrue )返回的result對象包含字段含義result.X最優(yōu)解組的決策變量值result.F最優(yōu)解組的目標(biāo)函數(shù)值result.G約束違反量若問題帶約束result.algorithm算法對象含迭代歷史n_gen、evaluator.n_eval等例如倉庫腳本 single_objective_example.py 中就是這樣讀取結(jié)果并統(tǒng)計迭代信息的print(fBest solution: {result.X}) print(fBest objective value: {result.F[0]:.6f}) print(fNumber of generations: {result.algorithm.n_gen}) print(fNumber of function evaluations: {result.algorithm.evaluator.n_eval})3.2 三種問題定義風(fēng)格Pymoo 支持三種問題定義方式見 SKILL.mdProblem向量化風(fēng)格——_evaluate接收一批解的矩陣batch適合高性能評估ElementwiseProblem一次評估一個解——自定義問題與并行評估的首選也是倉庫五個示例腳本統(tǒng)一采用的風(fēng)格FunctionalProblem以獨立函數(shù)定義目標(biāo)與約束無需子類化。3.3 六類問題類型問題類型特征單目標(biāo)Single-objective一個待最小化/最大化的目標(biāo)多目標(biāo)Multi-objective2~3 個沖突目標(biāo) → 求 Pareto 前沿高維多目標(biāo)Many-objective4 個及以上目標(biāo) → 高維 Pareto 前沿約束問題Constrained目標(biāo) 不等式/等式約束混合變量Mixed-variable同一問題中混合連續(xù)、整數(shù)、二進制、類別變量動態(tài)問題Dynamic目標(biāo)或約束隨時間變化四、九大快速上手工作流倉庫在 quick_start_workflows.md 中沉淀了九個可直接運行的完整工作流并配套 scripts 下的五個可執(zhí)行示例。下表是工作流速查#工作流適用場景1單目標(biāo)優(yōu)化只有一個目標(biāo)用 GA 或 DE2多目標(biāo)優(yōu)化2-3 目標(biāo)NSGA-II 求 Pareto 前沿3高維多目標(biāo)4 目標(biāo)NSGA-III 或參考方向法4自定義問題定義子類化Problem/ElementwiseProblem5約束處理不等式與等式約束6Pareto 前沿上的決策標(biāo)量化與 MCDM 選優(yōu)7可視化散點、PCP、radviz、熱力圖8并行評估線程、進程或 Dask 處理昂貴目標(biāo)9混合變量優(yōu)化整數(shù)、二進制、類別變量工作流 1單目標(biāo)優(yōu)化對應(yīng)完整腳本 single_objective_example.py使用遺傳算法在 Sphere 函數(shù)上做單目標(biāo)最小化from pymoo.algorithms.soo.nonconvex.ga import GA from pymoo.problems import get_problem from pymoo.optimize import minimize # 內(nèi)置測試問題10 維 Rastrigin problem get_problem(rastrigin, n_var10) # 配置遺傳算法 algorithm GA( pop_size100, eliminate_duplicatesTrue ) # 終止條件200 代 result minimize( problem, algorithm, (n_gen, 200), seed1, verboseTrue ) print(fBest solution: {result.X}) print(fBest objective: {result.F[0]})腳本版本還顯式配置了算子組合見 single_objective_example.pyFloatRandomSampling()初始采樣 SBX(prob0.9, eta15)交叉 PM(eta20)變異終止條件用get_termination(n_gen, 100)表達。工作流 2多目標(biāo)優(yōu)化NSGA-II Pareto 前沿對應(yīng)完整腳本 multi_objective_example.py在 ZDT1 雙目標(biāo)問題上運行 NSGA-II并將求得的 Pareto 前沿與真實前沿疊加對比from pymoo.algorithms.moo.nsga2 import NSGA2 from pymoo.problems import get_problem from pymoo.optimize import minimize from pymoo.visualization.scatter import Scatter # 雙目標(biāo)基準(zhǔn)問題 ZDT1 problem get_problem(zdt1) # NSGA-II 算法 algorithm NSGA2(pop_size100) # 優(yōu)化 200 代 result minimize(problem, algorithm, (n_gen, 200), seed1) # 可視化紅色為求得前沿黑色半透明為真實前沿 plot Scatter() plot.add(result.F, labelObtained Front) plot.add(problem.pareto_front(), labelTrue Front, alpha0.3) plot.show() print(fFound {len(result.F)} Pareto-optimal solutions)腳本還會打印前沿解數(shù)量與迭代統(tǒng)計multi_objective_example.py。工作流 3高維多目標(biāo)NSGA-III 參考方向?qū)?yīng)完整腳本 many_objective_example.py在 5 目標(biāo) DTLZ2 上使用 NSGA-III并用平行坐標(biāo)圖PCP可視化from pymoo.algorithms.moo.nsga3 import NSGA3 from pymoo.problems import get_problem from pymoo.optimize import minimize from pymoo.util.ref_dirs import get_reference_directions from pymoo.visualization.pcp import PCP # 5 目標(biāo)問題 problem get_problem(dtlz2, n_obj5) # 生成參考方向NSGA-III 必需 # 注意n_dim 是位置參數(shù)寫成 n_obj 會拋 TypeError ref_dirs get_reference_directions(das-dennis, 5, n_partitions12) # 配置 NSGA-III algorithm NSGA3(ref_dirsref_dirs) # 優(yōu)化 300 代 result minimize(problem, algorithm, (n_gen, 300), seed1) # 平行坐標(biāo)圖可視化 plot PCP(labels[ff{i1} for i in range(5)]) plot.add(result.F, alpha0.3) plot.show()該腳本注釋中特別強調(diào)了倉庫實測的一個坑get_reference_directions的維度參數(shù)是位置參數(shù)傳入n_obj關(guān)鍵字會觸發(fā)TypeError見 many_objective_example.py。工作流 4自定義問題定義對應(yīng)完整腳本 custom_problem_example.py該腳本同時演示了無約束與帶約束兩個自定義問題。無約束雙目標(biāo)問題from pymoo.core.problem import ElementwiseProblem import numpy as np class MyProblem(ElementwiseProblem): def __init__(self): super().__init__( n_var2, # 決策變量數(shù) n_obj2, # 目標(biāo)數(shù) xlnp.array([0, 0]), # 下界 xunp.array([5, 5]) # 上界 ) def _evaluate(self, x, out, *args, **kwargs): f1 x[0]**2 x[1]**2 f2 (x[0]-1)**2 (x[1]-1)**2 out[F] [f1, f2]帶約束問題在__init__中聲明約束數(shù)量在_evaluate中輸出G/Hclass ConstrainedProblem(ElementwiseProblem): def __init__(self): super().__init__( n_var2, n_obj2, n_ieq_constr2, # 不等式約束數(shù) n_eq_constr1, # 等式約束數(shù) xlnp.array([0, 0]), xunp.array([5, 5]) ) def _evaluate(self, x, out, *args, **kwargs): out[F] [f1, f2] # 目標(biāo) out[G] [g1, g2] # 不等式約束 g(x) 0 out[H] [h1] # 等式約束 h(x) 0約束書寫規(guī)則詳見 constraints_mcdm.md不等式寫成g(x) 0≤ 0 即可行等式寫成h(x) 0等于 0 即可行若原始約束形如g(x) b轉(zhuǎn)換為-(g(x) - b) 0。custom_problem_example.py 給出了工程化的轉(zhuǎn)換實例x2 9*x1 6被改寫為g1 -(x[1] 9*x[0] - 6)-x2 9*x1 1被改寫為g2 -(-x[1] 9*x[0] - 1)。工作流 5約束處理Pymoo 提供四類約束處理手段詳見 constraints_mcdm.md① 可行性優(yōu)先Feasibility First默認(rèn)推薦多數(shù)算法默認(rèn)行為比較規(guī)則為兩者皆可行→比較目標(biāo)值一可行一不可行→可行者勝兩者皆不可行→比較約束違反量。用result.CV[:, 0] 0判斷可行性from pymoo.algorithms.moo.nsga2 import NSGA2 algorithm NSGA2(pop_size100) result minimize(problem, algorithm, termination) feasible result.CV[:, 0] 0 # CV constraint violation print(fFeasible solutions: {np.sum(feasible)})② 罰函數(shù)法把約束違反量折入目標(biāo)值F_penalized F penalty_factor * violationfrom pymoo.constraints.as_penalty import ConstraintsAsPenalty problem_penalized ConstraintsAsPenalty(problem, penalty1e6)penalty系數(shù)需按問題量級調(diào)參見 constraints_mcdm.md。③ 約束目標(biāo)化將約束違反量作為額外目標(biāo)問題變?yōu)?M1 目標(biāo)適合可行域很小的場景from pymoo.constraints.as_obj import ConstraintsAsObjective problem_with_cv ConstraintsAsObjective(problem)④ 專用算法SRES/ISRES 內(nèi)建約束處理適合重約束問題from pymoo.algorithms.soo.nonconvex.sres import SRES algorithm SRES()此外還可使用ε-約束法動態(tài)可行性閾值與修復(fù)算子Repair。修復(fù)算子通過繼承pymoo.core.repair.Repair實現(xiàn)例如把解投影回可行域constraints_mcdm.mdfrom pymoo.core.repair import Repair class MyRepair(Repair): def _do(self, problem, X, **kwargs): X np.clip(X, problem.xl, problem.xu) return X algorithm GA(pop_size100, repairMyRepair())約束方法選型速查問題特征推薦方法可行域大Feasibility First可行域小Constraint as Objective、Repair重約束SRES/ISRES、ε-約束線性約束Repair投影非線性約束Feasibility First、Penalty已知可行解偏置初始化工作流 6Pareto 前沿上的決策MCDM對應(yīng)完整腳本 decision_making_example.py該腳本依次演示了尋找極端解、比較不同偏好權(quán)重、用花瓣圖Petal對比選中方案輸出結(jié)論是不同權(quán)重會選擇不同解權(quán)重越高越偏向在該目標(biāo)上更優(yōu)的解。Pseudo-Weights 偽權(quán)重法示例from pymoo.mcdm.pseudo_weights import PseudoWeights import numpy as np # 歸一化目標(biāo)到 [0, 1] F_norm (result.F - result.F.min(axis0)) / (result.F.max(axis0) - result.F.min(axis0)) # 定義偏好權(quán)重之和必須為 1 weights np.array([0.3, 0.7]) # 30% f1, 70% f2 # 決策選優(yōu) dm PseudoWeights(weights) selected_idx dm.do(F_norm) best_solution result.X[selected_idx] best_objectives result.F[selected_idx]其他 MCDM 方法詳見 constraints_mcdm.mdCompromise Programming折中規(guī)劃選擇距理想點最近的解CompromiseProgramming().do(result.F, idealideal_point, nadirnadir_point)Knee Point膝點檢測無需先驗偏好時選擇折中最平衡的解KneePoint().do(result.F)Hypervolume Contribution超體積貢獻挑選對超體積貢獻最大的多樣子集配合pymoo.indicators.hv.HV計算貢獻度。MCDM 決策工作流constraints_mcdm.md先歸一化目標(biāo) → 散點圖分析折中 → 應(yīng)用 MCDM 方法 → 用 Petal 圖驗證所選方案。工作流 7可視化Pymoo 提供八類可視化詳見 visualization.md全部基于 matplotlib 封裝并接受標(biāo)準(zhǔn) kwargs2 目標(biāo) → 散點圖from pymoo.visualization.scatter import Scatter plot Scatter(titleBi-objective Results) plot.add(result.F, colorblue, alpha0.7) plot.show()3 目標(biāo) → 3D 散點plot.add(result.F)自動渲染 3D。4 目標(biāo) → 平行坐標(biāo)圖 PCPfrom pymoo.visualization.pcp import PCP plot PCP( labels[ff{i1} for i in range(n_obj)], normalize_each_axisTrue ) plot.add(result.F, alpha0.3) plot.show()解對比 → 花瓣圖 Petalfrom pymoo.visualization.petal import Petal plot Petal( bounds[result.F.min(axis0), result.F.max(axis0)], labels[Cost, Weight, Efficiency] ) plot.add(solution_A, labelDesign A) plot.add(solution_B, labelDesign B) plot.show()其余類型還包括 Heatmap密度分布、Radar多準(zhǔn)則性能畫像、Radviz高維降維投影、Star Coordinate星坐標(biāo)以及基于算法歷史生成收斂動畫的Video需save_historyTrue與 ffmpeg??梢暬x型指南問題類型首選圖輔助圖2 目標(biāo)ScatterHeatmap3 目標(biāo)3D Scatter平行坐標(biāo)4-10 目標(biāo)平行坐標(biāo)Radviz10 目標(biāo)RadvizStar Coordinates解對比Petal/Radar平行坐標(biāo)收斂過程VideoScatter末代分布分析HeatmapScatter保存圖片使用plot.save(my_plot.png, dpi300)多數(shù)據(jù)集疊加可直接多次plot.add(...)傳入不同顏色與 label。工作流 8并行評估當(dāng)_evaluate是瓶頸仿真、ML 推理、外部求解器時通過給ElementwiseProblem傳入elementwise_runner實現(xiàn)并行詳見 parallelization.md。前提是子類化ElementwiseProblem而非向量化Problem。線程池版本適合 I/O 密集評估from multiprocessing.pool import ThreadPool from pymoo.algorithms.soo.nonconvex.ga import GA from pymoo.core.problem import ElementwiseProblem from pymoo.optimize import minimize from pymoo.parallelization.starmap import StarmapParallelization class MyProblem(ElementwiseProblem): def __init__(self, elementwise_runnerNone, **kwargs): super().__init__( n_var10, n_obj1, xl-5, xu5, elementwise_runnerelementwise_runner, **kwargs, ) def _evaluate(self, x, out, *args, **kwargs): out[F] (x ** 2).sum() # 替換為昂貴的評估邏輯 pool ThreadPool(4) runner StarmapParallelization(pool.starmap) problem MyProblem(elementwise_runnerrunner) result minimize(problem, GA(), (n_gen, 50), seed1) pool.close() # 務(wù)必在優(yōu)化結(jié)束后關(guān)閉線程池進程池版本適合 CPU 密集評估將ThreadPool換為multiprocessing.PoolJoblib 版本使用JoblibParallelization(lambda func, X: Parallel(n_jobs4)(delayed(func)(x) for x in X))。注意進程池要求問題定義可 pickle類體內(nèi)避免 lambda且并行收益取決于評估成本與調(diào)度開銷的比值。工作流 9混合變量優(yōu)化當(dāng)決策變量同時包含連續(xù)、整數(shù)、二進制、類別類型時用帶類型標(biāo)注的vars字典定義問題并用MixedVariableGA求解from pymoo.core.problem import ElementwiseProblem from pymoo.core.variable import Real, Integer, Choice, Binary from pymoo.core.mixed import MixedVariableGA from pymoo.optimize import minimize class MixedProblem(ElementwiseProblem): def __init__(self, **kwargs): vars { b: Binary(), x: Choice(options[nothing, multiply]), y: Integer(bounds(0, 2)), z: Real(bounds(0, 5)), } super().__init__(varsvars, n_obj1, **kwargs) def _evaluate(self, X, out, *args, **kwargs): b, x, z, y X[b], X[x], X[z], X[y] f z y if b: f 100 * f if x multiply: f 10 * f out[F] f algorithm MixedVariableGA(pop_size20) result minimize(MixedProblem(), algorithm, (n_evals, 1000), seed1)多目標(biāo)混合變量問題為MixedVariableGA傳入survivalRankAndCrowdingSurvival()即可quick_start_workflows.md單目標(biāo)混合搜索還可使用pymoo.algorithms.soo.nonconvex.optuna.Optuna包裝器需單獨uv pip install optuna見 algorithms.md。五、算法選擇指南5.1 單目標(biāo)算法算法最佳場景特點GA通用算子靈活可定制DE連續(xù)優(yōu)化全局搜索能力強PSO平滑地貌收斂快CMA-ES困難/帶噪聲問題協(xié)方差自適應(yīng)Pattern Search / Nelder-Mead無梯度信息直接搜索/局部優(yōu)化GA 的默認(rèn)參數(shù)為pop_size100、Tournament 選擇、SBX 交叉、Polynomial 變異、eliminate_duplicatesTruealgorithms.md。5.2 多目標(biāo)算法2-3 目標(biāo)算法最佳場景特點NSGA-II標(biāo)準(zhǔn)基準(zhǔn)快速、可靠、久經(jīng)測試非支配排序 擁擠距離SPEA2歸檔式 MOO基于強度的適應(yīng)度 外部歸檔0.6.1.6 有改進R-NSGA-II偏好區(qū)域參考點引導(dǎo)MOEA/D可分解問題標(biāo)量化分解SMS-EMOA超體積指標(biāo)支配超體積貢獻選擇5.3 高維多目標(biāo)算法4 目標(biāo)算法最佳場景特點NSGA-III4-15 目標(biāo)參考方向維持多樣性pop_size默認(rèn)等于參考方向數(shù)RVEA自適應(yīng)搜索參考向量演化AGE-MOEA復(fù)雜地貌自適應(yīng)幾何估計U-NSGA-III多種場景更穩(wěn)健的統(tǒng)一版本NSGA-II 與 NSGA-III 的分界很明確2-3 目標(biāo)用 NSGA-II計算開銷更低4 目標(biāo)用 NSGA-III分布更均勻。5.4 約束問題方案算法適用時機可行性優(yōu)先任意算法可行域較大專用算法SRES、ISRES重約束罰函數(shù)GA penalty算法兼容性優(yōu)先動態(tài)多目標(biāo)場景目標(biāo)隨時間變化可選用 D-NSGA-II 與 KGB-DMOEA知識引導(dǎo)利用歷史信息詳見 algorithms.md。六、基準(zhǔn)測試問題Pymoo 通過get_problem統(tǒng)一提供測試問題詳見 problems.mdfrom pymoo.problems import get_problem # 單目標(biāo) problem get_problem(rastrigin, n_var10) problem get_problem(rosenbrock, n_var10) # 多目標(biāo) problem get_problem(zdt1) # 凸前沿 problem get_problem(zdt2) # 非凸前沿 problem get_problem(zdt3) # 不連續(xù)前沿5 個分區(qū) # 高維多目標(biāo) problem get_problem(dtlz2, n_obj5, n_var12) problem get_problem(dtlz7, n_obj4)ZDT 套件雙目標(biāo)標(biāo)準(zhǔn)基準(zhǔn)的關(guān)鍵特征問題變量/邊界前沿形狀用途ZDT130 連續(xù)[0,1]凸基礎(chǔ)收斂與多樣性ZDT230 連續(xù)[0,1]非凸凹非凸前沿處理ZDT330 連續(xù)[0,1]不連續(xù)5 段不連續(xù)前沿的多樣性維持ZDT410 連續(xù)x?∈[0,1]x????∈[-10,10]凸21? 個局部前沿全局搜索ZDT511 離散位串凸離散優(yōu)化與欺騙性地貌ZDT610 連續(xù)[0,1]非凸、密度不均偏置分布處理DTLZ 套件高維可擴展基準(zhǔn)目標(biāo)數(shù)通常 3-15DTLZ1 線性前沿但含 11^k 局部前沿DTLZ2 球形前沿適合基礎(chǔ)多樣性測試DTLZ3 組合了 DTLZ1 的多模態(tài)與 DTLZ2 的幾何DTLZ7 具有 2^(M-1) 個不連續(xù)區(qū)域。其他問題族WFGWFG1-WFG9含不可分、欺騙、多模態(tài)、偏置、縮放前沿等復(fù)雜形狀、MW / DAS-CMOP約束多目標(biāo)、DF1-DF14CEC2018 動態(tài)多目標(biāo)基準(zhǔn)、工程問題 Truss2D重量 vs 位移與 Welded Beam多約束工程設(shè)計。問題選型指引基礎(chǔ)收斂DTLZ2、ZDT1多模態(tài)ZDT4、DTLZ1、DTLZ3非凸ZDT2不連續(xù)ZDT3、DTLZ7約束MW/DAS-CMOP工程驗證Truss2D、Welded Beam。七、遺傳算子定制Pymoo 允許對采樣、選擇、交叉、變異四個環(huán)節(jié)做細(xì)粒度定制詳見 operators.md。7.1 標(biāo)準(zhǔn)連續(xù)變量 GA 配置from pymoo.algorithms.soo.nonconvex.ga import GA from pymoo.operators.crossover.sbx import SBX from pymoo.operators.mutation.pm import PM algorithm GA( pop_size100, crossoverSBX(prob0.9, eta15), mutationPM(eta20), eliminate_duplicatesTrue )參數(shù)語義SBX(prob0.9, eta15)模擬二進制交叉eta分布指數(shù)越高子代越接近父代偏局部搜索越低越偏向探索交叉概率通常取 0.8-0.95PM(probNone, eta20)多項式變異probNone表示使用1/n_var標(biāo)準(zhǔn)推薦值更高的變異概率帶來更多探索但收斂變慢eliminate_duplicatesTrue消除冗余重復(fù)解。7.2 按變量類型選算子變量類型采樣交叉變異連續(xù)FloatRandomSampling/LHSSBX、DE 交叉PM二進制BinaryRandomSamplingTwoPointCrossover、UniformCrossover(prob0.5)、HUXBitflipMutation(prob0.05)整數(shù)IntegerRandomSampling整數(shù) SBX整數(shù) PM排列TSP、調(diào)度PermutationRandomSamplingOrderCrossoverOX、ERX、PMXInversionMutation、ScrambleMutation排列問題 GATSP示例from pymoo.operators.sampling.rnd import PermutationRandomSampling from pymoo.operators.crossover.ox import OrderCrossover from pymoo.operators.mutation.inversion import InversionMutation sampling PermutationRandomSampling() crossover OrderCrossover() mutation InversionMutation()選擇算子TournamentSelection(pressure2)錦標(biāo)賽壓力默認(rèn) 2與RandomSelection()。7.3 字符串簡寫配置Pymoo 支持用字符串直接指定算子operators.mdalgorithm GA( pop_size100, samplingreal_random, crossoverreal_sbx, mutationreal_pm )可用字符串采樣real_random/real_lhs/bin_random/perm_random交叉real_sbx/real_de/int_sbx/bin_ux/bin_hux變異real_pm/int_pm/bin_bitflip/perm_inv。7.4 參數(shù)調(diào)優(yōu)經(jīng)驗交叉概率高0.8-0.95為多數(shù)問題的標(biāo)準(zhǔn)選擇變異概率1/n_var為標(biāo)準(zhǔn)推薦交叉eta15-30越高越偏局部搜索變異eta20-50越高越偏開發(fā)exploitation。八、性能調(diào)優(yōu)與故障排查8.1 常見問題與對策現(xiàn)象對策算法不收斂增大種群規(guī)模增加迭代代數(shù)檢查問題是否多模態(tài)換算法核對約束表述Pareto 前沿分布差調(diào)整 NSGA-III 參考方向增大種群檢查重復(fù)解消除核對問題尺度可行解稀少采用約束目標(biāo)化應(yīng)用修復(fù)算子嘗試 SRES/ISRES檢查約束是否寫成g 0計算成本高減小種群減少代數(shù)用更簡單算子通過elementwise_runner開啟并行工作流 88.2 最佳實踐清單歸一化目標(biāo)各目標(biāo)尺度差異大時先歸一化設(shè)置隨機種子seed1保證可復(fù)現(xiàn)保存歷史save_historyTrue便于分析收斂過程可視化結(jié)果理解解的質(zhì)量與真實 Pareto 前沿對比當(dāng)測試問題提供pareto_front()時合理設(shè)置終止條件(n_gen, N)或get_termination(f_tol, tol0.001)調(diào)優(yōu)算子參數(shù)針對問題特征調(diào)整交叉/變異概率與eta。8.3 收斂可視化配合save_historyTrue可把各代的最優(yōu)前沿疊在同一張散點圖上觀察收斂軌跡visualization.mdresult minimize( problem, algorithm, (n_gen, 200), seed1, save_historyTrue, verboseFalse ) plot Scatter(titleConvergence Over Generations) for gen in [0, 50, 100, 150, 200]: F result.history[gen].opt.get(F) plot.add(F, alpha0.5, labelfGen {gen}) plot.show()九、Skill 資源索引與運行方式本 Skill 在倉庫中配有完整的參考文檔與可執(zhí)行腳本推薦在實戰(zhàn)中按需查閱參考文檔references/algorithms.md全部算法的參數(shù)、用法與選型指南problems.mdZDT/DTLZ/WFG 等基準(zhǔn)問題特征operators.md采樣、選擇、交叉、變異算子及配置visualization.md八類可視化類型、示例與選型constraints_mcdm.md約束處理技術(shù)與多準(zhǔn)則決策方法parallelization.mdStarmapParallelization 與 JoblibParallelization 并行評估。可執(zhí)行腳本scripts/single_objective_example.pyGA 單目標(biāo)優(yōu)化Sphere 函數(shù)multi_objective_example.pyNSGA-II 多目標(biāo) 可視化ZDT1many_objective_example.pyNSGA-III 高維多目標(biāo) 參考方向DTLZ2custom_problem_example.py自定義約束/無約束問題decision_making_example.py多準(zhǔn)則決策與偏好對比。運行示例python3 skills/pymoo/scripts/single_objective_example.py python3 skills/pymoo/scripts/multi_objective_example.py python3 skills/pymoo/scripts/many_objective_example.py python3 skills/pymoo/scripts/custom_problem_example.py python3 skills/pymoo/scripts/decision_making_example.py快速檢索模式查閱參考文檔時可按主題 grep例如算法細(xì)節(jié)grep -r NSGA-II\|NSGA-III\|MOEA/D skills/pymoo/references/約束方法grep -r Feasibility First\|Penalty\|Repair skills/pymoo/references/可視化類型grep -r Scatter\|PCP\|Petal skills/pymoo/references/。十、常見模式速記自定義問題優(yōu)先用ElementwiseProblem函數(shù)式定義可選FunctionalProblem混合變量問題用帶類型標(biāo)注的vars字典約束統(tǒng)一寫成g(x) 0、h(x) 0NSGA-III 必須提供參考方向get_reference_directions注意 n_dim 為位置參數(shù)執(zhí)行 MCDM 前先歸一化目標(biāo)終止條件二選一(n_gen, N)按代數(shù)get_termination(f_tol, tol0.001)按收斂容差。以上模式均與 SKILL.md 的 Additional Notes 及倉庫各腳本實現(xiàn)一一對應(yīng)可直接復(fù)制到科研、工程設(shè)計或 AI Agent 的優(yōu)化任務(wù)中?!久赓M下載鏈接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.項目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考