news 2026/9/11 4:57:55

改进粒子群算法在分时电价下电动汽车充放电优化调度中的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
改进粒子群算法在分时电价下电动汽车充放电优化调度中的应用

近两年做电动汽车充放电优化调度的项目,我最大的感受是:真正卡住大家的往往不是算法本身有多深奥,而是从问题建模到算法落地之间的那段“空白地带”。网上关于粒子群算法的教程一抓一大把,讲标准PSO公式的、讲收敛性的都有,但一放到“分时电价下的电动汽车充放电调度”这个具体场景里,很多人就懵了——目标函数怎么定?约束怎么处理?分时电价和粒子群的适应度函数怎么结合?参数设置成多少才算合理?——这些才是真正决定项目能不能跑通的关键。

这篇文章就围绕“基于分时电价的改进粒子群算法在电动汽车充放电优化调度中的应用”这个主题,把我从问题拆解、模型构建、算法改进到仿真实现的全过程做一个系统梳理。适合正在做电动汽车有序充电、V2G调度、需求响应方向的研究生和相关工程师作为参考,尤其建议那些打算用群体智能算法做电力系统优化、但还在纠结“论文里的算法到我这边怎么就不灵了”的朋友认真看完。

1. 先把调度问题拆透:分时电价下的充放电到底在优化什么

1.1 场景还原:一个车位上发生的经济决策

先描述一个最典型的应用场景。某居民小区配了20台交流充电桩,每一台桩后面连着的是一辆电池容量在60kWh左右的电动汽车。当地电网执行分时电价,峰时段电价是1.1元/kWh、平时段0.68元/kWh、谷时段0.32元/kWh。车主早上8点开车出门,晚上18点下班回家插枪充电,第二天早上7点拔枪出发。

在这个场景里,车主的诉求非常简单:一个晚上充到足够第二天用的电量,花最少的电费。但问题比表面看起来复杂得多。如果车主一回家就立刻用峰值电价充电,成本会很高;如果等到半夜谷电再充,那凌晨0点到7点之间能不能充满?中间要不要考虑电池的充电功率限制?如果这台车支持V2G双向放电,晚上用电高峰时把电池里的电卖回电网,凌晨再低价补回来,是不是更划算?这中间涉及到的每一个决策,本质上都是一个优化问题。

1.2 调度问题的数学本质:多约束下的动态决策

把上面这个场景抽象成数学模型,核心是三个要素:决策变量、目标函数、约束条件。

  • 决策变量是每个调度时段内的充放电功率值。把一天24小时按15分钟或1小时划分为若干个时段,每个时段给一个功率值,这些功率值组合起来就是一条完整的充放电策略曲线。

  • 目标函数通常是最小化用户的综合用电成本,公式可写为:

总成本 = 各时段购电费用 - 各时段放电收益 + 电池退化折算成本

  • 约束条件包括:电池SOC上下限、单时段最大充放电功率、日充电需求总量、变压器容量上限、电池不能同时充放电等。

这类问题的难点在于,它不是一个单纯线性规划问题。电池退化成本往往是电量和功率的非线性函数,功率调节范围和SOC状态耦合在一起,分时电价又让目标函数呈现出明显的分段特征。传统的动态规划方法在维度较低时尚可处理,一旦调度时段加密到96点、车辆数量扩展到几十台甚至上百台,状态空间就会爆炸。

1.3 为什么选粒子群算法而不是其他算法

我最早尝试过用混合整数线性规划来求解,但很快发现两个痛点:一是约束一多,求解器的建模复杂度直线上升;二是换一个场景参数就得重新调整一大批约束表达式,非常不灵活。后来尝试了遗传算法,全局搜索能力不错,但它需要设计编码、交叉、变异三套算子,实现工作量更大,而且参数对结果的影响非常敏感。

粒子群算法的优势在于它绕开了“离散编码”的问题。每个粒子的位置直接就是一个连续功率向量,速度和位置更新只涉及简单的四则运算,实现门槛低得多。更重要的是,PSO对目标函数和约束的表达形式没有苛刻要求——只要你能写一个返回适应度值的函数,PSO就能用,这对工程快速验证来说是极大便利。

实际项目中,粒子群算法的优越性还体现在响应速度上。同样是20台车、96个调度时段的场景,我实测下来,标准PSO在200次迭代左右就能收敛到一个可接受的解,而同等约束条件下的动态规划求解时间要多出数倍。当然,PSO也有它的软肋,收敛过早、后期震荡、约束处理不当容易产生大量不可行解——这恰恰是“改进”二字存在的意义,后面我会逐一展开讲。

2. 粒子群算法底层逻辑与针对性改进动机

2.1 标准PSO的数学机理:鸟群、速度与位置

先给刚接触这个算法的读者用一句话说清楚粒子群算法的核心思路:想象一群鸟在一片区域里找食物,每只鸟不知道食物在哪,但知道当前位置离食物有多远。每个个体在飞行过程中,一方面记住自己历史上达到过的最优位置,另一方面分享整个群体当前找到的最优位置,然后综合这两个信息调整下一步的飞行方向和速度。

数学表达上,每个粒子的速度和位置按照以下公式更新:

v_i(t+1) = w * v_i(t) + c1 * r1 * (pBest_i - x_i(t)) + c2 * r2 * (gBest - x_i(t)) x_i(t+1) = x_i(t) + v_i(t+1)

其中w是惯性权重,控制前一时刻速度对当前速度的影响程度;c1是自我认知系数,让粒子向自身历史最优位置飞行;c2是社会认知系数,让粒子向全局最优位置飞行。r1和r2是[0,1]之间的随机数,用于增加搜索的随机性。

理解这个公式的关键在于:粒子的运动是“惯性+自我经验+群体经验”三股力量的合力。w大时粒子倾向于保持原有方向、全局探索能力强;w小时粒子受群体经验和自身经验主导、局部开发能力强。实际应用中,w和c1、c2的取值直接决定算法是“偏探索”还是“偏开发”。

2.2 标准PSO在这个场景下的三个明显短板

用标准PSO直接套充放电模型,我踩过三个比较痛苦的坑。

第一个坑是收敛过早。标准PSO在迭代前期,如果某个粒子的位置比较靠近局部最优,其他粒子会很快被它的“社会经验”吸引过去,整个群体迅速收缩到一个局部区域。对于充放电调度这种目标函数存在大量局部极小值点的问题,很容易陷入“看起来不错但远不是全局最优”的困境。

第二个坑是后期收敛动力不足。当所有粒子都聚拢到某个区域后,速度更新中的个体认知项和社会认知项差值变小,粒子步长缩短,收敛速度明显变慢。有时候迭代到400次结果还在缓慢蠕动,严重拖慢实验效率。

第三个坑更隐蔽——约束处理不当导致解“看起来合理、实际物理上根本不可行”。比如某个粒子的位置对应一条充放电曲线,SOC算出来在某个时段超过了下限,但适应度函数又没做惩罚处理,这个“坏解”就可能浑水摸鱼混进最终结果。这个问题后面我会详细说处理方法。

2.3 改进设计的总纲:高探索、强约束、快收敛

针对上述短板,我在这个项目里做了三方面的改进设计:一是采用自适应惯性权重,让算法在前期保持较高的探索能力、后期加强局部开发;二是引入反向学习机制初始化种群,提高解空间覆盖率,减少初始位置集中在某些区域的概率;三是设计了一套结合动态罚函数和功率修复策略的约束处理机制,保证粒子在整个迭代过程中都“待在可行域附近”。

这三项改进不是简单堆砌,而是各有分工。自适应惯性权重管“搜得广不广”,反向学习管“起步好不好”,约束处理管“结果能不能用”,三者配合下来,算法在项目中的表现比标准PSO有质的提升,具体对比数据我会在第5章给出。

3. 充放电调度模型的搭建:目标函数与约束条件是最吃细节的地方

3.1 目标函数设计:不能只盯着电费

很多人第一次做这个模型,目标函数就想当然地写成“购电费用减放电收益”。这个思路方向没有错,但少了很重要的一块——电池退化成本。

电动汽车的电池在充放电循环中会有容量衰减,尤其是V2G双向充放电模式,放电深度越大、循环次数越多,衰减速度越快。如果不考虑这部分成本,算法的结果会非常激进,倾向于让电池频繁地“高价放电、低价充电”,表面上电费省了一大截,实际上电池寿命损失远超省下的那点钱。

所以我在项目里把目标函数定义为三层:

目标 = 时段总购电费用 + 电池损耗折算费用 - 放电总收入

其中购电费用为各时段充电功率乘以对应时段电价的累加,放电收入为各时段放电功率乘以放电结算电价(一般比购电价稍低)的累加,电池损耗费用则用一个与放电深度相关的折算系数乘以放电电量表示。这个表达式虽然简单,但很好地平衡了经济性和电池寿命之间的冲突。

3.2 约束条件:一条条列出来,少一条都会出事

理论层面约束条件可以分为五类,我这里用表格汇总一下:

约束类型数学表达实际含义
功率约束0 ≤ P_i ≤ P_max,-P_max ≤ P_i ≤ 0充电、放电功率不能超过设备上限
互斥约束同一时段不能同时充放电用P_i ∈ [-P_max, 0]∪[0, P_max]实现
SOC动态约束SOC(t+1) = SOC(t) + η_cP_cΔt/E - P_dΔt/(η_dE)各时段SOC连续递推计算
电量需求约束离开时SOC ≥ 目标值保证第二天用车有足够的电量
变压器容量约束小区总充电负荷 ≤ 变压器上限防止多车叠加负荷冲击配网

这里面最容易出错的是SOC动态约束和互斥约束。SOC动态约束涉及充放电效率,充电效率η_c一般在0.9到0.95之间,放电效率η_d略低一些,两个效率不能当成同一个值,否则递推出来的SOC曲线和实际差距很大。互斥约束如果处理不好,算法可能在某个时段同时输出正的充电功率和负的放电功率,这在物理上是不可实现的——罚函数会惩罚这种解,但更好的做法是在可行域修复阶段就直接清零。

3.3 决策变量编码方式与维度选择

对于单台车,如果把一天按15分钟划分,就有96个时段,决策变量是一个96维的向量。对于20台车,总维度就变成1920——这个维度对PSO来说已经偏高,收敛速度和效果都会受影响。

我在项目中的做法是:先把时段粒度调到1小时,即24个时段,这样单台车的决策变量维度只有24维,20台车也不过480维,大大缓解了高维困境。前期用粗粒度快速验证模型和算法的正确性,确认无误后再把粒度加密到15分钟,在精细维度上做最终仿真。这个“粗细结合”的习惯帮我省了不少调试时间。

4. 改进粒子群算法的落地实现:每一步都要算清楚

4.1 自适应惯性权重的设计思路与参数选择

惯性权重w是标准PSO里影响全局和局部搜索平衡的最关键参数。固定w的做法最简单,但效果不理想:w固定偏大时,算法后期在大约最优解附近来回振荡,收敛精度差;w固定偏小时,前期很容易陷入局部最优,全局搜索形同虚设。

我在项目里采用了线性递减策略与非线性调节相结合的方案。线性递减公式如下:

w(t) = w_max - (w_max - w_min) * (t / t_max)

其中w_max取0.9,w_min取0.4,t为当前迭代次数,t_max为最大迭代次数。这个策略在大多数工程场景下表现稳定,前期全局搜索、后期局部精修,是很多论文里的标配做法。

不过,纯线性递减还有一个隐患:如果算法在早期就找到了比较有希望的搜索区域,w衰减到后期会过小,导致粒子没有能力跳出这个区域去探索其他可能更优的空间。针对这一点,我在公式基础上增加了按适应度值的反馈调节——如果连续多代全局最优改善幅度极低,就把w瞬时提升到0.7左右,强制粒子加速“逃逸”,重新扩大搜索范围。这个细节实现起来非常简单,就几行代码的事,但对防止早熟收敛帮助非常明显。

4.2 种群初始化与反向学习策略

标准PSO的种群初始化通常是纯随机的均匀分布。这个方式在低维问题上问题不大,但到了几十维、上百维的充放电调度问题上,随机初始化很容易让粒子在高维空间里分布稀疏,导致初始群体质量不佳,影响收敛速度。

我引入的反向学习策略逻辑非常简单:假设决策变量x在[0,1]区间内随机生成后,它的反向点是1-x。在原空间中生成N个粒子,同时生成N个反向粒子,计算每一对粒子的适应度,保留适应度更好的那个进入初始种群。这样相当于用同样的计算代价运行了2N次适应度评估,却极大提升了初始种群的覆盖率。实测下来这一项改进大约能缩短10%到15%的收敛所需迭代次数。

4.3 约束处理的组合拳:动态罚函数加功率修复

约束处理是充放电调度问题里最让我头疼、也最影响结果质量的一环。我早期用过纯罚函数法,就是把违反约束的量乘以一个大罚系数加到目标函数上。这个做法实现简单,但问题在于罚系数太小,不可行解惩罚不足;罚系数太大,又会让目标函数数值巨大,粒子搜索失去梯度信息,很不稳定。

后来我把策略改成了“动态罚函数+功率修复”的组合方式。动态罚函数的核心思路:迭代初期罚系数较小,允许粒子在较大空间搜索,不至于一开始就被束缚在某个小区域内;随着迭代推进,罚系数逐渐增大,逐步压制不可行解。

功率修复策略则更直白,针对SOC越限的粒子,按其越限程度直接调整充电功率——比如SOC超过上限,就把当前时段的充电功率降为零直到SOC恢复到安全区间;SOC低于下限,就增大充电功率或减少放电功率。修复完成后再计算适应度。这个方法在工程上非常有效,能保证最终输出的调度曲线严格满足物理约束。可以负责任地说,这一项组合拳比起单纯用罚函数,结果可用的概率提升了不止一个量级。

4.4 算法主流程与关键代码实现

整个改进PSO的主流程我用文字描述一下:

  1. 读取分时电价、车辆参数、负荷参数
  2. 初始化种群:随机生成粒子并计算反向粒子,择优组成初始种群
  3. 计算每个粒子的适应度值,惩罚不可行解并执行功率修复
  4. 更新个体最优pBest和全局最优gBest
  5. 按自适应权重公式更新w,按速度位置公式更新粒子的速度和位置
  6. 对新粒子执行边界检查和约束修复
  7. 判断是否达到最大迭代次数,未达到则返回第3步
  8. 解码全局最优粒子,输出各时段充放电功率曲线和总成本

下面给一个简化版的核心代码片段,帮助大伙儿建立直观印象:

import numpy as np def adaptive_weight(t, t_max, w_min=0.4, w_max=0.9): return w_max - (w_max - w_min) * (t / t_max) def update_velocity(v, x, pbest, gbest, w, c1=1.5, c2=1.5): r1, r2 = np.random.rand(x.shape[0]), np.random.rand(x.shape[0]) return w * v + c1 * r1 * (pbest - x) + c2 * r2 * (gbest - x) def repair_soc(power_seq, soc_init, soc_min, soc_max, eta_c, eta_d): # 按SOC约束修复功率序列 soc = soc_init repaired = power_seq.copy() for i in range(len(power_seq)): if power_seq[i] > 0: # 充电 soc_after = soc + eta_c * power_seq[i] / battery_cap else: # 放电 soc_after = soc + power_seq[i] / (eta_d * battery_cap) if soc_after > soc_max: repaired[i] = (soc_max - soc) / eta_c * battery_cap elif soc_after < soc_min: repaired[i] = (soc_min - soc) * eta_d * battery_cap soc += eta_c * max(repaired[i], 0) / battery_cap + min(repaired[i], 0) / (eta_d * battery_cap) return repaired # 主循环示例 for t in range(t_max): w = adaptive_weight(t, t_max) for i in range(n_particles): v[i] = update_velocity(v[i], x[i], pbest[i], gbest, w) x[i] += v[i] x[i] = repair_soc(x[i], soc_init, soc_min, soc_max, eta_c, eta_d) fitness[i] = cost_function(x[i], price, battery_degradation) if fitness[i] < fitness_pbest[i]: pbest[i] = x[i] gbest = pbest[np.argmin(fitness_pbest)]

需要特别提醒:上面这个修复函数的逻辑是简化的示意版本,实际项目中修复过程还需要结合具体时段判断修复方向,否则会出现“这边修复完、那边又越限”的循环问题。我的经验是先判断整体充放电策略的趋势,再结合SOC动态逐段修复,最后再整体校验一次。

5. 仿真实验与结果对比:从数据看改进措施有没有用

5.1 实验参数怎么定才有参考价值

仿真参数是整个实验的骨架,参数设置不合理的实验结果基本没有参考价值。我在项目中围绕一个住宅小区场景展开仿真,核心参数如下:

参数项取值
电动汽车数量20台
电池容量60kWh
常规充电功率7kW(单相交流)
V2G最大放电功率7kW
充电效率0.92
放电效率0.90
SOC范围0.2~0.95
离开时SOC目标≥0.9
用户日行驶耗电平均15kWh
变压器容量上限400kW(小区总负荷背景叠加)

分时电价直接参照国内多个省份执行的峰平谷电价标准,简化为三段:峰段8:00-11:00、18:00-21:00,电价为1.1元/kWh;平段11:00-18:00、21:00-8:00中的非峰谷时段,电价0.68元/kWh;谷段23:00-7:00,电价0.32元/kWh。

算法参数方面,标准PSO和改进PSO的公共参数保持一致,种群规模均为40,迭代次数均为300次,学习因子c1和c2均取1.5。区别仅在于改进PSO采用自适应惯性权重和反向学习初始化,标准PSO则固定w为0.5且随机初始化。

5.2 三种充放电策略的仿真结果

我在仿真中对比了三种策略:无序充电(车到家即充)、标准PSO优化调度、改进PSO优化调度。这里贴一下关键产出数据:

策略日均总成本(元)峰时段购电量(kWh)谷时段放电收益(元)计算耗时(s)
无序充电21.3514.20-
标准PSO优化12.782.13.4518.6
改进PSO优化10.420.85.1222.3

从结果来看,两个优化策略相比无序充电都能显著降低日均成本,而改进PSO相比标准PSO又进一步降低了18.5%左右的成本。更关键的是,改进PSO的谷时段放电收益明显更高,峰时段购电量更低,说明优化算法成功地把一部分负荷转移到了低价时段,同时利用V2G在峰时段放电套利。

5.3 收敛性与鲁棒性分析

成本下降之外,收敛曲线是最能体现改进价值的指标。我在相同实验条件下跑了20次随机实验,标准PSO有7次陷入早熟,收敛精度波动明显;改进PSO的收敛曲线更加平滑,最终结果的标准差只有标准PSO的约五分之一,稳定性提升了很大一截。

还有一组值得关注的数据是负荷“峰谷差”。无序充电模式让小区负荷峰谷差高达96kW,标准PSO优化后降到42kW,改进PSO进一步压到31kW。峰谷差直接关系到配电网的日负荷均衡度和变压器利用率,这组数据从侧面说明了改进PSO在平滑负荷曲线方面的额外价值。

6. 实操过程中的高发问题与排查技巧

6.1 迭代曲线断层或剧烈振荡,先查惯性权重

如果仿真过程中发现适应度曲线出现剧烈振荡、甚至断层式跳变,我拿到数据后第一反应不是改学习因子,而是先看惯性权重的更新是否正常。在自适应权重中加入反馈调节后,如果反馈条件过于灵敏——比如改善幅度阈值设得太小——w会被频繁强制拉高,粒子每次都在“逃逸”和“收敛”之间反复横跳,振荡就在所难免。我的排查建议是:先把反馈调节的触发条件放宽,比如连续5代改善小于万分之一才触发,观察曲线是否稳定,再逐步收严条件。

6.2 结果SOC曲线越界,优先检查修复逻辑和效率参数

很多跑同类模型的同行经常遇到:最后输出的SOC曲线在某些时段掉到0.2以下,或者突破0.95上限。问题通常出在修复逻辑和效率参数上。SOC递推公式里的充电效率η_c和放电效率η_d与实际的充放电功率方向有关,如果修复代码中把符号搞反,或者效率代入错误,越界问题就怎么修都修不干净。我的排查方法是选一个SOC明显越界的时段,手工用笔算递推一次SOC,和代码输出对比,差几个百分点以内说明逻辑正确,差得离谱就逐行查递推代码。

6.3 粒子维度太高算得慢,先降时间粒度

高维优化是PSO的重要局限之一。20台车、96时段就是1920维,种群规模50、迭代300次意味着要评估3万次适应度函数,每评估一次都要跑一遍完整的递推计算,总耗时往往会让人怀疑人生。我的做法前面也提过,先用24时段的粗粒度跑通模型,确认可行后再加密到96时段。如果最终还是要上96时段,建议把种群规模从40降到20,迭代次数从300降到150,先用小规模验证改进思路,再逐步增加计算量。

6.4 电池退化成本怎么定才既合理又不复杂

电池退化成本是标准PSO论文里最常见的被忽略项,但它的系数取值对结果影响极大。系数定得太低,算法会疯狂放电;定得太高,V2G优势被完全压制,优化结果退化为“纯错峰充电”。我参考了某知名车企动力电池运营数据,按循环寿命近似折算:假设电池完全充放电循环寿命为3000次,电池更换成本为每kWh 1200元,那么每kWh放电电量带来的退化成本折旧约为0.4元/kWh。也就是说,谷时充电电价0.32元/kWh、峰时放电结算价0.9元/kWh的情境下,扣除0.4元退化成本后仍有约0.18元/kWh的套利空间,这样模型就不会“过度放电”,也不会“不敢放电”。

注意:电池退化系数没有放之四海而皆准的数值,拿不到真实电池数据的情况下,建议做敏感性分析,看结果对退化系数在0.2到0.6元/kWh范围内的变化是否稳定。如果结果在这个区间内趋势一致,说明模型鲁棒性较好。

6.5 边界条件的隐形坑:充放电互斥与“死区”

充放电互斥约束在模型里很容易被遗漏,但在工程上却极其重要。如果不对每个时段的功率值做正负互斥处理,算法很可能输出“同一时段先充电后放电”的无效逻辑——这在数学模型里可能是可行解,但在物理场景里完全无法执行。我在代码中处理方式是对每个时段的功率值做符号检查,如果某时段输出功率的绝对值小于0.1kW,就认为该时段不动作;大于0.1kW则强制归入充电或放电的单一状态,用一个极小的“死区”避免频繁切换。

实际调度中还有一个容易被忽略的点——调度指令执行的时间颗粒度。很多论文给的是15分钟级的调度曲线,但实际充电桩的指令下发周期可能是30分钟甚至1小时。做工程落地时,必须把仿真用的时段粒度和设备支持的执行周期对齐,否则你算出来的优化曲线到了真实设备上根本执行不了,这一点对从算法仿真走向工程应用的同行来说尤其重要。

7. 从项目复现到工程落地的几点个人体会

这个项目做下来,我最大的体会是:改进粒子群算法解决充放电调度问题,真正的难点不在算法创新,而在问题建模的完整度和约束处理的工程细节。分时电价给了优化空间,V2G技术给了削峰填谷的灵活性,粒子群算法提供了处理复杂约束的工具——但只有把三者咬合在一起,才能形成一个真正可以跑的解决方案。

再分享一个后期扩展的小技巧:这套改进PSO框架不只是用于单小区场景。你可以把目标函数里的用户成本换成配电网网损、负荷峰谷差等多种指标,调度对象扩展为多个充电站的聚合体;也可以与博弈论结合,把各个充电站作为独立的决策主体,用分布式PSO协调优化。基础框架搭建好之后,适应不同的业务场景就是相对自然的扩展方向了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 4:57:46

掌握文件流,彻底搞懂Excel导入导出的底层原理与性能优化

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

作者头像 李华
网站建设 2026/9/11 4:55:31

如何使用 mpv 的 amd_frc 滤镜启用 AMD FRC 帧率转换?

如何使用 mpv 的 amd_frc 滤镜启用 AMD FRC 帧率转换&#xff1f; 【免费下载链接】mpv &#x1f3a5; Command line media player 项目地址: https://gitcode.com/GitHub_Trending/mp/mpv 想在 AMD 显卡上把低帧率视频&#xff08;如 24 Hz 素材&#xff09;转换出更高…

作者头像 李华
网站建设 2026/9/11 4:54:45

CodeWhale 断网后如何恢复:用 /queue 查看并重新发送离线队列

CodeWhale 断网后如何恢复&#xff1a;用 /queue 查看并重新发送离线队列 【免费下载链接】Codewhale Open-source coding agent for your terminal, built in Rust and on a journey of continuous community improvement. Issues and PRs welcome. 项目地址: https://gitco…

作者头像 李华
网站建设 2026/9/11 4:50:51

持续更新的Wayland客户端开发指南:从裸协议到实战源码

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

作者头像 李华