ARTICLE DETAIL

资讯详情

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

微电网风光储需求响应日前经济调度:Matlab+Yalmip+Gurobi建模

微电网风光储需求响应日前经济调度:Matlab+Yalmip+Gurobi建模 最近一两年微电网相关的课题和项目特别多尤其是“风光储”组合加需求响应这种结构。我最早接触到“基于风光储能和需求响应的微电网日前经济调度”这个题目是在一次做课题方案设计的时候。当时手里有风光预测曲线、负荷预测数据、分时电价表要回答的问题其实很具体未来24小时里储能什么时候充、什么时候放需求响应在哪些时段调用多少可调负荷微燃机什么时候开机、出力多大和主网之间的购售电怎么安排才能让总运行成本最低同时所有约束都满足。这个问题的本质是一个混合整数线性规划问题在Matlab里用Yalmip工具箱建模、调用Gurobi或Cplex求解是目前最成熟的实现路线。它看起来是个典型的优化问题但真正做起来从模型公式到代码落地再到结果合理性判断每一层都有讲究。这篇文章就把我完整做完一遍的流程、建模细节、代码结构和踩坑经历整理出来给正在做相关毕设、课程设计或者工程预研的读者一个可以直接参考的完整路径。1. 先把调度问题掰开揉碎24小时到底在决策什么为什么需求响应能把成本打下来1.1 日前调度问题的物理场景还原所谓日前经济调度就是在前一天基于对次日24小时风光出力、负荷需求的预测制定第二天的运行计划。微电网的系统结构一般包括光伏发电、风力发电、储能系统、微型燃气轮机或柴油发电机、可调负荷需求响应资源以及与外部大电网的联络线。一个真实的场景是这样早上九十点钟阳光开始变强中午是光伏出力高峰傍晚光伏归零但负荷恰恰迎来晚高峰。如果只靠电网买电晚高峰分时电价最高购电成本会很难看。储能的作用就是把中午过剩的光伏电存起来留到晚上释放需求响应的作用则是把一部分可转移负荷挪到电价低谷期或者在高价时段削减一部分非必需负荷通过补偿机制让整体成本降下来。这就是这个课题要解决的痛点光有电源侧调节不够负荷侧的弹性也必须用起来。把储能和需求响应放在同一个模型里协调调度比单独看任何一种手段更能降低运行成本。1.2 为什么“风光储需求响应”必须耦合建模而不是分开调很多初学者有个误区觉得可以先单独排储能的充放电计划再单独排需求响应计划最后各自给结果拼在一起就行。这个思路在简单场景下勉强能跑但只要储能和需求响应的调节能力在同一个时段有重叠就会出问题。举个具体例子下午两点光伏出力大于负荷电价是平价时段。这时候储能充电和需求响应比如把负荷往后挪都可以削减净负荷、腾出空间。但从成本角度看储能充电相当于把便宜的现货电留到晚上高价时用需求响应则要支付补偿成本。如果两个子系统分开调度储能计划不知道需求响应已经削掉了一部分负荷可能仍然按照最大功率充电结果导致端口功率不符合联络线约束更常见的是分开调度的结果只是局部最优不是全局最优。耦合建模的意义就在于此所有决策变量放在同一个目标函数和同一组约束里让储能充放电功率、需求响应调用量、微燃机出力、购售电功率在同一批约束下相互协调一次求解就得到全局最优解。这正是“日前经济调度”这个课题的核心价值所在。1.3 数据需求和基础参数准备动手写代码之前先把输入数据准备好。我的做法是统一用一个Data结构体或者Excel表格管理所有输入参数避免散落在脚本各处。核心输入包括24小时光伏预测出力曲线单位kW典型数据形如白昼凸起、夜间归零24小时风电预测出力曲线夜间的出力往往比白天大一些有明显的随机波动特征24小时基础负荷预测曲线通常有早晚两个高峰分时电价表一般分峰、平、谷三段购电价和售电价不同储能额定容量、最大充放电功率、初始SOC、SOC上下限、充放电效率微燃机容量、效率、燃料价格、爬坡速率、启动成本需求响应总可调容量、每时段可调用上限、单位补偿成本以一个典型算例为例我会设置光伏额定容量500kW风电400kW储能容量1000kWh最大充放电功率200kWSOC范围0.1~0.9初始SOC0.3储能充电效率0.95、放电效率0.95。微燃机额定250kW爬坡速率80kW/h。峰平谷电价分别为1.1元/kWh、0.6元/kWh、0.3元/kWh。需求响应总容量200kWh单时段最大调用量50kW单位补偿成本0.15元/kWh。这些参数不一定是工程真实数据但足以让模型跑出一个有参考意义的调度结果。实际工程中风光预测数据一般来自数值天气预报加功率预测系统负荷预测可以来自历史负荷外推电价则按当地的峰谷分时电价政策设定。2. 数学模型的每一行约束背后都是实打实的物理边界2.1 目标函数每一项成本都要对得上实际账目目标函数是最小化一天的总运行成本。我采用的写法包含五个部分购电成本减去售电收益微燃机燃料成本储能运行维护成本需求响应补偿成本以及微燃机的启停成本。写成数学形式是min F Σ [ C_buy(k)·P_buy(k) - C_sell(k)·P_sell(k) C_mt·P_mt(k) C_om·(|P_ch(k)| |P_dis(k)|) C_dr·P_dr(k) ] Σ S_start·u_start(k)各符号含义P_buy和P_sell是时段k从主网购售电的功率C_buy和C_sell是分时购售电价P_mt是微燃机出力C_mt是燃料成本折算系数P_ch和P_dis是储能充电和放电功率C_om是单位运维成本P_dr是需求响应调用量C_dr是单位补偿成本S_start和u_start是微燃机启动成本和启动状态。在Matlab代码里目标函数直接用Yalmip表达式累加Objective sum(price_buy.*P_buy) - sum(price_sell.*P_sell) ... C_mt * sum(P_mt) C_om * (sum(P_ch) sum(P_dis)) ... C_dr * sum(P_dr) S_start * sum(u_start);这里有一个细节购售电价不对称时如果售电价格设置不当模型会试图通过反复购电售电套利出现病态结果。一般售电价设定为购电价的0.8倍左右或者在约束里禁止同时购售电具体做法后面会讲到。2.2 功率平衡约束无论怎么调电能不能凭空产生功率平衡是所有调度模型的底线约束。任意时段k所有电源出力、储能充放电、需求响应调用后的负荷必须时刻相等。等式为P_pv(k) P_wt(k) P_mt(k) P_buy(k) P_dis(k) P_load(k) - P_dr(k) P_ch(k) P_sell(k)左边的P_pv和P_wt在这里是“实际消纳”的风光出力。如果模型允许弃风弃光这两个值是决策变量取值在0到预测值之间如果不允许弃风弃光就固定为预测值。实际工程中弃风弃光虽然不经济但受制于线路容量和调节能力不可能完全避免所以我把它们设为决策变量并加上不大于预测值的约束。对应的约束写法是Constraints [Constraints, P_pv P_wt P_mt P_buy P_dis P_load - P_dr P_ch P_sell];2.3 储能SOC的迭代关系电池不是水桶效率损失必须算储能模型如果只写充放电功率范围而不写SOC状态转移出来的调度计划往往是“纸面最优”买电充电、同时段放电成本不增加却被重复计算了损耗。正确的SOC演化式SOC(k1) SOC(k) (η_ch·P_ch(k) - P_dis(k)/η_dis)·Δt / E_rated其中η_ch和η_dis分别为充放电效率Δt取1小时E_rated是储能额定容量。P_ch和P_dis必须分成两个非负变量因为电池不能同时充放电。同一时刻这种状态可以用一组二元变量或一个非线性互补约束来保证。我推荐做法是用二元变量加式约束P_ch(k) ≤ M·u_ch(k) P_dis(k) ≤ M·u_dis(k) u_ch(k) u_dis(k) ≤ 1其中u_ch和u_dis是二元0-1变量M是一个足够大的正数这里取最大充放电功率即可。对应的SOC约束代码Constraints [Constraints, SOC SOC_min, SOC SOC_max]; Constraints [Constraints, SOC(2:25) SOC(1:24) (eta_ch*P_ch - P_dis/eta_dis) / E_rated]; Constraints [Constraints, P_ch PMax * u_ch, P_dis PMax * u_dis]; Constraints [Constraints, u_ch u_dis 1];当然如果追求简单也可以不用二元变量采用状态切换的启发式规则比如某个时段充放电方向由电价差决定。但作为完整的经济调度模型二元变量的混合整数规划才是标准做法也是最符合真实储能控制逻辑的建模方式。2.4 需求响应约束负荷弹性不是无限电力调用有上限有节奏需求响应建模有两种常见途径按调用机制区分激励型DR直接削减/转移负荷获得补偿和价格型DR通过改变电价让用户自发调节用电行为。本文代码实现的是激励型DR即调度中心直接决定每个时段削减或转移多少负荷。关键约束包括调用量不超过该时段可调负荷上限P_dr(k) ≤ P_dr_max(k)全天累计调用量不超过总量限制Σ P_dr(k) ≤ E_dr_total调用量非负P_dr(k) ≥ 0之所以加全天总量限制是因为需求响应资源不是无限的调用过多会影响用户正常生产生活。工程上这个限制通常由负荷聚合商根据可签约容量确定。代码写法Constraints [Constraints, 0 P_dr P_dr_max]; Constraints [Constraints, sum(P_dr) E_dr_total];2.5 微燃机与联络线约束微燃机本身的运行约束包括出力上下限和爬坡约束P_mt_min ≤ P_mt(k) ≤ P_mt_max -P_ramp ≤ P_mt(k1) - P_mt(k) ≤ P_ramp联络线约束则是微电网与主网交换功率的大小限制通常在并网运行模式下设定比如不高于400kW0 ≤ P_buy(k) ≤ P_line_max 0 ≤ P_sell(k) ≤ P_line_max为了避免同一时段同时购电又售电的套利常规做法是加一个二元变量约束。由于购售电价不同且售电价低于购电价正常模型中一般不会出现同时购售但如果加上保险起见可以这样约束P_buy(k) ≤ P_line_max · u_grid(k) P_sell(k) ≤ P_line_max · (1 - u_grid(k))这段建模做完整个确定性日前经济调度模型就完整了。模型规模不大24个时段几十个连续变量和几十个二元变量对求解器来说是小规模问题毫秒级可解。3. Matlab代码实现的完整骨架建模、求解、结果输出3.1 求解器与工具箱的选型逻辑为什么是YalmipGurobi我见过不少人用fmincon或linprog直接解这个模型。fmincon适合非线性问题但本文模型含有二元变量本质上是一个MIP问题用fmincon处理整数约束非常别扭要么写外循环枚举要么用非光滑罚函数近似弄到最后收敛性没保障。linprog只能解纯线性规划处理不了二元变量。正确的选型思路是用Yalmip做建模层把优化模型从数学公式翻译成Matlab代码然后调用后端的Gurobi、Cplex、GLPK等求解器做实际求解。Yalmip最大的价值在于建模语言和求解器解耦你把目标函数和约束写出来它自动识别问题类型并调用合适的求解器。遇到本文这种MILP问题会自动选用Gurobi的MIP求解器如果未来模型改成了非线性Yalmip也能对接fmincon等求解器。Gurobi和Cplex对比我个人的使用体验是Gurobi在这类中小规模MIP上求解速度更快安装也更友好Matlab调用时接口清晰。学术用途可以申请免费许可证工程上预算够就直接上商业版。3.2 环境准备Yalmip和Gurobi在Matlab里的安装细节首先是Yalmip在Matlab命令行输入可以根据文档从GitHub仓库直接拉取或者手动下载zip包后把整个文件夹加入MATLAB路径。关键步骤是在主页设置里点击“设置路径”把Yalmip所在文件夹添加到路径点保存。这一步漏了后面addpath只在当前会话生效重启Matlab后又报“未定义变量sdpvar”。然后是Gurobi安装后还需要在Matlab里进行配置。% 在Matlab中配置Gurobi addpath(C:\gurobi\win64\matlab); % 路径按实际安装位置修改 gurobi_setup;如果路径配置正确运行yalmiptest会看到Yalmip能识别到Gurobi求解器否则需要检查环境变量或路径。这里有一个常见的坑64位Matlab必须搭配64位Gurobi32位Matlab配32位Gurobi位数不匹配会导致mex文件加载失败报“找不到指定模块”。3.3 主程序代码结构全解析我把整个程序模块化分为数据输入、变量定义、约束组装、求解、结果输出五部分。下面是核心骨架可直接运行参考。%% 1. 数据输入 T 24; dt 1; % 时段数步长1小时 Ppv_forecast [0 0 0 0 0.1 0.3 0.5 0.8 0.95 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.1 0 0 0 0 0 0 0]*500; Pwt_forecast [0.8 0.7 0.9 0.75 0.6 0.5 0.4 0.3 0.2 0.3 0.4 0.5 0.55 0.6 0.5 0.4 0.3 0.2 0.4 0.5 0.6 0.7 0.75 0.8]*400; Pload [0.45 0.4 0.35 0.35 0.3 0.4 0.6 0.75 0.85 0.9 0.95 0.9 0.8 0.75 0.7 0.75 0.8 0.95 1 0.95 0.9 0.85 0.8 0.7]*1000; % 峰平谷电价1-7谷8-11平12-14峰15-18平19-23峰24谷 price_buy [0.3*ones(1,7), 0.6*ones(1,4), 1.1*ones(1,3), 0.6*ones(1,4), 1.1*ones(1,5), 0.3]; price_sell price_buy * 0.8; % 系统参数 E_rated 1000; PMax 200; SOC_min 0.1; SOC_max 0.9; SOC0 0.3; eta_ch 0.95; eta_dis 0.95; P_mt_max 250; P_mt_min 10; P_ramp 80; C_mt 0.65; S_start 150; P_dr_max 50; E_dr_total 200; C_dr 0.15; P_line_max 400; C_om 0.02;%% 2. 变量定义 P_buy sdpvar(1, T); P_sell sdpvar(1, T); P_mt sdpvar(1, T); P_ch sdpvar(1, T); P_dis sdpvar(1, T); SOC sdpvar(1, T1); P_dr sdpvar(1, T); u_ch binvar(1, T); u_dis binvar(1, T); u_grid binvar(1, T); % 1购电0售电 u_start binvar(1, T); % 1启动0不启动其中P_pv和P_wt如果允许弃风弃光就可以设为变量如果按全额消纳固定值处理就不设变量。为了简化示例这里直接使用预测值即认为风光全部消纳这在一般算例里也说得过去。%% 3. 约束组装 Constraints []; % 功率平衡 Constraints [Constraints, Ppv_forecast Pwt_forecast P_mt P_buy P_dis ... Pload - P_dr P_ch P_sell]; % 购售电上限与互斥 Constraints [Constraints, 0 P_buy P_line_max.*u_grid]; Constraints [Constraints, 0 P_sell P_line_max.*(1-u_grid)]; % 储能约束 Constraints [Constraints, SOC_min SOC SOC_max]; Constraints [Constraints, SOC(1) SOC0]; Constraints [Constraints, SOC(2:T1) SOC(1:T) (eta_ch*P_ch - P_dis/eta_dis) * dt / E_rated]; Constraints [Constraints, 0 P_ch PMax.*u_ch]; Constraints [Constraints, 0 P_dis PMax.*u_dis]; Constraints [Constraints, u_ch u_dis 1]; Constraints [Constraints, SOC(T1) SOC0]; % 结束SOC不低于初始保证可持续运行 % 微燃机约束 Constraints [Constraints, P_mt_min P_mt P_mt_max]; for k 1:T-1 Constraints [Constraints, -P_ramp P_mt(k1)-P_mt(k) P_ramp]; end % 需求响应约束 Constraints [Constraints, 0 P_dr P_dr_max]; Constraints [Constraints, sum(P_dr) E_dr_total];%% 4. 目标函数与求解 Objective sum(price_buy.*P_buy) - sum(price_sell.*P_sell) ... C_mt * sum(P_mt) C_om * (sum(P_ch) sum(P_dis)) ... C_dr * sum(P_dr) S_start * sum(u_start); ops sdpsettings(solver, gurobi, verbose, 1, showprogress, 1); optimize(Constraints, Objective, ops);%% 5. 结果输出 P_buy_opt value(P_buy); P_sell_opt value(P_sell); P_ch_opt value(P_ch); P_dis_opt value(P_dis); SOC_opt value(SOC); P_dr_opt value(P_dr); P_mt_opt value(P_mt); TotalCost value(Objective);如果遇到没有商用求解器的情况也可以用Yalmip内置的linprog间接调用但遇到MIP需要整数变量时就无能为力了。所以我仍然建议优先配置Gurobi或者至少配置一个开源的GLPK求解器能解决一部分非整数问题。3.4 求解结果收敛性的快速验证灵敏度初检程序跑完先别急着看优化结果。我习惯做三个快速验证判断模型有没有潜在地犯错误第一检查求解器返回的求解状态。optimize返回结果中info.problem如果是0表示求解成功如果是1表示问题不可行如果是2或3可能无界或数值问题。不可行时优先检查约束是否互相矛盾比如SOC初值加了SOC(1) SOC0但SOC范围约束写成了SOC_min SOC(1) SOC_max而SOC0在范围之外就会立刻报不可行。第二检查负荷平衡是否满足。在Matlab中验证Ppv Pwt P_mt P_buy P_dis - P_load P_dr - P_ch - P_sell的残差是否接近0。这一步看似多余但实际模型越改越复杂任何一行符号写错都会导致等式不再成立。第三检查储能SOC是否单调合理充电时段SOC上升放电时段SOC下降且SOC曲线不超过边界。如果出现充电但SOC下降大概率是效率方向搞反了η_ch和η_dis的位置写反了。三个检查通过后结果才算可信才能进入下一步的曲线解读。4. 调度结果怎么看从一堆数据里读出经济调度的门道4.1 典型一天的调度计划解读我先给出一个典型算例的期望结果方便读者对照自己的输出检查合理性。假设白天中午光伏出力达到450kW负荷约800kW电价是平段0.6元。此时储能会倾向于充电把多余的光伏电存起来。到了晚上19点到22点光伏出力为0负荷却冲到950kW以上电价跳到1.1元。此时储能以最大功率200kW放电需求响应在19点和20点各调用50kW把等效负荷压下去一截微燃机满发250kW再叠加从主网购电补足缺口。从SOC曲线看典型趋势是夜间和上午缓慢充电、下午充电到80%-90%上限、晚间放电到第二天的目标值或下限附近。正常情况下SOC不应频繁触顶或触底因为电池深度充放电会加速老化所以在工程修正中还可以在目标函数里加入SOC偏离中间值的惩罚项让调度结果更贴合真实运行习惯。4.2 需求响应和储能的互补关系一个削峰一个填谷比对有无需求响应两种场景的调度结果会发现一个很明显的规律没有需求响应时储能会在晚高峰放空购电功率可能触及联络线极限加了需求响应后晚高峰净负荷降低储能放电时长缩短购电压力明显缓解。这说明需求响应本质上是在负荷侧做文章和储能这种电源侧的调节手段形成互补。两者配合时储能不用全程顶着放电寿命压力小需求响应在几个尖峰时段做定点削减补偿成本也不高。这种协同效应正是本文模型比传统“只优化储能”模型成本更低的核心原因。4.3 分时电价对调度行为的引导效果把电价曲线拿出来跟调度计划对照能直观理解模型的决策逻辑谷时段电价0.3元储能充电微燃机尽量停机负荷大量从电网购买需求响应基本不被调用平时段电价0.6元充电变慢或转放电微燃机开始小幅出力购电逐步减少峰时段电价1.1元储能放电、微燃机满发、需求响应调用量达到上限这个规律说明模型确实在根据电价信号自动调节运行方式。如果调试时发现某个时段风光出力很大但储能不充电、或者需求响应被随意在低价时段调用那就需要检查是不是成本参数设置失真或者约束条件遗漏了某个上限。5. 我从零跑通这个项目踩过的坑三个典型问题和对应的排查路径5.1 求解器一直报不可行问题定位从约束冲突开始第一次跑通模型的时候我遇到一个尴尬的情况Gurobi直接报不可行。检查代码半天最后发现问题是SOC的初值和范围约束互相矛盾。我把SOC_min SOC SOC_max和SOC(1) SOC_initial同时加上但SOC_initial设的是0.05低于SOC_min的0.1于是第一天第一个时段就出界了。排查路径是有顺序的先用Yalmip的check函数检查每个约束是否都满足定位是哪类约束出问题再看该约束涉及的变量是否有上下限不一致最后检查参数是不是有量纲问题比如荷电状态和小时代数混淆。% 检查约束可行性 check(Constraints);check函数返回值为负的约束就是不可行的。这一步很高效基本能锁定问题所在的那一条约束。5.2 同时购售电套利现象目标函数有bug的信号还有一个值得说的问题是结果里出现某时段既购电又售电。逻辑上这种情况不应该存在因为购电价永远高于售电价同时操作必然亏损。但只要模型中购电价和售电价都在目标函数里独立出现没有加互斥约束求解器在某些数值情况下可能会找到这种看似“不合理”但目标值恰好没有变差或因为其他约束耦合导致的可行解。解决方法是直接加互斥约束也就是前面提到的u_grid变量。还有一种补救做法是给P_buy和P_sell增加一个很小的同购同售惩罚项比如0.001*sum(P_buy P_sell)但最稳妥的还是二元变量互斥。5.3 储能过度深充深放导致结果难看工业界经验与模型修正基于纯经济成本的优化结果往往会倾向于让储能每天从SOC10%充到90%这在数学上最优但工程上会让电池寿命大幅衰减。因此工程版本普遍会在目标函数里加入一个SOC偏离中间值的惩罚项或者把SOC的工作区间限制在一个更窄的范围内比如30%~85%。我在项目里加了这样一个二次惩罚SOC_ref (SOC_max SOC_min) / 2; Objective Objective 0.01 * sum((SOC(1:T) - SOC_ref).^2);这个惩罚项并不大不至于大幅偏离经济最优但能有效抑制不必要的深度充放。算出来的SOC曲线会比纯经济解平稳得多也更像一个电池管理系统愿意接受的策略。5.4 调试过程中最节约时间的习惯跑MIP模型时如果每天手动改参数会很痛苦我习惯写好一个参数扫描脚本把几个关键参数比如E_dr_total、C_dr、SOC_min做成循环向量批量跑并保存结果表格最后用Matlab绘图函数把成本变化趋势画出来。这样可以迅速看出模型行为是否符合物理直觉。比如需求响应总容量从0增加到300kWh总成本应该单调下降但下降速率递减如果成本反而上升目标函数或约束方向一定有问题。6. 确定性模型的局限与进阶方向从日前到日内滚动、从确定性到不确定性6.1 确定性日前模型的三个先天不足目前这个模型是假设风光和负荷预测值完全准确的确定性模型。真实情况是预测误差常常在10%到30%之间尤其是风电夜间一阵大风出力可能比预测高出20%也可能骤降。确定性模型的局限体现在三个方面第一它没有给备用容量留余地如果光伏实际出力低于预测系统可能面临切负荷风险第二储能调度计划完全依赖预测轨迹一旦实际出力偏离SOC曲线就会偏离最优轨迹第三需求响应调用的前提也是负荷预测准确实际用户行为千差万别。6.2 常见进阶路线鲁棒优化、随机优化、模型预测控制如果把模型往实用方向推进有三种常见路线第一种是鲁棒优化。对风光出力构建一个不确定集合比如预测值上下浮动15%的区间在集合内所有场景下都可行的调度方案。代价是保守成本会比确定性模型高一些但鲁棒性很强适合不确定性波动空间大的场景。第二种是场景随机优化。对预测误差做概率分布采样生成若干典型场景把目标函数改成期望成本最小化。这种方法能在风险和成本之间取得折中但对场景生成的数量有要求场景少了不具代表性多了计算量膨胀。第三种是模型预测控制MPC。不一次性求出24小时计划而是每15分钟或每小时滚动求解一次只取下一时刻的控制指令执行后面重新预测再滚动。这种方式能及时修正预测误差是实际工程中应用最广的调度架构。如果读者打算继续深入研究建议方向是先用本文的确定性模型跑通基线再逐步引入不确定性和滚动优化每一步只加一个变量。这样学习曲线平缓也不会被一堆数学符号砸晕。做完这个项目我最深的体会是经济调度模型的本质是把“运行规则”翻译成“数学语言”的过程。风光储和需求响应每一项看起来都很熟悉但把它们放到同一个目标函数里让它们互相牵制时很多看似合理的直觉会被打破模型的优势恰恰体现在这种“全局协调”上。Matlab和Yalmip的组合让这个过程变得很高效调试的重点也从“怎么写代码”转向“怎么把物理约束表达准确”。如果这篇文章能帮你少走几步弯路把它跑通那么下一步面对更复杂的鲁棒模型、多时间尺度调度时你会有足够扎实的底子去接手。
返回列表