光伏波动下主动配电网有功无功协调优化:二阶锥松弛与源程序实战
简介这份资源面向电气工程、新能源方向的毕业设计与科研入门者围绕分布式光伏接入配电网后潮流方向不确定、节点电压越限等问题提供有功无功协调优化的完整程序实现。核心思路是让光伏无功出力与静止无功发生器SVG协调控制以网损和电压偏移最小为目标建立多目标优化模型并采用基于Pareto最优解的多目标粒子群算法求解通过拥挤距离排序形成小生境、结合外部档案维护与全局最优选取抑制早熟收敛。压缩包共44个文件以38个m脚本为主辅以4个mat数据文件、1个png结果图与1个txt说明整体约290KB涵盖潮流计算、指标评估与算法主流程等模块。已有180人学习适合希望复现算例、理解多目标优化与配电网无功协调策略的读者参考。1. 光伏波动下的配电网优化从论文到源程序这套方案到底值不值得跑光伏出力受云层、温度、辐照度影响分钟级波动能到额定功率的 30% 以上主动配电网里如果只做有功调度、不管无功节点电压就会像坐过山车。这篇论文《计及光伏波动性的主动配电网有功无功协调优化》要解决的核心问题就一个在光伏出力不确定的前提下怎么让配电网的有功损耗最小、电压偏差最小同时把逆变器的无功调节能力用起来。配套源程序的价值在于它把论文里的二阶锥松弛、场景生成、时序优化这些步骤变成了可运行的代码而不是只留在公式里。适合谁做分布式光伏并网、配电网调度、微电网能量管理的工程师和研究生尤其是需要复现论文结果、改参数做自己课题的人。如果你正在找一套能跑通的有功无功协调优化框架这套源程序值得花时间拆开看。2. 有功无功协调优化的数学骨架目标函数、约束与二阶锥松弛2.1 为什么不能只做有功优化配电网里有功和无功是耦合的。光伏逆变器通常按单位功率因数运行只发有功但逆变器容量 S 固定有功 P 发多了无功 Q 的调节裕度就小了。反过来如果让逆变器吸收或发出无功就能在不增加硬件成本的前提下调节节点电压。论文的核心思路是把逆变器的无功能力当作连续变量和传统无功补偿设备电容器组、SVG一起参与优化。目标函数一般写成三项加权网损最小、电压偏差最小、光伏弃光量最小。权重系数根据实际需求调比如电压越限严重就加大电压偏差项的权重。约束包括潮流方程、逆变器容量约束、节点电压上下限、线路电流限值、无功补偿设备出力范围。潮流方程是非线性的直接求解容易陷入局部最优所以论文用了二阶锥松弛SOCP把非凸约束转化成凸约束。提示二阶锥松弛的精确性需要验证松弛间隙不为零时结果不可用。常见做法是检查松弛后的锥约束是否取等号。2.2 光伏波动性的建模方式光伏波动性不能只用一条确定性曲线代替。论文里通常用场景法或鲁棒优化。场景法先根据历史数据生成大量光伏出力场景再用 K-means 或快速前代消除法缩减到 510 个典型场景每个场景配一个概率。目标函数变成场景期望值。鲁棒优化则考虑最恶劣场景但结果偏保守。源程序里一般会有一个scenario_generation.py或类似模块输入是历史辐照度和温度数据输出是场景矩阵和概率向量。如果你手头没有实测数据可以用 Beta 分布拟合辐照度或者用正态分布拟合预测误差。超短期光伏功率预测的误差通常在 10%20%这个误差水平直接影响场景生成的合理性。2.3 二阶锥松弛的实现步骤以支路潮流模型为例配电网辐射状结构下潮流方程可以写成 DistFlow 形式。定义支路 ij 的电流平方为 l_ij电压平方为 v_i有功无功分别为 P_ij、Q_ij。松弛后的约束为# 二阶锥松弛核心约束Python CVXPY 风格 # v_i, v_j: 节点电压平方变量 # P_ij, Q_ij: 支路有功无功变量 # l_ij: 支路电流平方变量 # r_ij, x_ij: 支路电阻电抗 constraints [ v_j v_i - 2*(r_ij*P_ij x_ij*Q_ij) (r_ij**2 x_ij**2)*l_ij, # 二阶锥约束电流平方 * 电压平方 有功平方 无功平方 # CVXPY 中写成 SOC 形式 cp.SOC(v_i l_ij, cp.vstack([2*P_ij, 2*Q_ij, v_i - l_ij])) ]这段代码的逻辑是DistFlow 方程本身是线性的但 l_ij 和 v_i 的关系是非线性的。二阶锥松弛把l_ij * v_i P_ij^2 Q_ij^2这个非凸约束放松成锥约束使问题变成凸优化。参数说明r_ij和x_ij从配电网参数表读取v_i的上下限对应电压标幺值 0.951.05l_ij上限对应线路载流量。求解器一般用 MOSEK、GUROBI 或 CPLEX开源可以用 SCS 或 ECOS但大规模系统建议用商用求解器。注意松弛后如果l_ij * v_i严格大于P_ij^2 Q_ij^2说明松弛不精确需要检查是否因为目标函数中网损项系数太小导致。常见修正方法是加一个很小的惩罚项迫使锥约束收紧。3. 源程序跑通实录环境、数据、求解与结果验证3.1 环境配置与依赖安装源程序通常是 MATLAB YALMIP 求解器或者 Python CVXPY。MATLAB 版本对配电网优化更友好因为很多配电网测试系统IEEE 33、IEEE 69的算例是 .m 文件。Python 版本更适合集成到实际调度系统。# Python 环境推荐 3.93.11 conda create -n pv_opt python3.10 conda activate pv_opt pip install cvxpy numpy pandas matplotlib scipy scikit-learn # 求解器ECOS 免费MOSEK 需要许可证 pip install ecos # 如果要用 MOSEK pip install mosekMATLAB 环境需要安装 YALMIP 工具箱和至少一个求解器如 GUROBI、CPLEX 或 SDPT3。YALMIP 的优点是建模语言简洁但调试不如 Python 方便。3.2 数据准备光伏场景与配电网参数源程序一般需要三类数据配电网拓扑和线路参数、节点负荷曲线、光伏出力场景。配电网参数通常以表格形式给出包括支路首末端节点、电阻、电抗、有功负荷、无功负荷。光伏场景可以用论文里的典型日曲线也可以自己生成。import numpy as np from sklearn.cluster import KMeans # 生成 1000 个光伏出力场景简化示例 np.random.seed(42) n_scenarios 1000 n_hours 24 base_curve np.sin(np.linspace(0, np.pi, n_hours)) # 理想日出力曲线 scenarios [] for _ in range(n_scenarios): # 云层扰动随机缩放 噪声 scale np.random.uniform(0.6, 1.0) noise np.random.normal(0, 0.05, n_hours) scenario np.clip(base_curve * scale noise, 0, 1) scenarios.append(scenario) scenarios np.array(scenarios) # K-means 缩减到 5 个典型场景 kmeans KMeans(n_clusters5, n_init10, random_state42) labels kmeans.fit_predict(scenarios) typical_scenarios kmeans.cluster_centers_ probabilities np.bincount(labels) / n_scenarios print(场景概率, probabilities)这段代码的逻辑是先用正弦曲线模拟理想光伏出力再叠加随机缩放和噪声模拟云层遮挡。K-means 把 1000 个场景聚成 5 类每类的中心作为典型场景概率用该类样本占比表示。参数说明scale范围 0.61.0 对应不同云层覆盖率noise标准差 0.05 对应预测误差约 5%。实际使用时应该用历史数据替代模拟数据场景数一般取 510太少会丢失波动信息太多会拖慢求解速度。3.3 优化模型求解与结果读取模型建好后调用求解器。以 CVXPY 为例import cvxpy as cp # 变量定义简化假设 3 个节点1 个光伏1 个电容器 v cp.Variable(3, nonnegTrue) # 电压平方 P cp.Variable(3) # 有功注入 Q cp.Variable(3) # 无功注入 l cp.Variable(3, nonnegTrue) # 电流平方 # 目标网损 电压偏差 objective cp.Minimize( cp.sum(cp.multiply(r, l)) # 网损项 0.1 * cp.sum_squares(v - 1.0) # 电压偏差项权重 0.1 ) # 约束示例 constraints [ v[0] 1.0, # 根节点电压固定 P[1] pv_power - load_p[1], # 节点 1 有功平衡 Q[1] q_pv - load_q[1], # 节点 1 无功平衡 cp.SOC(v[1] l[1], cp.vstack([2*P[1], 2*Q[1], v[1] - l[1]])), v 0.95**2, v 1.05**2, # 电压约束 cp.abs(Q[1]) 0.5 # 逆变器无功容量约束 ] prob cp.Problem(objective, constraints) prob.solve(solvercp.ECOS, verboseTrue) print(最优网损, prob.value) print(节点电压, np.sqrt(v.value))逻辑说明目标函数里网损项直接对应线路电阻乘以电流平方电压偏差项用平方和衡量。约束里根节点电压固定为 1.0节点 1 的有功无功平衡把光伏出力和负荷都算进去。二阶锥约束保证电流电压关系成立。参数说明r是线路电阻向量pv_power是当前场景下光伏有功出力q_pv是逆变器无功出力优化变量load_p和load_q是负荷。求解器返回prob.value是最优目标值v.value是电压平方开根号得到电压标幺值。3.4 结果验证三个必查项跑通不代表结果对。我一般会查三件事第一电压是否在 0.951.05 之间如果越限说明约束没生效或者松弛有问题第二网损是否比不优化时低如果反而高了说明目标函数权重或约束写错了第三逆变器无功出力是否在容量范围内如果超出说明容量约束没加对。另外二阶锥松弛的间隙可以用l_ij * v_i - (P_ij^2 Q_ij^2)检查理想情况应该接近零。4. 避坑与排查源程序跑不通时先看这五条4.1 求解器报 infeasible 或 unbounded现象CVXPY 返回infeasible或unboundedMATLAB YALMIP 报NaN。原因约束矛盾比如电压上下限和潮流方程冲突或者光伏出力场景功率过大导致无法满足负荷。解决先放宽电压约束到 0.91.1 跑一遍确认模型能解再逐步收紧找到冲突的约束。另外检查根节点电压是否固定如果没固定电压可能漂移到无穷大。4.2 二阶锥松弛不精确导致电压结果偏乐观现象求解成功但电压全部在 1.0 附近网损极低看起来“太完美”。原因松弛后的锥约束没有收紧求解器找到了一个数学上可行但物理上不成立的解。解决在目标函数里加一个很小的惩罚项比如1e-4 * cp.sum(l)迫使电流平方尽量小。或者用cp.SOC的等价形式检查对偶变量是否满足互补松弛条件。4.3 光伏场景概率之和不为 1现象场景法优化结果对某些场景过于敏感。原因K-means 聚类后概率用样本占比计算如果样本数不能被簇数整除概率和可能略偏离 1。解决归一化概率向量probabilities probabilities / probabilities.sum()。另外检查是否有空簇空簇会导致中心点无意义。4.4 逆变器无功容量约束写错方向现象优化结果里逆变器无功出力远超额定容量。原因容量约束写成Q S但忘了Q -S或者把S写成有功上限。解决逆变器容量约束是P^2 Q^2 S^2在二阶锥形式下写成cp.SOC(S, cp.vstack([P, Q]))。如果只考虑无功可以简化为cp.abs(Q) sqrt(S^2 - P^2)但注意P是变量时这个约束是非线性的。4.5 时序耦合约束遗漏导致储能或电容器动作频繁现象优化结果里电容器组每小时投切好几次实际设备根本不允许。原因模型只做了单时段优化没有加时序耦合约束。解决如果是多时段优化加电容器日投切次数上限约束比如sum(|u_t - u_{t-1}|) 5。储能加 SOC 连续性约束和充放电功率约束。光伏逆变器无功调节一般允许连续变化但也要加爬坡率限制。5. 从跑通到用起来把源程序改成自己的算例5.1 替换配电网拓扑和参数源程序默认用 IEEE 33 节点系统。换成自己的配电网需要改三个地方支路参数表、节点负荷表、光伏接入位置。支路参数表一般是一个矩阵每行是[首节点, 末节点, 电阻, 电抗, 有功负荷, 无功负荷]。注意节点编号从 1 开始还是从 0 开始MATLAB 习惯从 1 开始Python 习惯从 0 开始改的时候全局替换。# 自定义配电网参数示例3 节点系统 # 支路数据[首节点, 末节点, r, x, P_load, Q_load] branch_data np.array([ [0, 1, 0.05, 0.03, 0.5, 0.2], [1, 2, 0.04, 0.02, 0.3, 0.1] ]) # 光伏接入节点 1容量 1.0 MW pv_bus 1 pv_capacity 1.0 # 电容器接入节点 2容量 0.3 Mvar cap_bus 2 cap_capacity 0.3参数说明r和x是标幺值还是有名值要统一一般配电网优化用标幺值基准功率 1 MVA 或 10 MVA。P_load和Q_load是节点负荷正数表示消耗。光伏接入节点和容量根据实际情况改。电容器容量如果是分组投切需要加整数变量求解会变慢可以先用连续变量跑通再改整数。5.2 调整目标函数权重论文里权重系数是固定的但实际工程中要根据需求调。电压偏差严重时把电压偏差项权重从 0.1 调到 1.0 甚至更高。弃光严重时加弃光惩罚项。网损和电压偏差的量纲不同网损是 MW电压偏差是标幺值平方直接加权可能不平衡。常见做法是归一化网损除以基准网损电压偏差除以最大允许偏差。# 归一化目标函数 base_loss 0.1 # 基准网损MW max_voltage_dev 0.05 # 最大允许电压偏差 w_loss 0.6 # 网损权重 w_voltage 0.4 # 电压权重 objective cp.Minimize( w_loss * cp.sum(cp.multiply(r, l)) / base_loss w_voltage * cp.sum_squares(v - 1.0) / (max_voltage_dev**2) )这样两项都在 01 量级权重调整更直观。w_loss和w_voltage之和不一定等于 1可以根据偏好设。如果只关心电压w_voltage设 1.0w_loss设 0.01 防止网损过大。5.3 验证方法和潮流结果对比优化结果必须用潮流计算验证。把优化得到的逆变器无功出力、电容器投切状态代入潮流计算看电压和网损是否和优化结果一致。如果偏差超过 5%说明松弛不精确或者约束写错了。常用工具MATPOWERMATLAB、pandapowerPython。pandapower 可以直接读 Excel 参数表适合快速验证。import pandapower as pp # 创建 3 节点网络 net pp.create_empty_network() b0 pp.create_bus(net, vn_kv10.0) b1 pp.create_bus(net, vn_kv10.0) b2 pp.create_bus(net, vn_kv10.0) pp.create_ext_grid(net, b0) pp.create_line(net, b0, b1, length_km1.0, std_typeNA2XS2Y 1x95 RM/25 12/20 kV) pp.create_line(net, b1, b2, length_km1.0, std_typeNA2XS2Y 1x95 RM/25 12/20 kV) pp.create_load(net, b1, p_mw0.5, q_mvar0.2) pp.create_load(net, b2, p_mw0.3, q_mvar0.1) pp.create_sgen(net, b1, p_mw0.8, q_mvar0.1) # 光伏 逆变器无功 pp.runpp(net) print(net.res_bus.vm_pu) print(net.res_line.pl_mw.sum())这段代码用 pandapower 建了一个 3 节点网络光伏用create_sgen表示q_mvar设成优化得到的无功出力。runpp跑潮流res_bus.vm_pu是电压标幺值res_line.pl_mw.sum()是总网损。对比优化结果和潮流结果如果电压差在 0.001 以内、网损差在 1% 以内说明模型可信。5.4 一个具体技巧用热启动加速多场景求解多场景优化时每个场景单独求解很慢。可以把上一个场景的解作为下一个场景的初始值求解器会快很多。CVXPY 不支持直接热启动但可以用prob.solve(warm_startTrue)或者把上一个场景的变量值作为约束的初始点。MATLAB YALMIP 支持optimize的usex0选项。另一个技巧是把场景法改成两阶段先解一个确定性场景得到基准解再在基准解附近搜索其他场景减少变量维度。我自己的习惯是每次改完参数先跑一个场景确认模型能解再跑多场景。如果多场景跑不动先减到 3 个场景确认结果合理后再加。这套源程序最大的价值不是代码本身而是它把论文里的公式变成了可调试的变量和约束你可以逐行改、逐行看结果。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

‘rea’技术含义解析:常见缩写、歧义场景与工程识别方法

‘rea’技术含义解析:常见缩写、歧义场景与工程识别方法

项目标题为“rea”,当前无有效上下文(项目正文、关键词、摘要描述均为空),且提供的相关热搜词与网络搜索内容也为占位符空值(仅显示 ),未提供任何实质信息。 根据任务定义,我的全…

2026/10/13 16:52:40 阅读更多 →
数论基础学习路线:从快速幂到中国剩余定理的实战指南

数论基础学习路线:从快速幂到中国剩余定理的实战指南

很多刷算法题的人,一听到"数论"两个字就头疼,总觉得一堆定理绕来绕去,学了也不知道能不能拿分。我前前后后把《算法竞赛入门经典》第十章数学部分和kuangbin专题14数论基础刷了两遍,一个很直观的感受是:数论…

2026/10/13 16:52:40 阅读更多 →
三相PWM整流器无锁相环控制:从ABC坐标系到工程落地全解析

三相PWM整流器无锁相环控制:从ABC坐标系到工程落地全解析

三相PWM整流器调试,最怕的就是锁相环在弱电网下“抖腿”。我在某实验室调一台整流器样机时,把网侧换成长距离线路模拟,一加载,锁相环输出的频率和相位就开始来回摆,电流波形出现低频包络,直流母线电压跟着起…

2026/10/14 17:26:39 阅读更多 →

最新新闻

TypeScript协议适配:将Claude Code前端无缝对接Deepseek模型

TypeScript协议适配:将Claude Code前端无缝对接Deepseek模型

1. 这不是“换壳”,而是一次精准的协议层手术“80行 TypeScript Mods,把 Claude Code 改造成 Deepseek Harness”——这个标题乍看像极了某些技术圈里常见的“魔改教程”,但实际操作中,我很快意识到:它根本不是在 UI 上…

2026/10/14 19:57:05 阅读更多 →
高效贡献开源Hermes agent:从源码阅读到PR合入的完整路线

高效贡献开源Hermes agent:从源码阅读到PR合入的完整路线

1. 为什么值得把精力花在贡献 Hermes agent 上先说一个很多人的误解:贡献开源项目不等于闷头写代码,尤其像 Hermes agent 这类项目,它是一个持续推进的工程产物,有设计取舍、有兼容负担、也有社区协作的规范。第一次接触时容易觉得…

2026/10/14 19:57:05 阅读更多 →
DOM遍历不是for循环:深度优先与广度优先的工程选型指南

DOM遍历不是for循环:深度优先与广度优先的工程选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:57:05 阅读更多 →
ESP32-S3开发板入门:从环境搭建到GPIO、PSRAM与USB应用全解析

ESP32-S3开发板入门:从环境搭建到GPIO、PSRAM与USB应用全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:57:05 阅读更多 →
FPGA现货采购避坑指南:从型号解读到验货实战

FPGA现货采购避坑指南:从型号解读到验货实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:57:05 阅读更多 →
手写负载均衡:从轮询到一致性哈希的算法与工程实践

手写负载均衡:从轮询到一致性哈希的算法与工程实践

手写负载均衡这件事,听起来像是业务代码写多了自娱自乐,但真把它当回事做一遍的人,对分布式流量的理解完全不一样。很多时候我们一直在用现成组件——Nginx、LVS、各种注册中心自带的负载策略——出了问题只能对着文档调参数,根本…

2026/10/14 19:56:03 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →