水风光互补调度与净现值计算:MATLAB资源包实战指南

简介:本资源面向计算机、电子信息工程、数学等专业的大学生及新能源调度方向研究者,提供水风光互补调度系统的净现值计算与不同网格装机容量、出力系数影响分析的完整MATLAB实现方案,可用于课程设计、期末大作业与毕业设计。压缩包共18个文件,约475KB,包含12个m脚本、3个xlsx数据表、1个docx说明、1个md文档及1个py脚本,覆盖参数化建模、案例数据与结果记录等环节。代码采用参数化编程,参数可方便更改,编程思路清晰且注释明细,附赠案例数据可直接运行,便于读者快速复现不同情景下的调度策略与经济评价。目前已有37人学习下载,适合希望掌握互补调度建模、净现值测算与出力系数敏感性分析的读者参考借鉴。

1. 水风光互补调度遇上净现值:一份能直接跑的 MATLAB 资源包

做新能源出力波动分析的人迟早会撞上一个问题:风电、光伏、水电三种电源的出力特性完全不同,单独看每个电源的经济性意义不大,真正要算的是互补之后的综合效益。而综合效益最终要落到一个财务指标上——净现值(NPV)。这份资源包围绕的就是这件事:用 MATLAB 实现水风光互补调度模型,在不同网格装机容量和出力系数组合下计算净现值,帮你在规划阶段快速筛选出经济性最优的容量配比方案。

它适合三类人:做新能源规划的研究生、负责项目前期测算的工程师、以及需要快速验证容量配置思路的技术人员。资源包里是完整的 MATLAB 脚本和函数文件,不是伪代码,拿到手改几个参数就能跑出自己的结果。下面我从模型结构、参数设置、代码实现到踩坑排查,把这份资源拆开讲清楚。

2. 互补调度模型的数学骨架:从出力曲线到净现值

2.1 为什么用净现值而不是度电成本

做容量规划时,很多人第一反应是算平准化度电成本(LCOE),但 LCOE 有个问题:它假设所有发电量等价,而水风光互补系统里,水电的调节能力是有额外价值的——它能平抑风光出力波动,让整个系统对电网更友好。这个调节价值在 LCOE 里体现不出来,但在 NPV 里可以通过售电收入、容量补偿等现金流体现。

净现值的核心逻辑是把项目全生命周期内的现金流按折现率折算到当前时刻:

$$NPV = \sum_{t=1}^{T} \frac{CF_t}{(1+r)^t} - C_0$$

其中 $CF_t$ 是第 $t$ 年的净现金流,$r$ 是折现率,$C_0$ 是初始投资。在水风光互补场景下,$CF_t$ 由三部分构成:售电收入、运维成本、以及可能的容量补偿收益。售电收入又取决于调度策略——这就是为什么必须把调度模型和财务模型耦合在一起算。

资源包里的做法是:先对每个网格点(装机容量组合)跑一遍全年 8760 小时的调度模拟,得到逐时出力曲线,再根据出力曲线算年发电量和现金流,最后折现求 NPV。这个流程听起来直接,但实操中有几个参数设置会显著影响结果,下面逐个说。

2.2 网格搜索的参数空间怎么定

资源包的核心设计是“网格装机容量和出力系数”的组合遍历。具体来说,风电装机容量、光伏装机容量、水电装机容量各取一组离散值,形成三维网格;出力系数则反映不同电源的实际出力与额定容量的比值关系。

我一般会把风电装机容量从 100MW 到 500MW 按 50MW 步长取 9 个点,光伏从 50MW 到 300MW 按 50MW 取 6 个点,水电从 50MW 到 200MW 按 50MW 取 4 个点,总共 216 种组合。每种组合跑一次调度,计算 NPV,最后找出 NPV 最大的组合。

出力系数的设置更微妙。风电出力系数不是常数,它随季节和时段变化;光伏出力系数在夜间为零,白天呈钟形曲线;水电出力系数则取决于水库调度策略。资源包里用典型日曲线来近似,把全年分为 12 个月,每月用一个典型日的 24 小时出力系数曲线代表。这样做的好处是计算量可控,缺点是忽略了极端天气的影响。如果你的项目对极端场景敏感,需要把典型日换成实际历史数据。

注意:出力系数的单位是“标幺值”,即实际出力与额定容量的比值,取值范围 0 到 1。如果你拿到的数据是实际出力(MW),需要先除以额定容量再输入模型。

2.3 调度策略的约束条件

互补调度的约束条件直接决定 NPV 的上限。资源包里实现了三类约束:

第一类是功率平衡约束:风电出力 + 光伏出力 + 水电出力 = 系统总出力,必须满足负荷需求。如果总出力超过负荷,多余电量要么弃掉,要么通过水电蓄能存储。

第二类是水电约束:水库有库容上限和下限,发电流量有最大值和最小值,还要考虑上下游水位关系。资源包里用简化模型处理,只保留库容约束和发电流量约束,忽略水头变化对出力的影响。

第三类是爬坡约束:水电的出力调整速率有限制,不能瞬间从最小出力跳到最大出力。这个约束在风光波动剧烈时特别重要,如果忽略,算出来的 NPV 会偏乐观。

% 功率平衡约束示例 for t = 1:24 total_output(t) = wind_output(t) + solar_output(t) + hydro_output(t); if total_output(t) > load_demand(t) % 多余电量优先通过水电蓄能存储 surplus = total_output(t) - load_demand(t); storage(t) = min(surplus, storage_capacity - storage(t-1)); curtailment(t) = surplus - storage(t); else % 出力不足时,水电增加出力补足 deficit = load_demand(t) - total_output(t); hydro_output(t) = min(hydro_output(t) + deficit, hydro_max); end end

这段代码的逻辑是:先算三种电源的总出力,如果超过负荷,优先蓄能,蓄能满了才弃电;如果不足,让水电补足。参数方面,storage_capacity是水库蓄能上限,hydro_max是水电最大出力,这两个值需要根据实际工程参数设置。curtailment记录弃电量,这个值会直接影响售电收入,进而影响 NPV。

3. 净现值计算的代码实现:从现金流到折现

3.1 现金流构建的四个组成部分

NPV 计算的关键在于现金流构建。资源包里把年现金流拆成四块:初始投资、售电收入、运维成本、残值回收。

初始投资包括风电、光伏、水电的装机成本,以及配套的输电线路和储能设施。资源包里用单位千瓦造价乘以装机容量来估算,风电按 6000 元/kW,光伏按 4000 元/kW,水电按 12000 元/kW。这些数字是行业常见范围,你可以根据实际项目替换。

售电收入 = 年发电量 × 上网电价。年发电量由调度模型输出的逐时出力累加得到。上网电价资源包里默认设为 0.35 元/kWh,这个价格对风光水互补项目来说偏保守,实际项目中可能有绿证收益或容量补偿,需要额外加上。

运维成本按初始投资的一定比例估算,风电和光伏取 2%,水电取 3%。这个比例是经验值,实际项目中运维成本随运行年限递增,资源包里简化为常数。

残值回收在项目期末按初始投资的 5% 计算,折现到当前时刻。

% 现金流构建 initial_investment = wind_capacity * 6000 + solar_capacity * 4000 + hydro_capacity * 12000; % 元 annual_generation = sum(total_output) * 365; % kWh,假设典型日代表全年 annual_revenue = annual_generation * 0.35; % 元 annual_om_cost = initial_investment * 0.025; % 元 annual_net_cashflow = annual_revenue - annual_om_cost; % NPV 计算 discount_rate = 0.08; % 折现率 8% project_life = 20; % 项目寿命 20 年 NPV = -initial_investment; for year = 1:project_life NPV = NPV + annual_net_cashflow / (1 + discount_rate)^year; end NPV = NPV + initial_investment * 0.05 / (1 + discount_rate)^project_life; % 残值

这段代码里,annual_generation的计算用了“典型日 × 365”的简化,实际项目中应该用 12 个月典型日分别计算再累加。discount_rate设为 8% 是新能源项目的常见折现率,如果你做的是风险较高的项目,可以调到 10% 甚至 12%。project_life设为 20 年,风电和光伏的实际寿命可能达到 25 年,水电可以到 50 年,资源包里统一按 20 年算是为了简化对比。

3.2 网格遍历的向量化实现

216 种组合如果逐个跑循环,在 MATLAB 里大概需要几分钟。资源包里用了向量化操作来加速,核心思路是把所有组合的出力计算和 NPV 计算写成矩阵运算。

% 网格参数定义 wind_caps = 100:50:500; % 9 个值 solar_caps = 50:50:300; % 6 个值 hydro_caps = 50:50:200; % 4 个值 % 生成所有组合 [W, S, H] = meshgrid(wind_caps, solar_caps, hydro_caps); combinations = [W(:), S(:), H(:)]; % 216 × 3 矩阵 % 向量化计算 NPV NPV_results = zeros(size(combinations, 1), 1); for i = 1:size(combinations, 1) wind_cap = combinations(i, 1); solar_cap = combinations(i, 2); hydro_cap = combinations(i, 3); % 调用调度函数计算逐时出力 [total_output, ~] = dispatch_model(wind_cap, solar_cap, hydro_cap, wind_profile, solar_profile, hydro_profile, load_demand); % 计算 NPV NPV_results(i) = calculate_npv(total_output, wind_cap, solar_cap, hydro_cap); end % 找出最优组合 [max_npv, idx] = max(NPV_results); optimal_caps = combinations(idx, :); fprintf('最优装机容量:风电 %d MW,光伏 %d MW,水电 %d MW,NPV = %.2f 万元\n', optimal_caps(1), optimal_caps(2), optimal_caps(3), max_npv/10000);

meshgrid生成三维网格,combinations把网格拉平成 216 行 3 列的矩阵。循环里对每种组合调用dispatch_model和calculate_npv,这两个函数在资源包里是独立文件。max_npv和idx找出 NPV 最大值及其对应的组合。最后输出的 NPV 单位是元,除以 10000 转成万元更直观。

提示:如果你的电脑内存不够,可以把网格步长调大,比如风电从 100MW 到 500MW 按 100MW 步长取 5 个点,组合数降到 120 种,计算时间减半。

3.3 结果可视化与敏感性分析

算完 NPV 只是第一步,更重要的是看结果对参数的敏感程度。资源包里提供了两个可视化函数:一个是三维散点图,用颜色表示 NPV 大小;另一个是敏感性分析图,展示折现率、上网电价、装机成本变化时 NPV 的变化幅度。

% 三维散点图 figure; scatter3(combinations(:,1), combinations(:,2), combinations(:,3), 50, NPV_results, 'filled'); xlabel('风电装机容量 (MW)'); ylabel('光伏装机容量 (MW)'); zlabel('水电装机容量 (MW)'); colorbar; title('不同装机组合下的 NPV 分布'); % 敏感性分析:折现率从 6% 到 12% discount_rates = 0.06:0.01:0.12; NPV_sensitivity = zeros(length(discount_rates), 1); for j = 1:length(discount_rates) NPV_sensitivity(j) = calculate_npv_with_rate(total_output, wind_cap, solar_cap, hydro_cap, discount_rates(j)); end figure; plot(discount_rates, NPV_sensitivity/10000, 'o-'); xlabel('折现率'); ylabel('NPV (万元)'); title('NPV 对折现率的敏感性'); grid on;

散点图的颜色越深表示 NPV 越高,你可以直观看到哪个区域的组合经济性最好。敏感性分析图帮你判断:如果折现率从 8% 升到 10%,NPV 会下降多少。这个信息在向决策者汇报时特别有用——它能说明项目对融资成本的敏感程度。

4. 避坑与排查:跑不出结果时先看这五条

4.1 出力系数全为零导致 NPV 为负

现象:程序跑完,所有组合的 NPV 都是负的,且数值接近初始投资的负值。

原因:出力系数矩阵没有正确加载,或者单位搞错了。比如风电出力系数本应是 0.3 左右,结果输入的是 30(百分数形式),导致出力计算溢出后被截断为零。

解决:检查wind_profile、solar_profile、hydro_profile三个变量的取值范围。在 MATLAB 命令行输入max(wind_profile(:))和min(wind_profile(:)),确认最大值不超过 1,最小值不小于 0。如果是百分数形式,除以 100 再输入。

4.2 调度模型不收敛,出力曲线出现 NaN

现象:dispatch_model返回的total_output里有 NaN,后续 NPV 计算全部失效。

原因:约束条件冲突。比如水电最大出力设得比负荷需求还小,同时风电和光伏出力又不足以补足缺口,导致功率平衡方程无解。

解决:先检查hydro_max是否大于max(load_demand)。如果水电是主要调节电源,它的最大出力必须能覆盖负荷峰值。另外检查水库蓄能约束,如果storage_capacity设为零,多余电量无处可去,也会导致计算异常。

4.3 网格遍历速度慢到无法接受

现象:216 种组合跑了半小时还没结束。

原因:dispatch_model里用了逐小时循环,且每次循环都调用外部函数,MATLAB 的函数调用开销累积起来很可观。

解决:把逐小时循环改成向量化操作。比如功率平衡计算可以用矩阵运算一次性完成 24 小时的计算,而不是用 for 循环。资源包里已经做了部分向量化,但如果你修改了模型,可能引入了新的循环。用 MATLAB 的 Profiler 工具(运行profile on然后跑代码)找出耗时最多的行。

4.4 NPV 结果对上网电价过于敏感

现象:上网电价从 0.35 元调到 0.40 元,最优装机组合完全变了。

原因:不同电源的发电量对电价的敏感度不同。光伏发电量最大,电价上升时光伏收益增加最多,导致最优组合偏向光伏。这是正常现象,但如果你希望结果稳定,需要把电价设为固定值做对比。

解决:在做容量优化时,固定电价和折现率,只让装机容量变化。敏感性分析单独做,不要混在优化循环里。资源包里的calculate_npv函数把电价作为参数传入,你可以在主脚本里固定它。

4.5 典型日曲线与实际数据偏差过大

现象:算出来的 NPV 很漂亮,但用实际历史数据验证时差距超过 30%。

原因:典型日曲线平滑了极端天气的影响。实际运行中,连续阴天或无风期会导致水电被迫增加出力,如果水库蓄能不足,就会出现弃电或限电,这些在典型日模型里体现不出来。

解决:如果项目对极端场景敏感,把典型日换成 8760 小时的实际历史数据。资源包里的dispatch_model函数支持输入 8760 长度的出力曲线,只需要把wind_profile等变量的维度从 24 改成 8760。计算量会增大,但结果更可靠。

5. 进阶技巧:用并行计算加速网格搜索与参数校准

网格搜索的瓶颈在计算量。216 种组合、每种组合跑 8760 小时调度,单线程跑一遍大概需要十几分钟。如果你要做的不是 216 种而是上千种组合,或者要把典型日换成实际数据,时间会成倍增加。这时候可以用 MATLAB 的并行计算工具箱来加速。

核心改动只有两处:把for循环换成parfor,以及确保循环内的变量不跨迭代依赖。

% 开启并行池 if isempty(gcp('nocreate')) parpool('local', 4); % 根据 CPU 核心数调整 end % 并行网格搜索 NPV_results = zeros(size(combinations, 1), 1); parfor i = 1:size(combinations, 1) wind_cap = combinations(i, 1); solar_cap = combinations(i, 2); hydro_cap = combinations(i, 3); [total_output, ~] = dispatch_model(wind_cap, solar_cap, hydro_cap, wind_profile, solar_profile, hydro_profile, load_demand); NPV_results(i) = calculate_npv(total_output, wind_cap, solar_cap, hydro_cap); end

parpool('local', 4)启动 4 个本地工作进程,具体数量根据你的 CPU 核心数调整。parfor会自动把 216 次迭代分配到 4 个进程上,理论上加速比接近 4 倍。但要注意:dispatch_model和calculate_npv必须是独立函数文件,不能是脚本内的嵌套函数,否则并行池无法正确调用。

另一个进阶用法是参数校准。资源包里的出力系数是预设的典型日曲线,但实际项目中你可能有一组实测出力数据,想反推最匹配的出力系数。做法是:把出力系数作为优化变量,以实测出力和模拟出力的均方根误差为目标函数,用fminsearch或ga(遗传算法)求解。

% 参数校准:反推风电出力系数 measured_output = load('measured_wind_output.mat'); % 实测数据 objective = @(x) sqrt(mean((x * wind_cap - measured_output).^2)); optimized_coeff = fminsearch(objective, 0.3); % 初始猜测 0.3 fprintf('校准后的风电出力系数:%.4f\n', optimized_coeff);

这段代码用fminsearch找使均方根误差最小的出力系数。x是待优化的系数,wind_cap是额定容量,measured_output是实测出力。初始猜测设为 0.3,因为风电出力系数通常在 0.25 到 0.35 之间。校准后的系数代回调度模型,NPV 计算结果会更贴近实际。

注意:参数校准需要足够的实测数据,至少覆盖一个完整年度。如果只有几个月的实测数据,校准结果可能过拟合,换到其他月份误差反而更大。

从那以后我每次跑网格搜索前,都会先用 10 种组合做一次快速测试,确认代码没有语法错误、约束条件没有冲突、NPV 量级合理,再放开全量计算。这个习惯帮我省下了不少等待时间——毕竟跑了两小时才发现出力系数单位搞错,那种感觉实在不好受。希望这份资源包和上面的排查思路能帮到你。

本文还有配套的精品资源,点击获取

相关新闻

情感化无感防刷与手势阻尼反馈:基于用户注意力疲劳度动态微调按钮交互阈值

情感化无感防刷与手势阻尼反馈:基于用户注意力疲劳度动态微调按钮交互阈值

在电商狂欢秒杀、限量潮流球鞋发售或火热赛事抢票的关键瞬间,前端页面承受着来自全球数百万用户的极速疯狂连击。 面对这种狂热的并发点击,传统的防刷防重复提交方案往往充斥着一种“居高临下的冰冷傲慢”: 方案一:粗暴弹窗报错—…

2026/10/20 12:26:14 阅读更多 →
推理引擎底层逻辑与优化实践:从计算图到量化部署

推理引擎底层逻辑与优化实践:从计算图到量化部署

做推理引擎方向有段时间了,经常有人拿着模型部署的报错来问我,聊到最后发现卡点往往不在算子实现上,而是对“推理”这件事本身的底层逻辑没吃透。这篇文章就是想把这些基础的东西掰开揉碎讲清楚,从模型是什么、推理时计算机到底在…

2026/10/20 12:26:14 阅读更多 →
AI智能体架构图绘制指南:四层框架与实战排查

AI智能体架构图绘制指南:四层框架与实战排查

画AI智能体架构图这件事,看着不难,翻车率却很高。前阵子帮一个小团队评审方案,对方贴出一张图:中间一个“LLM”的大框,左边拖进来几个接口,右边连着一个数据库,就敢叫“AI智能体架构图”。我说这…

2026/10/20 12:26:14 阅读更多 →

最新新闻

Spring Boot社区在线问诊系统实战:从需求到部署的完整技术拆解

Spring Boot社区在线问诊系统实战:从需求到部署的完整技术拆解

最近后台经常有人问社区家庭医生在线问诊系统怎么做,正好我前阵子完整跟过一个类似项目,从需求梳理到部署上线走了不少弯路。我干脆把这套系统的技术拆解和踩坑记录整理成一篇长文,一方面给自己做个复盘,另一方面给正在做毕业设计…

2026/10/20 13:09:01 阅读更多 →
Git克隆Demo代码仓库实战:从地址到跑通全流程

Git克隆Demo代码仓库实战:从地址到跑通全流程

1. 拿到仓库地址后,先别急着敲命令很多同学第一次接触代码仓库时,最容易犯的毛病就是:复制了地址,打开终端,直接输入git clone,回车,然后开始疯狂刷新浏览器看着进度条发呆。如果仓库小&#xf…

2026/10/20 13:09:01 阅读更多 →
OpenHarmony设备上Flutter淡出过渡动画移植实战与性能优化

OpenHarmony设备上Flutter淡出过渡动画移植实战与性能优化

上个月我把一个原本跑在标准Flutter环境里的页面过渡动画方案移植到OpenHarmony设备上,遇到的第一个问题倒不是动画本身,而是animations 这个官方维护的三方动画库直接编译不过。项目里本来打算用它实现页面切换时的淡出过渡效果,想着省一笔自…

2026/10/20 13:09:01 阅读更多 →
轻量级技能管理方案:从零搭建可量化可组合的技能表

轻量级技能管理方案:从零搭建可量化可组合的技能表

1. 从“skills”这个词说起:它到底指什么“skills”这个词看起来简单,但放在不同语境里,指向完全不同。做招聘的人看到它,想到的是岗位能力模型;做在线教育的人看到它,想到的是课程标签体系;做开…

2026/10/20 13:09:01 阅读更多 →
企业级RAG问答系统实战:知识库、检索链路与大模型应用的完整落地指南

企业级RAG问答系统实战:知识库、检索链路与大模型应用的完整落地指南

做了将近半年的基于大模型的智能问答系统,上线之后我最大的感受是:**决定这套系统好不好用的,往往不是大模型本身,而是知识库和检索链路。**模型答得再聪明,检索不到对的资料,它也只能一本正经地编。我们做…

2026/10/20 13:09:01 阅读更多 →
GraphRAG工程实践:知识图谱如何补足向量检索的推理短板

GraphRAG工程实践:知识图谱如何补足向量检索的推理短板

向量检索失效的那一刻,我才决定认真搞GraphRAG年初做过一个企业内部制度问答系统,刚开始用的是经典的向量库RAG方案:文档切块、embedding、top-k召回、拼prompt喂给大模型。原型阶段跑得很顺,演示的时候领导问了一个问题——"…

2026/10/20 13:08:00 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →