
1. 为什么无磁芯变压器值得用遗传算法去“折腾”1.1 无磁芯的代价在哪里我最初接触无磁芯变压器是因为一个高压隔离驱动的项目。高压侧和低压侧之间需要传递触发脉冲但隔离耐压要求非常高磁芯变压器的爬电距离和灌封工艺都很麻烦于是团队里有人提出既然隔离等级卡得这么死干脆不要磁芯用空心线圈直接耦合。这个想法听着简单做起来才发现无磁芯变压器是个“看着省事、实际处处受制”的器件。去掉磁芯之后磁路绝大部分变成空气磁导率从几千降到1带来两个直接后果。第一激磁电感大幅下降同样电压和频率下激磁电流成倍上升变压器不再像“电压变换器”反而更像一个带耦合的感性元件。第二原边和副边之间的耦合系数普遍偏低常规磁芯变压器能做到0.95以上的耦合系数无磁芯方案通常只有0.4到0.7如果几何结构设计得不好甚至可能掉到0.3以下。耦合系数低意味着漏感占比大副边得到的能量少对驱动类应用来说可能只是波形不好看对功率传输类应用就是效率灾难。但无磁芯的好处也是实打实的没有磁芯损耗高频下不存在涡流和磁滞发热没有饱和问题励磁电流再大也不会“堵住”磁特性完全线性电感值不随工作点漂移没有残磁脉冲过后立刻归零温度稳定性也好不像铁氧体那样在高温下磁导率剧烈变化。这些特性让它在脉冲变压器、高频谐振变换器的隔离馈电、某些传感器信号耦合场景里非常吃香。问题只在于如何把耦合系数、电感量、体积这几个互相打架的指标调到一个可用的平衡点。1.2 多目标冲突为什么手动调参很难收敛到好方案一开始我们用手工计算加扫参数的方式把线圈内径、外径、匝数、层数、两线圈间距挨个试结果发现这根本是个多峰优化问题。增大匝数可以让自感变大耦合系数可能提高但线圈变厚之后体积膨胀漏感也跟着涨拉近两个线圈能提高耦合但耐压距离不够边缘电场还容易局部放电加宽线圈能改善磁场耦合可带来的自感变化又会破坏和外部谐振电容的匹配关系。更麻烦的是变量之间有强耦合。举个例子把内径从6毫米改到8毫米看起来只是尺寸微调但它会同时改变所有匝的半径分布、影响线圈长度系数、改变互感积分路径最后耦合系数可能涨了0.05体积却涨了40%。靠人工去判断“该往哪个方向改”基本只能凭经验做局部试探很难跳出初始设计。所以我把目光投向了遗传算法。这类无梯度全局优化方法很适合无磁芯变压器目标函数没有解析梯度可用设计变量里混杂着连续量和离散量匝数只能是整数约束条件不规则而且我想在“耦合系数尽量高”和“体积尽量小”之间找一个我真正需要的折中点。遗传算法不需要你对问题本身做太多凸性假设只要把参数编码、适应度函数、约束处理好剩下的事情交给种群进化就行。我开始明白这个项目本质上不是“做个变压器”而是“用演化算法去搜一个变压器的最优几何解”。2. 先解决建模问题把线圈几何尺寸翻译成电路指标2.1 T形等效电路与耦合系数遗传算法在生成个体之后需要一个快速函数来评估这个个体对应的变压器性能。如果每个个体都拉去跑一次三维电磁场仿真一次优化几百上千次评估时间上完全无法接受所以我必须用解析模型做适应度函数的主体框架再用有限元仿真做验算和修正。电学层面无磁芯变压器可以用T形等效电路来描述。原边自感为L1副边自感为L2原副边之间存在互感M耦合系数定义为k M / sqrt(L1 * L2)这个k就是我优化工作的核心指标之一。它直接反映磁通有多少从原边穿到了副边。对无磁芯变压器来说k的高低主要取决于两个线圈的空间位置关系、各自直径和长度以及匝数分布。好在这部分可以用经典电磁学公式估算不用上有限元。有了L1、L2和k整个变压器的端口特性就齐了。输入阻抗、电压传输比、短路阻抗都能通过这些参数推算出来。在实际设计里比起单纯追求高k更常见的是在给定原边电感范围的前提下尽量提高k或者在给定耦合下限的情况下压缩体积。建模时要把这些工程约束一并写进目标函数而不是只盯一个数。2.2 自感与互感的工程解析式无磁芯变压器的几何通常可以近似成两个同轴螺线管或者同轴圆环阵列。对这种结构自感和互感有成熟的计算路径。单层螺线管的自感在自己绕线圈做实验的场景下用经典工程近似式最方便。设线圈平均半径为r长度为l匝数为N自由空间磁导率为μ0则电感可以近似写作L ≈ μ0 * N^2 * π * r^2 / l但这个式子默认线圈很长、内部磁场均匀对于短粗线圈误差很大。所以工程上通常会乘一个长度修正系数该系数约为F 1 / (1 0.45 * (2r / l))于是更实用的单层螺线管电感公式是L μ0 * N^2 * π * r^2 * F / l注意这个修正系数只在中等长度比范围内有效线圈过短或者直径过大时误差会重新变大。多匝多层的情况更复杂一般把每匝看成圆形电流环再对环与环之间的互感做叠加。互感计算我习惯用纽曼公式的思路。两个同轴的圆形电流环半径分别为r1和r2轴向间距为d它们之间的互感可以写成二重积分不过对于共轴圆环这个积分可以退化成单个定积分里面包含第一类完全椭圆积分。直接用数值积分在Python里也就几十行代码的事速度很快精度足够。把每个线圈拆成多个圆环先算同一线圈内所有环的自感和互感累加得到总自感再算原边所有环与副边所有环之间的互感累加得到M。最后代入耦合系数公式。这里有一个非常关键的经验解析模型可以很好地处理“规则理想几何”但它对线圈端部的引出线、相邻层的间距误差完全不敏感这两项在实物里恰恰是误差的主要来源。所以我的策略是解析模型负责在遗传算法迭代中快速筛选个体有限元负责对最终入选的少数几个“精英个体”做复核。2.3 损耗与效率怎么进模型无磁芯变压器没有磁芯损耗但这不代表效率分析可以省略。铜损依然是主要损耗来源而且在高频下要单独考虑趋肤效应和邻近效应。我用一个交流电阻系数Rac/Rdc来修正直流电阻频率越高、线径越粗这个比值越大。对多层绕组邻近效应造成的额外损耗通常比趋肤效应更严重因为层间磁场叠加会让电流密度分布很不均匀。但这里我做了个简化在遗传算法的适应度评估里只用直流电阻加上一个经验交流因子来估算损耗不确定度虽然有一点但作为个体排序的依据足够用了。精确的交流电阻留给有限元复核阶段处理。对一个优化算法来说适应度函数允许存在一定的系统误差只要它不会把“事实上更优”的个体系统性排到后面就行。另外在实际项目中效率从来不是独立存在的指标。它和耦合系数、原边电感、匝数、线径都耦合在一起而且受工作频率影响很大。所以我最终没有把效率直接写进目标函数而是作为约束项处理在设计的工作频率下估算损耗占比如果超过预设阈值就罚掉这个个体。这样既保留了效率的控制能力又避免多个目标之间权重难调的问题。3. 编码、约束与目标函数遗传算法落地前的三个关键设计3.1 哪些几何参数作为设计变量遗传算法编码的第一步是明确哪些参数“允许进化”哪些参数“固定不变”。固定参数来自系统需求比如两线圈的最小隔离距离由耐压决定工作频率由电路拓扑决定线圈的最大外径由结构空间决定。把这些固定下来不只是为了方便更是为了让遗传算法在一个合理的可行域内搜索。我的变量集合如下变量含义取值范围类型r_in线圈内半径3到8 mm连续h_coil线圈轴向长度4到15 mm连续n_layer层数1到4层整数n_turn每层匝数3到12匝整数d_wire线径0.15到0.6 mm连续d_gap两线圈轴向间距1到6 mm连续l_layer层间绝缘厚度0.1到0.5 mm连续这里特意把内半径和轴向长度作为独立变量而不是让它们通过“外半径”间接绑定。因为对内半径直接建模可以让遗传算法更自由地搜索不同长径比的线圈形状而不会因为参数冗余而拖慢收敛。层数和每层匝数作为整数变量单独编码避免出现“半匝”这种物理上不存在的解。把变量定成这样之后整个搜索空间看起来不大但如果网格搜索连续变量加上离散组合可能的方案也有几十万种这正是遗传算法该出场的地方。3.2 目标函数与罚函数设计目标函数是这次优化的灵魂。第一版我直接用加权和score w1 * (1 - k) w2 * (V / V_max)结果很糟糕。k是无量纲量在0.3到0.7之间变化而V的单位是立方毫米轻轻松松从几十变到几千。由于量纲差异优化算法几乎完全无视耦合系数把所有个体都推向了“做小”的方向产出一堆耦合系数只有0.3的小不点。这是我踩过的第一个大坑。正解是先归一化再加权把所有指标都压到同一个量级score w1 * (1 - k) / k_norm w2 * V / V_norm w3 * P_loss / P_norm其中k_norm、V_norm、P_norm分别取目标区间的特征值让三个分项的数值都在0到1附近浮动。权重w1、w2、w3按项目侧重调节。对驱动应用我使用w10.6、w20.3、w30.1优先保耦合其次压体积损耗作为辅助项如果是功率传输应用w3会提高。约束条件用罚函数实现原边电感超出目标区间、耦合系数低于最低要求、外径超过机械限制都会在score上叠加一个足够大的惩罚项。惩罚幅度要留个缓冲不能太“狠”否则算法渐进收敛时会因为超出约束一点点就完全拒绝潜在好解。我的经验是让惩罚项在约束边界附近连续变化而不是一个阶跃。3.3 混合编码与取整策略遗传算法的个体编码我采用实数为主、整数为辅的混合方案。连续变量直接用实数基因整数变量用一个实数值加“取整”操作。这种做法实现简单交叉、变异都能复用一套算子但取整会带来一个副作用相邻的实数值取整后可能变成同一个整数导致种群多样性下降。解决方法是引入离散因子。对匝数、层数这类离散变量我在变异时以一定概率直接跳到相邻整数值而不是在原值附近微调。这样既保证了整数约束又不会因为取整操作把搜索空间压死。比如某层匝数基因当前为7.3取整后是7变异时允许它以一定概率直接变成6或8模拟整数变量的离散邻域搜索。这个方法在后面的优化中证明非常有效收敛速度和解的质量都比单纯“实数取整”要好。4. 优化过程实录种群参数、收敛曲线与典型结果4.1 初始种群与遗传算子配置遗传算法的参数设置没有万能配方不同问题的特征差异很大。我在这个项目上的配置如下供参考参数设定值说明种群规模60个体太少会早熟太多则每代耗时增加最大进化代数150实测50代后已基本收敛150代是为了确认稳定交叉概率0.85用模拟二进制交叉兼顾收敛速度与分布性变异概率0.12多项式变异变异步长随代数递减选择方式锦标赛选择锦标赛规模取3保持选择压力精英保留每代前2个保证最优解单调不差初始种群我用均匀随机初始化并强制覆盖整个设计空间的边界。这里有个小细节只在可行域内部随机抽样会让算法前期花大量时间探索边界而我更希望它一开始就拥有一些接近边界极限的个体因为它们往往代表“小体积高耦合”的极端权衡解。做法是先在全矩形域采样再把明显违反硬约束的个体重新初始化保留余下个体作为种群起点。4.2 单次典型优化的收敛过程第一次完整跑完150代我把每一代的最优适应度记录画成曲线典型形态是前25到30代适应度快速下降大概从初始随机种群的0.8左右降到0.35附近之后进入缓慢改善期50代以后曲线基本贴着某个极限值走每代的改进不到0.005。这个现象很典型。快速下降阶段对应的是“低垂的果实”——比如把线圈间距从5毫米收到2毫米、把层数从1层加到2层这类肉眼可见的改进缓慢改善期则是更精细的权衡比如在“多绕一圈提升耦合”和“体积膨胀被罚”之间找平衡点。如果只看前30代的曲线你可能会觉得已经收敛了但把后续几十代的结果拿去有限元复核会发现50代后的解在约束裕度上明显更稳健。表下是一组有代表性的优化前后对比数据来自一个目标为最大化耦合系数、同时限制原边电感在1.5到2.5微亨、最大外径不超过14毫米的优化任务指标手工初版设计遗传算法优化解变化耦合系数 k0.430.6244%原边自感 L11.8 uH2.1 uH进入目标区副边自感 L21.5 uH1.9 uH略升线圈外径13.5 mm11.8 mm-13%体积估算算例偏大缩小约28%约束满足这个结果不是偶然的一代最优而是多次运行后都能稳定复现的水平。关键不只是k值涨了而是体积还缩小了整体设计从“草稿”变成了“紧凑且可用的工程方案”。4.3 多次运行与统计结果遗传算法是随机算法只跑一次不具备说服力。我用10个不同的随机种子分别跑了一遍每次150代把最终个体的目标函数值收集起来看分布。结果最差的一次也在目标函数值0.31附近最好的一次在0.28差距很小。10次运行中胜出的个体集中在几个相近的区域两线圈间距在一个较窄的范围线圈直径和长度比值稳定在一个特定区间匝数和层数则存在多个等效组合。这让我意识到优化算法给的不是“唯一正确答案”而是一块几何参数平台。只要落在这块平台上性能都接近最优差距在几个百分点以内。从这个角度看遗传算法更像是在帮我把整个高性价比设计区域找出来而不是非要逼我硬选某一个点。后来做实物的时候我就把平台区域中心附近的参数取整后拿去打样结果和仿真对得上。5. 从解析模型到有限元再到实物的三级验证5.1 有限元复核解析模型的误差边界解析模型再快也不能替代场仿真。我选取遗传算法输出的前5个精英个体在电磁场有限元软件里建立轴对称模型设置1MHz正弦激励通过频域求解提取电感矩阵。网格剖分时对线圈截面做局部加密空气域延伸到足够远确保磁场边界不对结果产生明显影响。对比下来解析模型的自感结果普遍比有限元低5%到15%互感结果则相对更准一些耦合系数的误差大概在3%到8%之间。这个系统性偏差主要来自解析模型对内层线圈端部磁场收缩的简化处理——磁场在端部会向外膨胀导致实际电感比估算值略高。耦合系数之所以误差较小是因为自感和互感的偏差方向一致部分相互抵消了。这说明一件事遗传算法内部用解析模型做排序是完全可行的因为它能正确区分“好个体”和“差个体”但最终定稿之前必须用有限元数值给出修正值。把解析模型算出来的k等于0.62直接当最终设计值是不严谨的。有限元复核之后那个解的实际k落在0.59到0.60区间仍然显著优于手工初版。5.2 样机绕制与电感测量复核通过的参数我手工绕制了两个同轴螺线管样机。绕制时用了三层结构、李兹线绕制绕线张力尽量保持一致每层之间垫了聚酰亚胺薄膜绝缘。实测环节我先用阻抗分析仪分别测原副边的自感L1和L2再把两个线圈串联“顺接”测一次总电感然后“反接”测一次总电感两个总电感之差除以4就得到互感MM (L_顺 - L_反) / 4这个方法是测量同轴线圈互感最朴素也最可靠的办法。实测结果是优化解对应样机的k实测约0.58有限元预测0.59到0.60解析模型预测0.62。三级数据链条完整误差链条也清晰解析模型偏乐观有限元比实物略高实物存在手工绕制的几何误差和引出线寄生电感。对这个体量的无磁芯变压器来说k误差在5%以内已经属于可接受范围。5.3 测量结果反馈到模型参数三级验证的价值不只是“确认了结果”更重要的是反过来校准模型。我把实测自感与解析模型直接计算的结果做差反推了一个“边缘效应修正系数”然后再用修正后的解析模型去重新评估种群里的其他个体。这样下一轮优化甚至在迭代阶段就能给出更接近实物水平的估计而不是等到实物出来后才发现方向有偏差。我个人的体会是这种“优化—仿真—实测”三段闭环的思路比单纯追求某一种建模手段的精度要划算得多。遗传算法并不需要零误差的适应度函数它只需要一个排序基本正确的适应度函数而精确值在链路末端用有限元和实物去校准就好。把最强的计算引擎浪费在每一次适应度评价上反而会让整个优化流程慢到失去工程意义。6. 遗传算法跑无磁芯变压器时的常见坑与处理经验6.1 适应度函数里的量纲权重陷阱前面提到的那次“目标函数量纲失衡”其实是这类项目中最高频的问题。两个目标的数值范围相差悬殊时算法一定会优先优化数值更大的那个。即使做了归一化权重比例依然需要经验校准。稳妥做法是先跑一轮不带权重的多目标观察Pareto前沿的大致范围再回头确定权重。比如我发现k的上限大概在0.65附近体积下限在某个值就把归一化基准设置成这个量级权重才真正反映“我更在意哪个指标”。6.2 公式外推造成的“伪最优”解析公式都有适用范围。我一开始把线圈间距拉到很大的区间里去搜索结果解析模型给出一个奇特的“最优解”间距极小、线圈极短、k值高达0.7。拿到有限元里一算实际k只有0.5因为间距太近时线圈端部磁场相互排斥的效应变得显著而解析模型完全没有考虑这一点。这就是典型的公式外推问题。解决思路是在解析模型内部加“适用域守卫”当某个参数组合超出公式可靠范围时直接给适应度加上惩罚或者回退到有限元计算该个体。选变量上下限时要基于物理常识和公式推导的适用范围而不是凭感觉给一个宽泛区间。6.3 取整操作毁掉了漂亮解遗传算法搜索时采用实数基因但匝数必须是整数。问题出在交叉和变异的连续性上当一个个体解码后得到“7.6匝”这样的基因取整变成8另一个个体基因是8.4取整也是8它们在表现型上是同一个解但基因型却相差很远。这会导致两个问题种群中重复的“表现型个体”变多有效种群规模变小取整后的个体邻域搜索失效局部精调只能靠连续变量整数变量几乎静止。改用离散变异策略后匝数基因在整数邻域内有了明确的移动概率种群的多样性明显改善最终解也更理想。这可能是混合整数编码问题里最容易被忽略的一环。6.4 批量有限元仿真的成本控制最开始的方案是对每个个体都跑有限元结果单次优化要跑上万次仿真根本不可能。后来调整为“解析快速筛选 有限元终审候选精英”整体时间缩减了两个数量级。这个两阶段思想可以直接复用遗传算法本身不用改变变的只是适应度函数的实现层级。具体操作上我在每一代里只取当前最优的前3到5个个体做有限元评估把结果存进一个查表缓存。下一轮如果又出现基因相近的个体直接读缓存省去重复仿真。到第150代结束全部有限元调用次数控制在20到30次全程耗时在可接受范围内。6.5 不同随机种子下的稳定性判断还有一次某一代跑出来的“最优个体”明显偏离所有前代趋势适应度大幅跳变看起来像是突破。后来排查发现是变异概率在那一代产生了极端值生成一个位于公式适用范围边缘的基因组合解析模型被外推骗了。自那以后我每次优化都固定随机种子同时跑多个种子只有那些在不同种子下都能复现的高质量区域才被采纳作为打样依据。一个靠运气跑出来的解不值得信任即便它表现得再漂亮。运行完这一整个流程后无磁芯变压器的优化仿真就不再神秘了。它最本质的流程就是把物理器件翻译成数学参数让遗传算法在参数空间里替他找到那片值得深耕的平台再用场仿真和实物去验证。遗传算法本身不是魔法真正决定成败的是建模的精度和约束定义的质量。如果你想复现这个流程我的建议是先从单目标优化跑通闭环再逐步加入体积、损耗等约束别一上来就追求复杂的多目标否则出了问题你都分不清是算法的问题还是模型的问题。最后分享一个我在这个项目里养成的习惯每一轮优化结束后都把解析模型预测值、有限元复核值、样机实测值记在同一张表里。连续积累三轮之后你对自己建立的解析模型的系统偏差就有了很准确的把握下次再跑优化时甚至可以提前对输出结果做一次经验修正。这个习惯的价值在时间越长的项目里体现得越明显。