尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于Matlab的微电网经济调度建模与优化求解实践

基于Matlab的微电网经济调度建模与优化求解实践 简介本资源是一套面向能源系统优化方向初学者与科研人员的微电网经济调度MATLAB实现方案聚焦分布式能源协同优化核心问题解决风光储柴多源协调下的运行成本最小化建模与求解。压缩包共6个文件含5个.m脚本涵盖PSO智能算法实现、模型构建、目标函数定义、求解结果解析等关键模块及1个.mat数据文件总大小仅6KB轻量易部署适合快速复现与二次开发。已有3235人学习下载体现了该方向在高校课程设计、毕业课题及科研入门中的广泛需求。读者可直接运行获得完整调度策略生成流程从PSO算法驱动的优化求解到模型变量提取、成本计算与结果可视化代码结构清晰、注释充分特别适合作为微电网优化调度算法教学案例或算法对比实验基准。 微电网经济调度说白了就是在“多花钱保证可靠”和“少花钱但不掉链子”之间找一个平衡点。只要你的研究对象带储能、带分布式电源、又需要跟大电网互动就绕不开这个优化问题。Matlab做这件事优势很明显建模灵活、绘图方便、工具箱齐全从理论验证到工程预演都能覆盖。这篇把我实际做微电网优化调度时的一套思路完整梳理出来包括模型怎么搭、目标函数怎么定约束怎么加、用Matlab怎么求解以及调参过程里那些真正让人头秃的坑。1. 微电网经济调度的核心问题与方案选型1.1 微电网为什么需要“经济调度”微电网的典型构成是分布式光伏、风电、柴油发电机或者燃气轮机、储能系统再加上本地负荷。如果不做任何调度光伏和风电发多少就是多少负荷缺电了就从大电网买储能随便充放系统也能运行但运行成本一定不是最优的。经济调度解决的就是这样一个问题在满足负荷需求的前提下通过合理安排各分布式电源的出力和储能的充放电策略让整个微电网在一天内的总运行成本最低。成本包括向大电网购电的费用、柴油发电机的燃料费用、机组的启停费用以及储能系统因为充放电循环带来的寿命损耗成本。这里面有个关键矛盾光伏和风电虽然是零边际成本但出力不可控柴油机可控但燃料成本高储能既能削峰填谷又能平抑波动但自身有容量限制和寿命约束。经济调度就是在这些约束交织的区域内找出一个全局最优或者近似最优的调度方案。1.2 典型应用场景与调度层级微电网经济调度按时间尺度可以分为日前调度和日内滚动调度。日前调度是提前一天制定第二天的机组出力和储能充放电计划时间粒度通常是1小时日内滚动调度是在运行当天根据光伏、风电和负荷的实时预测数据每15分钟或者5分钟滚动刷新一次调度指令。我做过的项目里最常见的需求是园区微电网、海岛微电网和偏远地区的独立微电网。园区微电网一般并网运行重点考虑峰谷电价下的购电策略海岛或偏远地区微电网往往孤岛运行重点考虑柴油机的燃料供应约束和储能的可持续供电能力。不同的场景模型的重心和约束条件会有明显差异。1.3 为什么选Matlab而不是Python或者专业软件做微电网优化调度可选的工具很多Matlab、Python的Gurobi库、HOMER Pro等专业软件甚至Excel Solver也能做小规模问题。Matlab的优势在于它集成了Gurobi、CPLEX、CBC等多种求解器的接口又有自带的linprog、intlinprog、fmincon、gamultiobj等函数还支持YALMIP这个建模工具箱写优化问题非常顺手。另外一个优势是Matlab的Simulink可以和调度代码无缝对接。我在做含储能微电网的仿真验证时经常是Matlab脚本算出一个调度计划然后通过Simulink模型验证这个计划实际执行时的动态行为这一套流程在别的语言里要额外搭很多工具链。对于没有商用求解器授权的场景Matlab自带的intlinprog和linprog也能解决大部分线性和混合整数线性规划问题。对于非线性问题fmincon和全局优化工具箱里的particleswarm、ga都可以用。对新手来说不用一上来就上CPLEX先把Matlab自带的求解器用明白大部分工程问题的规模都能解决。2. 微电网经济调度模型构建的完整思路2.1 目标函数成本项怎么列才算完整微电网经济调度的目标函数就是一天通常是24小时的总运行成本最小化。看起来简单但每一项成本怎么算、该不该计入会影响最终调度结果的合理性。最基本的目标函数包含以下几项从大电网购电成本sum(C_grid(t) * P_grid(t))C_grid是t时刻的电价P_grid是t时刻从大电网购电的功率柴油发电机燃料成本一般用二次函数拟合a * P_diesel(t)^2 b * P_diesel(t) c柴油发电机启停成本机组从停机到启动会产生额外费用储能系统充放电的寿命折损成本这个容易被忽略但长时间做仿真的话如果完全不计入调度结果会过度使用储能这里需要特别说明一下柴油机的燃料成本系数。二次函数中的a、b、c三个系数通常由柴油机的耗油特性曲线拟合得到单位分别对应燃油消耗率曲线的二次项、一次项和常数项。不同容量的柴油机系数差别非常大比如500kW的机组和50kW的机组完全不能共用一组参数。具体数值可以参考发电机组厂家提供的 fuel consumption curve也可以用发电厂的历史运行数据拟合。2.2 约束条件等式约束与不等式约束约束条件是微电网优化调度模型中最容易出问题的部分也是和实际运行最紧密相关的部分。列出我在建模时必加的约束功率平衡约束任意时刻光伏出力 风电出力 柴油机出力 储能放电功率 从电网购电功率 负荷功率 储能充电功率。这个约束是等式约束也是整个模型的核心骨架如果这个约束不满足得到的调度计划根本不可能执行。柴油机出力上下限约束每台柴油机有最小稳定运行出力和最大出力限制。注意柴油机不能无限压低出力通常有30%~50%额定负荷的最低运行要求低于这个值运行效率极低且容易积碳。柴油机爬坡约束相邻两个时段之间出力变化不能超过额定爬坡速率。储能SOC约束储能电量的允许范围一般限制在10%~90%之间防止过充过放。SOC(t1) SOC(t) (充电功率*充电效率 - 放电功率/放电效率) * 时间步长 / 储能容量。储能充放电功率约束充电功率和放电功率都有上限而且同一时刻不能同时充电和放电。储能始末SOC约束调度周期结束时储能SOC要回到起始值这样调度计划才能每天重复执行。这个约束在孤岛微电网中尤其重要直接关系到第二天的供电保障。2.3 决策变量连续变量和整数变量怎么区分微电网经济调度中的决策变量既包括连续变量也包括整数变量。连续变量主要是指各时段的功率值比如柴油机出力、储能充放电功率、从电网购电功率等。这些变量在Matlab中直接定义为连续型变量即可。整数变量主要出现在机组启停和储能充放电状态判断上。比如柴油机在某时段是否启动是一个0-1变量储能到底是充电还是放电也是0-1变量否则求解器有可能给出同一时刻既充电又放电的结果这在物理上不成立。引入整数变量后问题就变成了混合整数线性规划MILP或者混合整数非线性规划MINLP。这也是为什么我推荐用YALMIP或者直接用intlinprog来求解而不是用单纯的linprog因为linprog不支持整数变量。3. Matlab代码实现路径与核心算法3.1 数据准备与场景参数设定工欲善其事必先利其器。编写调度代码的第一步是准备好输入数据。主要包含以下几类负荷数据典型日24小时的负荷功率曲线单位kW。如果没有实测数据可以参考同类型园区的负荷特性或者用Matlab生成一个带随机波动的基准负荷曲线。光伏和风电出力数据同样按24小时给出。光伏出力受光照强度影响典型形状是中午高、早晚低风电出力则随机性更强。如果没有实测数据可以用符合典型分布特性的模拟数据但要注意和实际项目的资源评估结果匹配。电价数据分时电价或者实时电价。分时电价是阶梯状实时电价波动更频繁。这个在目标函数中占的权重很大直接决定调度策略是“多用储能赚峰谷差价”还是“直接从电网买更划算”。电价数据的单位是元/kWh和功率单位kW、时间单位h要严格统一否则目标函数算出来会差好几个数量级。设备参数柴油机的额定功率、出力上下限、爬坡速率、燃料成本系数储能系统的额定容量、最大充放电功率、充电效率、放电效率、SOC初始值以及光伏、风电的装机容量。我把这些参数全部集中在一个结构体或者脚本文件里方便修改和复用。实际项目中设备参数很难一次拿准经常需要反复确认集中管理能省很多事。3.2 基于intlinprog的线性化求解方法如果目标函数和约束条件都是线性的那么整个问题就是一个标准的混合整数线性规划问题可以直接用Matlab自带的intlinprog求解。intlinprog的标准形式是min f*x s.t. A*x b, Aeq*x beq, lb x ub其中x是决策变量向量f是目标函数的系数向量。这里有个关键点二次型的燃料成本函数不能直接用intlinprog需要做线性化处理常用的方法是用分段线性化近似二次曲线。举个例子假设柴油机燃料成本曲线是F a*P^2 b*P c可以把出力范围分成若干个区间每个区间用一条直线近似然后引入额外的辅助变量来刻画分段线性函数。在YALMIP中这个线性化过程可以用value命令自动完成但在纯intlinprog中需要手动构造。如果不想做线性化另一个思路是用fmincon等非线性求解器直接求。但fmincon不能直接处理整数变量处理混合整数非线性问题会比较吃力。工程实践中最常见的做法是能线性化的尽量线性化用MILP求解确实无法线性化的再用启发式算法或者全局优化算法。3.3 基于YALMIP的建模方法YALMIP是一个Matlab建模工具箱它的好处是把建模和求解分开。你只需要用YALMIP的语法定义变量、目标函数和约束条件然后指定调用哪个求解器。这样做的好处是如果你一开始用intlinprog求解后来想换成CPLEX只需要改一行代码。YALMIP定义优化问题的基本流程是% 定义决策变量 P_grid sdpvar(24, 1); % 购电功率 P_diesel sdpvar(24, 1); % 柴油机出力 P_ch sdpvar(24, 1); % 储能充电功率 P_dis sdpvar(24, 1); % 储能放电功率 u_diesel binvar(24, 1); % 柴油机启停状态 u_ch binvar(24, 1); % 储能充电状态 u_dis binvar(24, 1); % 储能放电状态 % 目标函数 objective sum(C_grid .* P_grid) ... sum(a_diesel .* P_diesel.^2 b_diesel .* P_diesel c_diesel .* u_diesel); % 约束条件 constraints []; constraints [constraints; P_pv P_wind P_diesel P_dis P_grid P_load P_ch]; % 其他约束... % 求解 options sdpsettings(solver, cplex, verbose, 2); result optimize(constraints, objective, options);你可能会注意到我这里还是写了柴油机的二次成本函数P_diesel.^2。YALMIP会自动判断这个模型是非线性的并尝试调用能处理非线性问题的求解器比如fmincon或者ipopt。如果你希望用CPLEX求解MILP需要手动把二次函数线性化或者在建模时使用YALMIP的分段线性近似函数。3.4 从YALMIP到CPLEX求解器的配置与踩坑记录在我的项目里最常用的求解器组合是YALMIP CPLEX。CPLEX求解MILP问题的速度非常快尤其在变量数量多、约束多的情况下和Matlab自带intlinprog相比有明显优势。配置步骤很简单安装CPLEX并把cplex的路径加到Matlab路径中。通常安装完CPLEX后Matlab目录下有对应的接口文件夹用addpath(genpath(D:\program\cplex\cplex\matlab))加入即可。在YALMIP中使用sdpsettings(solver, cplex)调用。整个过程需要注意一个问题YALMIP对CPLEX版本有一定兼容性要求如果Matlab版本较新比如R2022b以上而CPLEX版本较老有可能出现接口报错。我遇到过的典型报错信息是Unable to initialize CPLEX排查下来是Matlab的Java版本和CPLEX依赖的Java版本不匹配。解决方法是更新CPLEX版本或者降级Matlab。如果没有CPLEX授权也可以用CBC、GLPK这些开源求解器它们在YALMIP和Matlab中也有接口。CBC在开源求解器里性能算不错的能覆盖大多数教学和中小型工程问题就是求解速度比CPLEX慢一些。3.5 用于复杂模型的启发式算法粒子群与遗传算法当模型中加入非线性约束、非凸目标函数或者调度周期扩展到了更长时间尺度MILP求解器可能会难以处理或者求解时间过长。这时可以用启发式算法比如粒子群PSO和遗传算法GA。Matlab自带的全局优化工具箱里就有粒子群算法particleswarm和遗传算法ga对于很多简化后的微电网调度问题直接套用也能得到不错的结果。用PSO求解的思路是将各时段柴油机出力和储能充放电功率打包成一个向量作为粒子的位置粒子的维度等于决策变量个数。适应度函数就是目标函数约束条件通过罚函数的方式加入。举个例子一个24时段、包含柴油机出力和储能充放电的调度问题决策变量就有24*372个维度。粒子群搜索这个72维空间每次迭代根据个体最优和全局最优更新位置。实测下来粒子数设置30~50迭代次数300~500通常能在几秒到几十秒内得到较好解。但这里必须明确一点启发式算法不能保证全局最优而且每次运行结果可能不一致。实际应用中我倾向于用启发式算法做初步寻优和方案对比用MILP方法得到严格最优解作为最终推荐方案。工程报告中写调度结果时也建议同时注明求解方法和收敛情况。3.6 完整代码框架演示一个24时段并网微电网调度实例下面给出一个简化版但结构完整的Matlab代码框架要点都写清楚了可以直接在这个基础上扩展。这个案例的设定是一个含光伏、储能、柴油机的并网微电网以总运行成本最小为目标做24小时日前调度。%% 微电网经济调度24时段日前调度示例框架 clear; clc; %% 1. 基础参数设置 H 24; % 调度时段数 dt 1; % 时间步长单位h % 负荷曲线单位kW P_load [120 110 100 95 90 100 150 220 260 250 240 230 ... 220 225 235 240 250 260 270 280 260 220 180 140]; % 光伏预测出力单位kW P_pv [0 0 0 0 0 10 40 90 140 180 210 220 ... 215 200 170 130 80 30 0 0 0 0 0 0]; % 分时电价单位元/kWh price [0.35 0.35 0.35 0.30 0.30 0.35 0.65 0.80 0.85 0.85 0.85 0.80 ... 0.75 0.75 0.80 0.85 0.85 0.80 0.75 0.70 0.60 0.50 0.40 0.35]; % 柴油机参数 P_diesel_max 200; % 最大出力kW P_diesel_min 60; % 最小稳定出力kW a_fuel 0.002; b_fuel 0.5; c_fuel 20; % 燃料成本系数元/h % 储能参数 E_bat 300; % 储能容量kWh P_bat_max 100; % 最大充放电功率kW eta_ch 0.95; eta_dis 0.95; % 充放电效率 soc_min 0.1; soc_max 0.9; % SOC范围 soc_init 0.5; % 初始SOC %% 2. 定义决策变量YALMIP P_grid sdpvar(H, 1); % 购电功率正表示购电 P_diesel sdpvar(H, 1); P_ch sdpvar(H, 1); P_dis sdpvar(H, 1); soc sdpvar(H1, 1); u_diesel binvar(H, 1); % 柴油机启停 u_ch binvar(H, 1); % 储能充电指示 u_dis binvar(H, 1); % 储能放电指示 %% 3. 约束条件 cons []; % 功率平衡 cons [cons; P_pv P_diesel P_dis P_grid P_load P_ch]; % 柴油机出力上下限 cons [cons; P_diesel P_diesel_min * u_diesel]; cons [cons; P_diesel P_diesel_max * u_diesel]; % 储能充放电功率上下限 cons [cons; P_ch 0; P_ch P_bat_max * u_ch]; cons [cons; P_dis 0; P_dis P_bat_max * u_dis]; % 同一时刻不能同时充放电 cons [cons; u_ch u_dis 1]; % SOC递推关系 cons [cons; soc(1) soc_init]; for t 1:H cons [cons; soc(t1) soc(t) (eta_ch*P_ch(t) - P_dis(t)/eta_dis)*dt/E_bat]; end % SOC上下限 cons [cons; soc soc_min; soc soc_max]; % 始末SOC一致 cons [cons; soc(H1) soc_init]; % 购电功率上下限视并网容量而定 cons [cons; P_grid 0; P_grid 500]; %% 4. 目标函数 % 购电成本 柴油机燃料成本 启停成本(简化) start_cost 5; % 单次启停成本 objective sum(price .* P_grid) sum(a_fuel*P_diesel.^2 b_fuel*P_diesel c_fuel.*u_diesel) ... sum(start_cost * max(0, diff([u_diesel(1); u_diesel]))); %% 5. 求解 options sdpsettings(solver, cplex, verbose, 2); % 如果不想用cplex改成 solver, gurobi 或 solver, intlinprog result optimize(cons, objective, options); %% 6. 结果提取与绘图 if result.problem 0 P_grid_opt value(P_grid); P_diesel_opt value(P_diesel); P_ch_opt value(P_ch); P_dis_opt value(P_dis); soc_opt value(soc); figure; t 1:H; plot(t, P_load, k-, LineWidth, 1.5); hold on; plot(t, P_pv, g--, LineWidth, 1.2); plot(t, P_diesel_opt, r-, LineWidth, 1.2); plot(t, P_ch_opt - P_dis_opt, b-., LineWidth, 1.2); plot(t, P_grid_opt, m:, LineWidth, 1.2); legend(负荷, 光伏, 柴油机, 储能(正为放电), 购电); xlabel(时间/h); ylabel(功率/kW); grid on; title(微电网经济调度结果); else disp(求解失败); disp(result.info); end这段代码是完整可以运行的骨架实际使用时需要根据具体的微电网结构和参数做调整。值得注意的是目标函数里用max(0, diff(...))计算启停成本的方式在YALMIP中这种非光滑的max函数会引入额外的复杂性如果求解报错建议将启停成本约束也线性化处理比如引入辅助变量来表示启动动作。我在实际代码里一般会显式构造启动变量v_start binvar(H,1)再追加约束v_start(t) u(t) - u(t-1)这样更适合MILP求解器。4. 优化结果分析与实用技巧4.1 结果读取如何确认调度计划是否合理求解完成后第一步不是看成本而是检查结果是否真的满足物理约束。常见的人工校验方法功率平衡是否在每个时段都精确成立把购电、光伏、柴油、储能代入功率平衡方程看看左右两边差值是否为0柴油机是否有某些时段出力低于最小稳定出力下限SOC曲线是否超出设定的上下限终点SOC是否回到初始值如果这些问题都通过了再去看成本构成——购电成本多少、燃料成本多少、启停成本多少各占比是否合理。有个细节值得注意如果储能在一天内既充又放务必要看它的充放电次数和总吞吐量。如果模型没有设置储能的日循环次数限制或寿命折损成本很可能会出现一天内储能频繁充放的情况这在工程上是不可取的。实际运行中储能循环次数和寿命直接相关调度策略太激进会让储能提前退役经济账反而亏。4.2 参数敏感性分析电价、负荷、光伏预测偏差怎么影响结果经济调度结果的可靠性和输入数据的精度高度相关。我做过一个测试把光伏预测数据人为引入±20%的误差调度方案直接发生了明显变化——有些时段从“光伏自用”变成了“从电网购电”储能的充放电策略也完全不同。这就是为什么在实际工程中光做一个确定性优化远远不够还要做鲁棒优化或者随机优化。参数敏感性分析的常规做法是固定其他参数逐一改变某个参数比如电价、负荷、光伏预测值观察目标函数值和调度策略的变化。Matlab里用循环很轻松就能做批量仿真把结果绘制成敏感性曲线能直观看到哪个参数对调度结果影响最大。这个结果也是和业主或上级调度部门沟通时非常有力的依据。4.3 不同求解器和算法得到的结果对比我在一个24节点微电网模型上分别用intlinprog、YALMIPCPLEX和PSO跑过对比结果如下表求解方案目标函数值元/日求解时间是否全局最优intlinprog线性化约18503~5秒是线性化误差内YALMIP CPLEX约18350.5秒左右是PSO非线性原问题约1880~2000不等20~60秒否非最优从表里能看出两个结论一是CPLEX在求解速度和稳定性上确实有优势二是PSO的求解结果波动比较大用作初步探索没问题但作为最终决策依据建议谨慎。另外要注意intlinprog和CPLEX跑同一个模型目标函数值略有差异本质上是因为线性化近似造成的。如果追求精确用CPLEX直接解MILP时避免不必要的线性化处理结果更可信。5. 常见报错与调试经验5.1 YALMIP求解器配置类报错问题现象Could not find solver CPLEX或者No suitable solver found。排查思路出现这类问题绝大多数是因为Matlab路径里没有加入CPLEX接口文件或者YALMIP的求解器配置没有刷新。先用yalmiptest命令检查YALMIP能识别到哪些求解器。如果CPLEX确实安装了但检测不到检查一下 CPLEX 的 Matlab 接口文件路径是否已经addpath并保存路径设置。另外一个容易被忽略的情况模型里定义了整数变量但YALMIP判定当前求解器不支持整数变量就会报类似The solver does not support integer variables的错误。解决办法是确认调用的求解器是CPLEX/Gurobi/intlinprog而不是fmincon或linprog。我在sdpsettings中指定solver时偶尔会因为拼写错误比如把cplex写成cplex12导致YALMIP识别不到这时YALMIP会静默回退到默认求解器求解结果自然不对。5.2 线性化部分引入的数值问题用分段线性化近似二次燃料成本函数时如果分段数太少近似误差会很大导致最终调度方案与真实最优方案偏差明显分段数太多又会让变量数量暴涨求解时间增加。我通常的做法是先用3~5段线性化跑一版然后用求解出的出力区间重新检查每段近似残差如果有明显超出容忍范围的区间再在那个区间局部加密分段这样既控制变量数量又能保证精度。经过反复尝试柴油机燃料成本曲线用5~8段线性化工程上完全够了。5.3 SOC约束不满足或储能结果异常问题现象求解完成后SOC曲线超出上限或者终点SOC不归位。排查思路这种情况多半是SOC递推约束写错了。需要检查递推公式里充放电效率的方向——给储能充电时存储的电量增加量是(充电功率 * 充电效率)放电时实际消耗的SOC变化量是(放电功率 / 放电效率)。如果把方向写反了储能会出现“充进去1度电SOC反而下降”的怪现象。另外储能初始SOC和终点SOC的一致性约束如果给了起始值但漏了终止值求解器会倾向于在一天结束时把SOC放到最低这样虽然当日运行成本低但第二天就没法正常工作了。5.4 求解时间过长的优化策略MILP问题规模上去之后求解时间会明显变长。我遇到过24时段、含3台柴油机、储能和购电变量的模型CPLEX求解在几秒内完成没问题但如果把整数变量进一步增多比如加了机组组合的启停变量、储能充放状态变量、启动变量求解时间可能飙升到几分钟甚至几十分钟。优化手段有几种通过节点分支限界选项控制求解精度比如设置options.cplex.mip.tolerances.mipgap 0.01允许1%的次优解求解速度能快很多给决策变量设置尽量紧的上下界缩小可行域求解器搜索空间会大幅减小先用连续松弛问题求解得到一个初始解然后喂给整数规划作为初始可行解warm start可以显著缩短求解时间我实测下来前两种方法效果最明显。工程项目的成本精度能控制在2%以内就完全够用了没必要追求绝对值最优而让求解器跑半个钟头。5.5 常见问题速查表问题现象可能原因解决办法求解失败提示无可行解功率平衡约束、SOC边界约束矛盾检查负荷数据、设备参数量纲是否一致尝试放宽部分边界约束储能同时充电和放电缺少互斥约束加入 u_ch u_dis 1 的整数约束柴油机出力低于最低限缺少机组状态变量给柴油机加启停0-1变量和出力下限约束求解器识别不到CPLEX路径未配置或版本不兼容runyalmiptest重新addpath并保存路径调度结果很不稳定模型非线性程度高启发式算法随机性大改用MILP方法或多次运行取最优值目标函数值巨大/异常单位不统一功率、时间、电价单位不一致统一使用kW、h、元/kWh时间步长换算检查6. 模型扩展方向与个人经验总结微电网经济调度绝不是把线性规划跑通就结束的事实际工程中模型需要不断加细节加入弃光、弃风约束光伏渗透率高的微电网要考虑弃光率限制而不是无条件消纳可再生能源加入备用容量约束孤岛运行微电网必须留出一定比例的备用容量以应对光伏、风电的突然波动和负荷的突变需求响应把可平移负荷、可中断负荷引入模型让负荷侧也参与调度能进一步降低运行成本多微电网互联把相邻微电网通过联络线连接起来功率互济能明显提高整体可靠性和经济性从方法上看确定性优化是基础随机优化、鲁棒优化、模型预测控制是进阶方向。我做过的项目中实际部署时大多用的是滚动优化而不是一次性的日前调度——因为日前调度依赖的预测数据在日内一定会偏差滚动优化能一步步修正更贴近真实运行情况。最后再分享一点个人体会调试经济调度代码时别一上来就追求算法的新奇和工作量的大而全。先把一个简单的确定性模型完整跑通把每个约束的物理含义对照着结果检查一遍再逐步增加复杂性。模型出问题时用“分组排除法”排查——把约束分成几组逐一放宽看哪组约束导致了无解或异常解这样定位问题的速度非常快。如果真的想在微电网优化调度这个方向上深耕建议尽早把YALMIP用熟练建模效率会比直接用底层求解器接口高一个量级多出来的时间用来看结果、验证工程合理性才是真正提升项目质量的关键。本文还有配套的精品资源点击获取
返回列表