尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
基于粒子群优化的风-水电联合调度模型与Matlab复现实战
这个题目我盯了很久前前后后折腾了两周多才把代码跑通、把结果调顺。先说个结论《太阳能学报》这篇基于粒子群优化PSO的风-水电联合优化运行分析核心思路并不复杂但复现的坑是真的多——论文里公式符号含糊、参数缺省、约束条件写得不够严谨照着抄都能抄出歧义。这篇文章我把整个复现过程的思路、数学模型、Matlab代码实现、调参经验和踩坑记录都整理出来往后你拿到类似题目能少走不少弯路。开头先回答三个问题这个项目解决什么问题它的价值在哪适合谁来复现风电场出力受风速影响大波动性强单独并网容易冲击电网稳定水电站调节能力强、响应速度快把风、水两类电源放在一起做联合优化调度就能用水的灵活性去平抑风的随机性提高整体发电收益、降低弃风率。论文用粒子群算法去优化各时段风-水电站的出力分配本质上是一个典型的经济调度问题。适合做电力系统方向课题、需要复现EI论文做对比实验、或者在学智能优化算法和Matlab建模的学生和科研人员。1. 内容整体设计与思路拆解1.1 为什么是风-水电联合而不是风-光-水或者风-火-水每一种电源组合都有对应的工程场景。风电水电联合瞄准的是枯水期或来水不确定条件下水电站还能不能为风电腾出并网空间的问题。水电不像火电有碳排放和爬坡速率限制也不像储能受容量造价约束它在日内调节上几乎是“即开即用”尤其梯级水电站用上游放水带动下游发电联合调度空间更大。论文里选风-水联合还有一个隐含假设目标系统里没有大容量火电和储能只有风电装机和水电装机在协同供电这是很多偏远地区、海岛微网、流域级清洁能源基地的真实形态。在这个前提下系统调峰压力全部落在水电头上风电尽可能多发、不弃风水电负责补缺口和调峰。这个场景设定不复杂但很有代表性适合作为联合优化调度的入门复现对象。1.2 粒子群算法为什么适合这个优化问题风-水联合优化本质上是一个多时段、多约束的非线性规划问题。目标函数里有风电出力曲线、水头修正、发电流量约束、库容平衡约束约束条件之间还会互相耦合——比如某个时段放水多了后面的水头就低了发电效率跟着下降。这类问题用梯度类算法求导非常麻烦用枚举法在连续解空间里又跑不完。粒子群算法的好处在于不需要目标函数可导适应度函数只需要能计算出数值对初值不敏感随机撒粒子也能收敛实现代码量少Matlab里几十行就能写一个可用版本容易加约束罚函数一挂就能处理越界情况。当然PSO的缺点是容易早熟、后期收敛慢这个在后文调参部分我会展开说。论文选择PSO大概率不是因为它最优而是因为它实现门槛低、泛化能力强用来验证风-水联合优化模型的合理性完全够用。1.3 复现代码的整体架构我把整个复现按模块拆成五块风电场出力模型风速输入 - 风电功率输出水电站模型库容、来水、发电流量、水头-出力关系优化目标函数联合发电收益最大化或弃风量最小化PSO优化引擎粒子编码、速度更新、边界处理、适应度计算结果可视化各时段出力曲线、水库库容变化曲线、PSO收敛曲线。这样的拆分逻辑是先把物理模型建准确再套优化算法。如果一开始就把物理模型和PSO耦合在一起写出问题很难定位是模型错了还是算法错了。我在调试时就是分段验证风电场单独算一遍出力水电站单独跑一遍约束最后再接PSO效率高很多。2. 核心数学模型详解与参数推导2.1 目标函数到底长什么样论文中目标函数表述为联合系统运行收益最大化但原文没有给出完整的收益口径。按通行做法我把它定义为[ \max F \sum_{t1}^{T} \left[ (P_{w,t} P_{h,t}) \cdot \Delta t \cdot c_t \right] ]其中 ( P_{w,t} ) 是风电场在 t 时段的出力( P_{h,t} ) 是水电站在 t 时段的出力( \Delta t ) 是时段时长取1小时( c_t ) 是 t 时段的电价。这是最基础的收益模型。如果论文侧重点在消纳也可以把目标改成[ \max F \sum_{t1}^{T} P_{w,t} - \lambda \sum_{t1}^{T} \max(0, P_{w,avail,t} - P_{w,t}) ]第一项是风电实际消纳量第二项是弃风惩罚。用罚系数 ( \lambda ) 调节“多发风电”和“少弃风”之间的权重。我实际复现时用的是第二种思路的变体主目标收益最大化 弃风惩罚项。原因也很简单——纯收益最大化会出现水电“欺负”风电的情况如果某时段电价高水电满发风电反而被压低这不符合清洁能源优先消纳的政策导向。挂一个弃风惩罚项就能把风电消纳权重拉回来。2.2 风电场出力模型分段函数是主流风电机组的功率特性曲线一般用分段函数描述常用的有四段式[ P_w(v) \begin{cases} 0 v v_{in} \text{ 或 } v v_{out} \ \frac{v^3 - v_{in}^3}{v_r^3 - v_{in}^3} P_r v_{in} \leq v v_r \ P_r v_r \leq v \leq v_{out} \end{cases} ]( v_{in} ) 切入风速( v_{out} ) 切出风速( v_r ) 额定风速( P_r ) 额定功率。注意中间段不是线性插值是三次方关系因为风能密度和风速立方成正比。很多新手在这里抄错把中间段写成 ( (v - v_{in}) / (v_r - v_{in}) )出来一条直线误差极大。风功率曲线从切入到额定是上凸的用线性近似会导致中低风速段出力被高估进而影响整个调度结果。我复现时取的风机参数是切入风速 3 m/s额定风速 12 m/s切出风速 25 m/s额定功率 1.5 MW。风速数据用的是论文附录的典型日风速曲线24小时也可以自己生成威布尔分布风速序列但为了和论文结果对比建议先用论文数据跑通。2.3 水电站模型的约束条件是最容易出错的部分水电建模的核心是一组约束我在复现时把它们整理成五个大类水量平衡约束( V_{t1} V_t (I_t - Q_t - S_t) \cdot \Delta t )其中 ( V_t ) 是水库库容( I_t ) 是天然来水( Q_t ) 是发电流量( S_t ) 是弃水流量库容上下限约束( V_{min} \le V_t \le V_{max} )发电流量约束( Q_{min} \le Q_t \le Q_{max} )水电站出力约束( P_{h,min} \le P_{h,t} \le P_{h,max} )水头-出力耦合关系( P_{h,t} \eta \cdot \rho \cdot g \cdot Q_t \cdot H_t )。第5条最容易被忽略。很多简化模型把水头 ( H_t ) 当成常数但实际运行中水库水位变化会导致水头变化水头变了同样的流量发出来的功率就不一样。论文里水头-库容关系通常给一条线性或二次曲线[ H_t a_0 a_1 V_t a_2 V_t^2 ]我复现时用的参数是死库容 100万m³正常库容 500万m³最大发电流量 50 m³/s最小发电流量 5 m³/s综合出力系数取 8.5这是把 ( \eta \cdot \rho \cdot g ) 合并后的简化系数。水头-库容曲线用二次拟合系数设成 a020, a10.002, a2-1e-6保证在库容范围内水头在 18~35m 之间波动符合中小型水电站的典型工况。2.4 功率平衡约束等式约束怎么处理系统功率平衡是[ P_{w,t} P_{h,t} P_{load,t} ]这是一个等式约束。PSO处理等式约束比处理不等式约束麻烦不等式约束可以用罚函数或者直接裁剪等式约束如果也简单裁剪会破坏解的连续性。我的处理方式是把功率平衡约束作为硬性等式修正在PSO迭代过程中粒子只编码水电站的决策变量发电流量序列风电出力由风速决定是固定的那么水电出力根据功率平衡反推[ P_{h,t} P_{load,t} - P_{w,t} ]然后再检查这个 ( P_{h,t} ) 是否满足水电站出力约束和水量约束。这个“反推修正”的思路比把等式约束挂罚函数要干净得多因为它从根上消掉了等式约束PSO搜索空间直接降维。提示等式约束能消就消不要贪方便全挂罚函数。罚函数处理等式约束时如果罚系数太小解不满足平衡罚系数太大又会压迫粒子过早收敛到局部最优。能用变量替换消掉就是最优雅的方案。3. Matlab代码实现与核心环节解析3.1 主程序框架设计我的主程序分为四个文件这次实际复现时的文件结构main_pso_wind_hydro.m主入口参数初始化、调用PSO、展示结果objective_function.m适应度函数输入水电决策变量序列输出目标函数值wind_power_model.m风速转风电功率hydro_model.m水电站约束检验与出力计算。主循环的核心逻辑是%% 参数初始化 T 24; % 调度时段数 nPop 50; % 粒子群规模 maxIter 200; % 最大迭代次数 dim T; % 决策变量维度24小时发电流量 % 读取风速和负荷数据 wind_speed ...; % 24小时风速 load_demand ...; % 24小时负荷 % 风电出力固定 P_w wind_power_model(wind_speed);这里决策变量维度等于调度时段数也就是24维。每个粒子表示一组24小时的水电站发电流量序列粒子位置就是 ( Q_t )粒子速度就是对 ( Q_t ) 的调整步长。3.2 粒子编码与边界处理粒子编码是PSO最关键的一步。我之前见过有人把每个时段的 ( Q_t ) 和 ( V_t ) 都编进粒子维度48结果收敛极慢。实际上库容 ( V_t ) 可以由水量平衡方程递推出来不需要作为独立决策变量V(1) V0; % 初始库容 for t 1:T V(t1) V(t) I(t) - Q(t) - spill(t); end所以决策变量只需要 ( Q_1, Q_2, ..., Q_{24} )。需要注意的是粒子位置的边界直接设成发电流量的上下限 [5, 50] m³/s。PSO搜索时如果粒子飞出边界我用的处理方式是“吸收边界”超出上限就设为上限超出下限就设为下限而不是随机重置。原因很简单吸收边界能保证每个粒子都落在可行域内适应度计算不会出现非法值。3.3 适应度函数把罚函数挂在一个循环里适应度函数是核心中的核心我直接贴出核心代码并逐段解释function f objective_function(Q) global wind_speed load_demand price V0 Vmax Vmin Qmax Qmin H_coeff ... eta_g total_time lambda_waste T length(Q); %% 1. 计算风电出力 P_w wind_power_model(wind_speed); %% 2. 计算水电站各时段出力 V(1) V0; P_h zeros(1,T); penalty 0; for t 1:T % 库容更新 V(t1) V(t) I_in(t) - Q(t) - S(t); % 越界罚函数库容约束 if V(t1) Vmin || V(t1) Vmax penalty penalty 1e6 * (min(abs(V(t1)-Vmin), abs(V(t1)-Vmax)))^2; end % 水头计算二次函数拟合 H(t) H_coeff(1) H_coeff(2)*V(t) H_coeff(3)*V(t)^2; % 水电出力 P_h(t) eta_g * Q(t) * H(t); % 水电出力上下限约束 if P_h(t) P_hmin || P_h(t) P_hmax penalty penalty 1e6 * (min(abs(P_h(t)-P_hmin), abs(P_h(t)-P_hmax)))^2; end end %% 3. 功率平衡检查 P_total P_w P_h; balance_violation abs(P_total - load_demand); penalty penalty 1e4 * sum(balance_violation.^2); %% 4. 目标函数收益 弃风惩罚 revenue sum(P_total .* price * total_time); waste_wind sum(max(0, P_w_available - P_w)); % 实际弃风量 f -(revenue - lambda_waste * waste_wind) penalty; end这里有几个细节需要解释目标函数返回负值是因为PSO默认求最小化我加负号把最大化问题转成最小化库容越界罚函数用了平方项越界越远惩罚增长越快这是为了引导粒子回到可行域后罚项迅速归零功率平衡的罚系数1e4比约束越界罚系数1e6小一个量级因为功率平衡已经有了变量替换做硬性消解这里只是兜底lambda_waste弃风惩罚系数我取0.5太小了风电消纳优先级不够太大了水电几乎不参与调峰。3.4 PSO主循环的Matlab实现粒子群主循环的代码我尽量写得简洁清晰方便直接改成别的算法比如引力搜索、灰狼优化等做对比实验%% PSO主循环 for iter 1:maxIter for i 1:nPop % 计算适应度 fitness(i) objective_function(pop(i,:)); % 更新个体最优 if fitness(i) pbest_val(i) pbest_val(i) fitness(i); pbest(i,:) pop(i,:); end end % 更新全局最优 [best_val, best_idx] min(pbest_val); if best_val gbest_val gbest_val best_val; gbest pbest(best_idx,:); end % 速度与位置更新 for i 1:nPop vel(i,:) w * vel(i,:) ... c1 * rand(1,dim) .* (pbest(i,:) - pop(i,:)) ... c2 * rand(1,dim) .* (gbest - pop(i,:)); % 速度限制 vel(i,:) max(min(vel(i,:), vel_max), -vel_max); % 位置更新 吸收边界 pop(i,:) pop(i,:) vel(i,:); pop(i,:) max(min(pop(i,:), Qmax), Qmin); end % 惯性权重递减 w w_max - (w_max - w_min) * (iter / maxIter); % 记录收敛曲线 convergence(iter) gbest_val; end3.5 参数设置与计算过程我复现时用的PSO参数如下这是经过多轮试验后的经验值参数取值说明种群规模 nPop50太小容易早熟太大计算慢迭代次数 maxIter20024维问题200次足够惯性权重 w_max0.9前期全局搜索惯性权重 w_min0.4后期局部精细搜索学习因子 c11.5个体认知权重学习因子 c21.5社会认知权重速度上限 vel_max5单位时段最大流量调整幅度需要说明的是w从0.9线性衰减到0.4是PSO调参最常用的策略。前期大惯性权重让粒子飞得远保证全局探索后期小惯性权重让粒子在最优解附近精细搜索。c1c21.5是经典取值如果发现收敛太慢可以适当增大c2如果发现震荡不收敛则减小c2。速度上限vel_max设成5意思是每个粒子每代最多调整发电流量5 m³/s。这个值需要根据决策变量的范围5~50 m³/s来衡量设得太小收敛慢设得太大容易在最优解附近来回震荡。4. 结果分析与敏感性调试实录4.1 复现结果与论文结果对比跑完200次迭代我得到的最优调度方案是系统全天总收益约为 42.8 万元弃风率 2.3%水电在晚高峰18:00-22:00出力明显增加午间风电大发时段水电主动压低出力。这个结果和论文中给出的趋势一致但数值上有差异——差异主要来自论文未公开的水头-库容曲线系数和电价曲线我用的参数是基于合理工程假设的近似值。对比的主要意义在于看调度趋势是否一致而不是数值是否完全吻合。复现EI论文时如果趋势和结论一致基本可以判定模型逻辑正确数值差异只要在合理范围内不需要过分纠结。4.2 PSO收敛曲线分析从收敛曲线看前30次迭代适应度下降非常快说明粒子快速锁定了大致区域50次之后曲线趋于平缓进入精细搜索阶段120次以后基本持平只有小幅波动。这说明200次迭代足够再增加迭代次数对结果提升有限反而增加计算时间。有一点需要注意PSO是随机算法每次运行结果都不完全一样。我跑了20次独立实验最好结果和最差结果差异约6%这说明算法稳定性和收敛性都符合预期。如果你的算法结果波动超过15%建议调大种群规模或检查是否存在约束处理bug。4.3 参数敏感性哪些参数最影响结果我用控制变量法做了几组参数敏感性实验结论如下弃风惩罚系数 lambda_waste从0.1增大到1.0弃风率从5.8%降到1.2%但总收益下降约4%。这个参数本质上是在风电消纳和经济收益之间做权衡没有绝对最优取决于调度偏好最大迭代次数从50增加到200收益提升3.2%从200增加到500收益只提升0.5%。说明200次是性价比最高的配置种群规模30时收敛到局部最优的概率较高50和80的结果差异不明显。对于24维问题50个粒子是够用的水头系数 a2二次项系数这个参数很敏感因为水头直接影响水电出力计算。如果忽略二次项水头视为常数水电出力会被高估约8%-12%这是建模误差的大头。4.4 调度结果的可视化输出我最终输出的可视化图表包括四张24小时负荷、风电、水电出力曲线柱状折线组合水库库容变化曲线PSO收敛曲线弃风量逐时分布。绘制代码很简单用Matlab的plot和bar就能实现figure; plot(1:24, load_demand, k-o, LineWidth, 1.5); hold on; bar(1:24, P_w, r, FaceAlpha, 0.6); bar(1:24, P_h, b, FaceAlpha, 0.6); legend(负荷, 风电出力, 水电出力); xlabel(时段/h); ylabel(功率/MW); grid on;这张图是论文中最核心的结果图也是评审最关注的一张。它直观展示了风电大发时段水电让路、风电低谷时段水电顶上来的联合运行效果。5. 复现过程中的坑与排查技巧5.1 最坑的地方论文参数缺省怎么破论文里很多参数是“示意图”级的没有给出精确数值比如水头-库容曲线只给了形状没给系数。我的做法是优先从论文正文和参考文献里找参数有时候参数藏在系统参数见表X这种不起眼的位置找不到就用工程典型值并在论文笔记里标注假设值对关键参数做敏感性分析衡量它对结果的影响程度。这个思路很重要复现不是复制而是尽可能还原作者的建模逻辑和实验过程。参数缺省时合理假设敏感性分析是学术社区公开代码的通行做法。5.2 PSO早熟的排查与对策第一次跑通时200次迭代的收敛曲线在约20代就停住了但结果明显不合理——水电在午间风电大发时段仍然满发弃风量高得离谱。排查思路先检查适应度函数是否写错单独跑几个手工解验证再检查罚函数系数发现功率平衡罚项比例太高粒子为了满足功率平衡而不敢调整水电出力——这是罚系数过大导致的“僵硬搜索”对策是把罚函数系数从1e6调整到1e4并增加粒子多样性随机重置部分粒子的位置。5.3 库容越界累积导致的不收敛另一个值得记录的问题如果罚函数只惩罚当期越界粒子会通过“先越界、后期再回来”的方式钻空子。比如某时段放水过多导致库容低于下限罚函数增加了适应度值但如果这个越界能在后续时段通过减少放水来恢复粒子就倾向于接受这个短期越界。解决办法是把全时段的库容越界量累加起来作为罚项越界不是按单时段计罚而是累计惩罚V_total_violation sum(max(0, Vmin - V(2:end))) sum(max(0, V(2:end) - Vmax)); penalty penalty 1e6 * V_total_violation^2;这样粒子如果想钻空子需要承受更大的累加惩罚搜索自然倾向于可行域内部。5.4 常见问题速查表问题现象可能原因解决方法收敛曲线不动罚函数系数过大、粒子全部在可行域外降低罚系数增大初始惯性权重结果震荡不收敛学习因子 c2 过大、速度上限过高降低c2减小vel_max水电出力恒等于上限决策变量编码有误、边界处理不当检查是否用错决策变量确认吸收边界生效弃风率始终偏高弃风惩罚系数过小增大lambda_waste运行时间过长种群规模过大、迭代次数冗余适当降低nPop或maxIter6. 扩展建议怎样把这个项目改出一篇更好的论文或毕设复现只是第一步。如果你要做毕设或者发小论文我建议在这个基础模型上加以下扩展方向之一加入抽水蓄能在风-水联合基础上增加抽蓄电站形成风-水-蓄联合调度研究三种电源的协调互补问题复杂度和创新性都比原论文高一个档次改进PSO算法原论文用的是标准PSO你可以把惯性权重线性递减改成自适应混沌调整或者引入遗传算法的交叉变异操作做算法对比实验验证自己的改进算法在收敛速度和精度上的优势考虑风电预测误差原论文假设风速完全已知实际运行中预测误差不可避免。加入蒙特卡洛模拟生成风速预测误差场景做鲁棒优化或随机优化这个方向非常有工程价值多目标优化把收益最大化和弃风率最小化拆成两个目标用NSGA-II或多目标粒子群MOPSO求出Pareto前沿做决策分析。这几种扩展里我个人最推荐第1种或第3种。原因是它们把工程实际问题往深处挖了一层而不是单纯在算法层面做花活。审稿人也更愿意看到模型本身有实质性延展。7. 写在最后的一点实操体会整个复现过程下来最深的感受是EI论文复现的本质不是把代码敲出来而是把论文里“没写出来的话”读出来。公式里的符号说明、参数表格里被省略的中间值、约束条件里隐含的假设这些才是复现真正的难点。我在实际调试时反复用了一个笨办法手工构造一个只有3个时段的简化算例把每个粒子的所有中间变量库容、水头、出力、罚项每步都打印出来和手算结果逐项对比。这比直接调24时段完整模型高效得多因为小规模算例可以完全算明白任何bug都能一眼揪出来。另外一个建议是把代码模块化每个函数单独测试通过后再拼接。这次的项目我拆成了风速模型、水电模型、PSO引擎三部分分别验证后再组合最后整体联调只花了一天就搞定了。如果你拿到这类“算法模型”组合的复现任务不要急着跑通全流程先验证每个子模块的输入输出再玩拼接。后面我打算把这篇论文的扩展版本加入抽蓄和预测误差继续做下去代码跑通后再来写一篇对比实验的文章。如果你复现过程中遇到问题重点关注第5节的速查表大部分坑都在里面了。
RELATED

相关推荐

mise plugins ls 详解:列出已安装插件并检查插件更新的实战指南

mise plugins ls 详解:列出已安装插件并检查插件更新的实战指南

mise plugins ls 详解:列出已安装插件并检查插件更新的实战指南 【免费下载链接】mise dev tools, env vars, task runner 项目地址: https://gitcode.com/GitHub_Trending/mi/mise mise plugins ls(别名 mise plugins list)是 mise 中…

📅 2026/9/10 5:19:21
React Native鸿蒙版实现Checkbox全指南:从桥接原理到踩坑调优

React Native鸿蒙版实现Checkbox全指南:从桥接原理到踩坑调优

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

📅 2026/9/10 5:19:21
OpenSSL DTLS Listener 实战:用 SSL Listener API 构建多线程 DTLS 回显服务器

OpenSSL DTLS Listener 实战:用 SSL Listener API 构建多线程 DTLS 回显服务器

OpenSSL DTLS Listener 实战:用 SSL Listener API 构建多线程 DTLS 回显服务器 【免费下载链接】openssl General purpose TLS and crypto library 项目地址: https://gitcode.com/GitHub_Trending/ope/openssl 本文以 OpenSSL 仓库中的 demos/dtlslistenere…

📅 2026/9/10 5:19:21
MORE NEWS

更多资讯

📰

Supabase 怎么在 Postgres 中用 Vault 存储加密密钥并在 SQL 中引用?

Supabase 怎么在 Postgres 中用 Vault 存储加密密钥并在 SQL 中引用? 【免费下载链接】supabase The Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. 项目地址: https://git…

📰

DeepTutor v1.2.1 版本深度解析:Chat 分阶段 Token 配额可配置化与 Regenerate 响应再生成机制

DeepTutor v1.2.1 版本深度解析:Chat 分阶段 Token 配额可配置化与 Regenerate 响应再生成机制 【免费下载链接】DeepTutor DeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/. 项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor …

📰

oh-my-pi 的 XML 工具调用方言:invoke/parameter 协议格式与流式解析实现解析

oh-my-pi 的 XML 工具调用方言:invoke/parameter 协议格式与流式解析实现解析 【免费下载链接】oh-my-pi ⌥ Coding agent with the IDE wired in 项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi 本指南围绕 oh-my-pi 项目中 packages/ai/src/d…

📰

碎片时间学数据分析:从Excel到Python的入门路径与核心框架

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

📰

高校教材征订进销存系统实战:从业务梳理到Python+Vue落地

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

📰

如何用 docker/compose Go SDK 在自己的程序中加载 Compose 项目并启动服务?

如何用 docker/compose Go SDK 在自己的程序中加载 Compose 项目并启动服务? 【免费下载链接】compose Define and run multi-container applications with Docker 项目地址: https://gitcode.com/GitHub_Trending/compose/compose docker/compose 除了作为 …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬