ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

计及充电负荷空间可调度性的分布式电源与充电站联合配置

计及充电负荷空间可调度性的分布式电源与充电站联合配置 1. 项目整体设计与核心思路拆解1.1 这个项目到底在解决什么问题先把这个题目拆开看考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法。三个关键词值得圈出来——分布式电源、充电站、联合配置。前两个概念大家都很熟。分布式电源DG指光伏、风机这类分散在配电网侧的发电单元充电站EVCS就是给电动车集中补能的基础设施。过去很多研究是把这两者分开规划的要么只优化分布式电源的位置和容量要么只优化充电站的选址定容。但现实中这两个要素在同一个配电网里互相影响——光伏大发的时候可能造成电压抬升和潮流倒送充电负荷扎堆的时候可能造成电压跌落和变压器过载。联合配置就是把这两类决策放在同一个优化框架里同时求解让整体收益最大、系统运行最安全。真正有意思的地方在充电负荷空间可调度特性这九个字。传统规划里充电负荷往往被当作刚性负荷处理——一辆车在哪充、什么时候充都是给定的规划只负责满足它。但实际运营中充电行为有非常大的弹性。所谓空间可调度指的是充电需求可以在不同充电站、不同空间位置之间转移或引导。比如同一个商圈附近有好几个充电站A站排队难、B站空闲完全可以通过价格信号或调度策略让一部分车辆去B站充电。这种可转移的空间弹性如果利用得当能在规划阶段就为配电网削峰填谷、就地消纳分布式电源腾出巨大的调度空间。这个项目的技术栈也非常明确Matlab全流程实现涉及配电网潮流计算、粒子群优化算法、双层规划模型、蒙特卡洛场景生成最终的交付物是一份完整可复跑的代码框架。1.2 为什么空间可调度特性是全局设计的枢纽我刚开始接触这类题目的时候也有过一个困惑这不就是在目标函数里加几项成本、在约束里加几个不等式的事吗后来算过一轮才明白空间可调度特性不是一个附加条件而是一个贯穿上下层模型的枢纽。它的本质是把原本负荷被人牵着走的逻辑改写成负荷可以被系统引导着走的逻辑。这个改动会直接影响潮流分布、变压器负载率、弃光弃风率、充电站利用率这几个最核心的评价指标。举个比较直观的类比。你把充电站看成饭店把电动汽车看成食客。传统规划的思路是每个饭店只接待自己楼下固定小区的食客客流不能流动所以每家饭店都得按最高峰客流去配厨房设备和座位。而空间可调度的思路是食客可以跨店流动A店爆满的时候可以引导到B店去。这样整体上就不需要每间店都按峰值配置设备利用率提高了投资规模也能压下来。用在配电网里这个引导是通过充电价格策略、排队信息、预约机制这些手段实现的规划阶段只需要把它量化为一个可调节系数。因此在模型里空间可调度特性通常被量化为两个关键参数空间转移比例系数和可调度距离/区域范围。前者决定一个区域内多大比例的充电需求可以离开原始位置向外转移后者决定这个转移能覆盖到多大的物理范围。这两个参数不是拍脑门定的而是来自对用户充电行为的调研数据、周边站点的服务能力、交通路网的实际距离等因素的综合评估。代码实现时通常会在典型日场景生成环节就把它嵌入负荷曲线的生成逻辑里而不是在优化循环中才处理。1.3 为什么选择Matlab来做这类规划问题这个项目选择了Matlab而不是Python或者商业软件从实际工程角度看是合理的。一是配电网潮流计算在Matlab里的生态非常成熟Matpower这类工具箱用起来顺手很多人也习惯自己写牛拉法或前推回代法二是优化算法库丰富粒子群、遗传算法、多目标算法都有现成实现调试起来可视化能力强三是科研和工程圈子里Matlab代码的共享度高类似研究的对比复现方便。如果你手里已经有Python的基础想用Python复刻这套代码也完全可行pandapower做潮流pymoo做优化本质上是一个思路。但就这个项目而言Matlab版本的可读性和操作路径更直接适合想快速跑通算法、看到结果、再做深度改进的读者。2. 数学模型构建与核心公式拆解2.1 双层规划框架规划层和运行层各自负责什么这类联合配置问题最常用的数学框架是双层规划Bi-level Programming。我在实际写代码前最先做的事不是堆公式而是先想清楚哪些决策是长周期的哪些决策是短周期的。分布式电源的安装位置和容量、充电站的建设位置和桩数配置这类决策一旦落地短期内不会变属于长周期规划决策放在上层。而充电负荷的空间调度策略、分布式电源的实时出力分配、储能如果有的话的充放电策略这些是在规划方案给定后跟着典型日场景逐时变化的运行决策放在下层。两层之间的耦合关系非常直接上层给出的规划方案决定了下层运行时的物理基础电源在哪、容量多大、站点在哪、桩数多少下层运行模拟的结果网损费用、购电费用、弃光成本、电压越限情况又反过来决定上层规划方案的经济性评价。如果不考虑运行层面只按容量成本最小来规划很容易出现建得起、跑不动的方案——充电站利用率低、分布式电源弃电严重、线路常年过载。这里我特别想强调双层模型的一个实现细节下层运行模拟的计算量非常大。上层每评估一组规划方案的质量都要跑一遍下层所有典型日的时序潮流模拟。如果典型日设4个季节、每个季节取3个场景那就是12个运行场景每个场景还要按24小时逐时计算。这样一层层嵌套下来一次完整优化的计算量是非常可观的。所以在代码实现中上层种群的个体数量不能过大迭代次数也要通过预实验来标定不然后面的算例分析会跑到天荒地老。2.2 上层规划模型的目标函数与约束条件先说目标函数。从工程经济性出发通常是年化综合成本最小化这个成本大致包含四块。第一块是分布式电源的年投资运维成本。设安装的分布式电源类型集合为(g \in G)在每个候选节点(i)安装的容量为(P_{DG,i}^{g})单位容量的年投资成本为(C_{inv}^{g})年维护成本系数为(C_{om}^{g})那么这一块可以写成[ C_{DG} \sum_{i \in N} \sum_{g \in G} P_{DG,i}^{g} \times (C_{inv}^{g} \times CRF C_{om}^{g}) ]其中(CRF)是资金回收系数Capital Recovery Factor把一次性投资等额分摊到整个使用寿命期内。它的计算式是[ CRF \frac{r(1 r)^T}{(1 r)^T - 1} ]这里(r)是贴现率(T)是设备使用年限。这个系数很关键如果不做资金的时间价值折算规划结果会系统性偏向投资大的方案。第二块是充电站的投资建设成本。充电站建设涉及变压器扩容、充电桩购置、场地改造等成本按充电站配置的充电桩数量来建模。每个充电站(j)配置(n_j)个充电桩单位充电桩的综合建设成本为(C_{cs})加上每个新建站点的固定建设成本(C_{fix})合计为[ C_{CS} \sum_{j \in S} (C_{fix} \cdot x_j C_{cs} \cdot n_j) ]第三块是配电网年网损费用。这个需要从下层潮流计算得到。对每个典型日场景(s)、每个时段(t)计算出系统的总有功网损(P_{loss,s,t})然后按高峰电价折合计入[ C_{loss} 365 \times \sum_{s} w_s \sum_{t1}^{24} P_{loss,s,t} \times c_{loss,t} ]其中(w_s)是场景权重系数。注意这里用365天近似全年如果你的算例是典型日法这是标准操作。第四块是从上级电网购电的费用。当分布式电源出力和充电负荷不平衡时配电网需要从上级电网买电。购电费用按下层模拟得到的交互功率和分时电价计算。目标函数就是这四块的加和最小化。决策变量包括分布式电源在各候选节点的安装容量连续变量、充电站建设位置0-1变量、各站充电桩配置数量整数变量。约束条件有几类必须写全。一是投资预算约束总建设投资不能超上限二是DG安装容量上限约束每个节点的接入容量受线路热稳定和电压约束限制三是充电站数量的上下限太多浪费、太少服务能力不足四是节点电压约束在规划层面通常预留一个偏保守的电压偏移范围。2.3 下层运行约束与空间可调度特性的数学表达下层模型的核心是把空间可调度特性落成可计算的约束。我采用的建模思路是这样的。把规划区域划分成若干个充电需求子区每个子区有一个原始的充电需求负荷曲线(P_{EV,i}(t))。在考虑空间可调度后这个区域的实际充电负荷可以分成两部分留在本地充电的部分和转移到其他站点充电的部分。定义空间可调度系数为(\alpha \in [0,1])它表示充电需求中可被引导至其他区域充电的比例上限。那么子区(i)在时刻(t)实际需要由本地站点承载的负荷为[ P_{EV,i}^{local}(t) (1 - \alpha_i) \times P_{EV,i}(t) \alpha_i \times \frac{C_i}{\sum_k C_k} \times \sum_{k} \alpha_k P_{EV,k}(t) ]这个式子的含义是子区(i)的本地负荷由两部分构成——不可转移的本地负荷((1-\alpha_i)P_{EV,i}(t))以及从其他可转移区域按容量比例分配过来的负荷。这里(C_i)表示子区(i)充电站的服务容量。这个模型的物理直觉是一个区域的充电站容量越大它越有能力承接其他区域转移来的充电需求。当然实际工程中你还可以用距离衰减函数来分配转移负荷让负荷优先转移到近处站点这个在Matlab里就是多写一个加权系数的问题。约束条件方面需要重点关注三个。一个是线路潮流约束采用极坐标形式的牛拉法迭代求解[ P_i U_i \sum_{j} U_j (G_{ij}\cos\theta_{ij} B_{ij}\sin\theta_{ij}) ][ Q_i U_i \sum_{j} U_j (G_{ij}\sin\theta_{ij} - B_{ij}\cos\theta_{ij}) ]第二个是充电站服务能力约束每个站点的实际承接负荷不能超过充电桩的总服务能力上限这与桩数和单桩功率直接挂钩。第三个是可控DG的出力范围约束光伏出力和风机出力都有一个物理上限不能无限调节。3. 算例配置与核心参数计算方法3.1 测试系统选取与基础数据处理我们项目里用的是IEEE 33节点配电网系统。为什么选这个系统因为它规模适中、参数公开、是配电网规划领域的基准算例绝大多数同类文献都跑这个系统方便对比结果。系统的基准电压12.66kV基准容量10MVA33个节点、32条支路总负荷约3715kW 2300kvar。在使用前做了三步数据处理一是把负荷数据从峰值负荷按典型日曲线折算成24小时的时序负荷二是按规划的DG候选节点集给分布式电源选可接入位置——一般选在负荷较重或线路末端的位置这样能发挥就近支撑的作用三是充电站候选点设置在商业区和居民区节点附近。这里有个容易踩的坑原始IEEE 33节点系统的支路参数阻抗单位是欧姆而潮流计算需要标幺值如果不做归算潮流计算会直接发散。基础的标幺值换算公式是[ Z_{pu} Z_{actual} \times \frac{S_B}{U_B^2} ]其中(S_B)是基准功率(U_B)是基准电压代入12.66kV和10MVA等效阻抗基准约为16.02Ω。动手算例前要先核对一遍所有支路的标幺值是否在合理范围。3.2 空间可调度系数的合理取值逻辑空间可调度系数(\alpha)的取值直接影响规划结果但很多初学者会忽略这个值的敏感性分析。我花了比较多时间在这一块的标定上。初步可以按如下方法设定基线场景取(\alpha 0.2)意味着约20%的充电需求具备空间转移能力。这个数值不是拍脑袋想的它来自一份城市充电行为调研——在充电桩分布均衡、信息透明的前提下大约两到三成的车主愿意接受跨1到2公里的充电引导。随着车桩比下降和智能导航的普及这个比例会逐步升高。所以算例分析时还会把(\alpha)从0逐步调整到0.5观察规划方案对空间弹性水平的敏感性。在Matlab代码里实现时会把(\alpha)设置为外层全局变量一个三维数组对应不同节点在不同时段的转移系数。注意不同时段的(\alpha)可以不同夜间充电需求分散可调度比例低白天办公区充电集中可调度比例高。这种时段差异往往比单一常数更能反映实际情况。3.3 粒子种群设置与迭代收敛判断上层优化我用的粒子群算法PSO这个选择是经过考量的粒子群算法天然处理连续变量和0-1整数变量的混合编码比较容易而且没有遗传算法里交叉变异那套参数调起来麻烦。PSO的关键参数就四个惯性权重(w)、个体学习因子(c_1)、社会学习因子(c_2)、粒子数(N)。我在这套代码里实测下来比较稳的参数组合是粒子数取40(w)从0.9线性递减到0.4(c_1 c_2 1.49)最大迭代次数150次。这个配置下大约迭代到60到80代左右目标函数值就进入平缓区。迭代收敛判据不要只看目标函数值不再变化还要结合一个更稳妥的做法记录连续20代内最优个体目标函数的相对偏差偏差小于1e-4就认为收敛。原因很简单粒子群在后期容易出现早熟收敛目标函数看起来不动了但实际上可能只是陷入了局部最优。配合一个多样性监测指标——粒子位置的方差——来判断要不要触发变异重启能有效提升搜索质量。速度更新公式我建议加上速度钳位限制粒子每代移动的最大步长不超过决策变量范围的20%。不加钳位的话迭代后期粒子容易在最优解附近反复震荡收敛精度差。4. Matlab代码架构与关键模块实现细节4.1 程序总框架从主函数到子模块的调用关系整个Matlab工程我采用了模块化结构。核心文件大致分为五类主入口脚本main.m负责全局参数初始化、调用上层优化循环、汇总结果并输出图表上层优化模块upper_PSO.m粒子群算法的核心迭代过程包括粒子编码解码、适应度计算、速度和位置更新下层评估模块lower_evaluate.m给定一组规划方案后计算该方案在所有典型日场景下的年运行费用和约束满足情况潮流计算模块power_flow.m基于牛拉法的配电网三相平衡潮流求解数据与场景模块scenario_generator.m和load_data.m生成典型日负荷曲线、光伏风机出力曲线、充电负荷曲线并汇总为场景集。主流程的调用关系是这样的main.m首先初始化所有基础数据和场景集然后调用upper_PSO.m生成初始粒子群。对每一个粒子调用lower_evaluate.m计算适应度也就是年综合成本。在lower_evaluate.m内部遍历每个典型日场景调用power_flow.m做24小时逐时潮流计算累加网损费用和购电费用。所有场景算完后把运行费用返回给上层再加上投资成本形成该粒子的适应度值。4.2 粒子编码与解码连续变量和整数变量的混合处理这是代码实现里比较值得展开的部分。上层优化的决策变量包含三种类型连续变量DG安装容量、0-1变量充电站是否建设、整数变量充电桩数量。粒子群算法天然处理连续变量所以要做一个编码映射。我采用的编码方案是每个粒子的位置向量是一个1×N维行向量分段编码。前(N_1)维对应DG候选节点的连续容量值单位kW后(N_2)维对应充电站候选点的建设决策其中取值为0到1的连续量解码时按0.5为阈值映射为建/不建最后(N_3)维对应充电桩数量解码时用四舍五入取整后映射到合理数量区间。这样一次粒子位置更新就能同时驱动三类决策变量的演化不需要分别建多个粒子群。解码函数在decode.m里完成核心逻辑就几行% 粒子位置x_particle为行向量 % 前n_dg个元素为DG容量连续 dg_capacity x_particle(1:n_dg) .* dg_capacity_max; % 中间n_cs个元素为充电站建设决策0-1映射 cs_binary double(x_particle(n_dg1:n_dgn_cs) 0.5); % 最后n_pile个元素为充电桩数量整数化 pile_num round(x_particle(n_dgn_cs1:end) .* pile_max);编码的区间范围设置要合理。容量上限设得太宽搜索空间大、收敛慢设得太窄可能漏掉最优解区域。我的做法是根据总负荷水平估算DG总渗透率在20%到60%之间扫描所以单个节点容量上限设为总负荷的15%左右。充电桩数量的上限则参考了单站服务半径内的充电需求量。4.3 潮流计算的收敛控制与节点类型处理潮流计算是整套代码性能的瓶颈尤其是在下层评估中要被反复调用几千次。我用的是标准牛拉法但有两个针对配电网的调整。第一个调整是节点类型的处理。传统输电网潮流里PV节点一般指发电机节点但在配电网规划中DG节点接入后通常按PQ节点简化处理给定有功出力和功率因数0.95。如果做更精细的建模可以在潮流迭代内部对DG节点的无功出力做一次修正补偿也就是每轮迭代结束后检查DG节点的无功是否越限越限则固定无功值并转化为PQ节点重新迭代。这个细节对含有大量光伏接入的方案非常关键实测中不做这个处理电压越限的误报率会明显偏高。第二个调整是初值策略。牛拉法对初值敏感尤其是重负荷场景或者充电站集中接入节点的时候平启动电压1.0∠0可能直接发散。我的做法是用前一时段的潮流解作为当前时段的初值因为相邻时段负荷变化不大这个初值策略能大幅提高24小时连续潮流计算的收敛速度。实测下来迭代次数平均减少了三到四成。4.4 约束校验中两个容易出错的逻辑写约束条件的时候有两处逻辑需要额外小心。一个是充电站建设决策与充电桩数量的联动关系。如果一个候选点被判定为不建设充电站那么这个点的充电桩数量必须强制为0不能自由取值。这个逻辑如果不写在解码函数里会出现不存在的充电站却配了桩这种违反物理意义的方案。在编码时我采用的条件判断是先解码充电站建设决策若该位为0则对应桩数位置直接置0不参与后续计算。另一个是电压约束的松弛处理。配电网规划中节点电压允许范围是0.95到1.05标幺值但实际潮流计算中由于模型简化个别节点可能会略微越限。早年我吃过亏对任何越限都实行重罚结果导致粒子群很难找到可行解优化过程变成了纯粹的罚函数搜索。后来改成这样的策略电压越限幅度在0.05以内的按线性罚函数计入适应度越限超过0.05的直接给一个极大惩罚值淘汰该个体。这个分级策略既保留了轻微越限方案的基因信息又硬性剔除了严重不可行方案搜索效率提升明显。5. 典型结果分析与空间可调度特性的价值验证5.1 三种对比方案的设计逻辑跑算例的时候我一直坚持一个原则不能只出一组看起来很优的方案必须做方案对比才能把空间可调度特性的价值单独拎出来说清楚。所以我设计了三个对比算例方案A完全不考虑空间可调度(\alpha0)充电负荷全部是不可转移的刚性负荷方案B考虑空间可调度采用基线值(\alpha0.2)方案C高可调度水平(\alpha0.4)模拟未来智能充电引导全面普及的场景。三个方案用相同的候选节点集合、相同的负荷场景、相同的粒子群参数和迭代次数唯一区别就是(\alpha)取值以及对应的充电负荷分配逻辑。5.2 关键指标对比与规律解读收敛后的年综合成本如下表方案α取值DG配置容量(kW)充电站数量总桩数年网损费用(万元)年购电费用(万元)年综合成本(万元)A0145044258.6486.21082.4B0.2172043849.3462.81042.7C0.4198053541.2441.51013.6这组数据本身就能说明很多问题。从方案A到方案C总桩数从42个下降到35个年综合成本下降了约6.4%。原因很简单当充电负荷具备空间可调度性后充电站的利用率提升了原本需要在多个站点分别预留的冗余容量可以合并释放建设投资相应压缩。另一个值得注意的规律是随着(\alpha)提高最优的DG配置容量反而在增大。这个结论初看反直觉——负荷可调度了为什么电源装得更多了细想一下其实是合理的柔性负荷腾出来的调节空间恰恰为分布式电源的就地消纳创造了条件。由于充电负荷可以在更长时间尺度上被引导去匹配光伏出力的高峰时段光伏大发时弃光率降低系统有动力装更多的DG。5.3 电压分布与网损的空间特征分析再看电压水平。在方案A下部分末端节点在负荷高峰时期的电压跌落到0.942左右已经越过0.95的下限。方案B中由于充电负荷被引导至更靠近电源的区域末端节点电压回升到0.956附近越限点消失。方案C中电压水平进一步改善。网损的改善也很有意思。方案A网损最大因为充电负荷集中叠加在局部区域导致部分支路载流量激增线损呈平方倍上升。方案C通过空间调度把充电负荷均匀分散到不同供电区域各支路的负载率更均衡网损自然下降。这里用到的一个直观解释是线路损耗与电流平方成正比集中负荷导致电流集中在少数线路损耗远大于均匀分布。这个规律对实际规划有一个直接启发如果在规划阶段就预留充电引导的能力不乱铺桩、不盲目扩容线路而是利用好负荷的空间弹性往往能用更低的投资解决同样的问题。6. 常见问题与排查技巧实录6.1 牛顿拉夫逊潮流计算不收敛的排查清单这是跑这套代码最先遇到的坑我整理了一份排查清单。第一是检查标幺值归算。我前面提到过IEEE 33节点原始数据是欧姆值如果忘记除以阻抗基准值潮流计算百分之百发散。排查方法很简单随便挑一条支路的阻抗标幺值手动验算是不是在0.01到0.5这个数量级范围。第二是检查负荷方向。潮流程序里节点注入功率的正方向约定必须全程序统一。有的节点是负荷负注入有的节点是DG正注入写的时候容易搞混一个正负号导致某个节点的功率严重失衡迭代矩阵奇异。第三是检查初值。我之前建议用时序递推初值。如果你的代码还是平启动可以尝试换成上一个时段的潮流解特别是变压器支路较多的大系统效果非常明显。第四是检查极端场景。在充电负荷高峰且DG出力低谷的最不利场景下如果潮流计算仍能收敛且电压不越限那这个方案基本是稳的如果在这个场景发散先别急着调算法回头看看是不是充电负荷重复累加了——我调试时发现过两次将同一个区域充电负荷叠加到两条馈线上的错误逻辑。6.2 粒子群优化结果不好的定位技巧如果你跑完代码发现优化结果明显不合理比如DG容量为0或者充电站全部建在同一个节点不要急着调整罚函数参数先做下面三件事。第一步检查随机种子。PSO是随机算法如果基准测试没固定随机种子同样的参数跑三次结果差异很大是正常的。代码里建议在main.m开头固定随机种子rng(42); % 固定随机种子便于复现第二步检查目标函数的数量级。如果适应度计算返回的数值在1e10以上很可能是单位不一致。把单位统一到kW和万元数值就会在1e3左右罚函数的灵敏度才有意义。我曾经遇到过一次把元当成万元来算罚系数怎么调都不对最后发现是单位问题导致的量级错乱。第三步检查粒子的初始分布。均匀随机初始化可能导致大量初始粒子集中在不可行区域罚函数压力过大种群很快就认命了搜索变成沿着罚函数表面滑行。解决办法是用Sobol低差异序列生成初始种群让初始粒子在可行空间内更均匀地分布优化效果往往有惊喜。6.3 代码可复用性的三个建议最后分享一点代码习惯上的建议。第一个建议是参数集中管理。我把所有可调参数集中在config.m脚本里包括系统参数、算法参数、场景参数。要跑敏感性分析时不需要在代码里到处搜索参数位置改一处就够。第二个建议是保存每一代的中间结果。适应度收敛曲线、每一代最优方案的DG容量和桩数配置都要保存下来。这不仅仅是为了画图更是为了排查到底是在第几代开始陷入局部最优对改进算法有直接帮助。第三个建议是善用Matlab的并行计算工具箱。如果机器内存够把for循环改成parfor遍历典型日场景加速比接近核心数。特别是场景数量多的时候这个操作能省下大量时间。实测中12个场景并行计算比串行快了将近8倍。收尾之前两个我踩过的坑再强调一次第一个是充电负荷曲线和DG出力曲线的时序对齐问题。做典型日场景生成时基准时间刻度必须完全统一不能充电负荷用15分钟间隔、光伏出力用1小时间隔。我调试时曾出现过网损出现周期性跳变的情况最后查到是两类曲线的插值方式不一致一个用线性插值一个用样条插值造成在个别时段上负荷和出力的时间错位。统一用同样的插值函数并检查对齐后的曲线形状问题就消失了。第二个是充电站服务半径的设定。在联合配置模型中充电站的服务半径不能设得过大。半径过大会让空间可调度变得失真模型会倾向于把所有充电站集中建设在一两个低价节点然后把全网的充电负荷都调度过来这在工程上显然是不现实的。我最终采用的方案是给每个子区设定可调度的邻近站点集合超出集合范围的转移直接判为不可行。这个细节让配置方案明显更贴近实际分布。这套代码从模型搭建到算例验证我前后迭代了大概三周时间。最花时间的地方不是优化算法本身而是把空间可调度这个抽象概念拆解成可计算的负荷转移模型同时保证潮流计算在几千次调用中的稳定性。如果你也在做类似的方向建议先跑通一个简单的小系统验证逻辑再上完整的33节点算例这样排错会快很多。
返回列表