基于双层规划模型的微网新能源经济消纳共享储能优化配置:MATLAB代码复现及详细解读
(文章复现)考虑微网新能源经济消纳的共享储能优化配置matlab代码 参考资料《考虑微网新能源经济消纳的共享储能优化配置》 提出了考虑新能源消纳的共享储能电站容量功率配置方法针对储能电站投运成本最低与微能源网运行经济性最优的多目标建立了双层规划模型 其中外层模型求解电站配置问题内层模型求解经济消纳率及微能源网优化运行问题使用Karush-Kuhn-Tucker (KKT)法对模型转化求解。 使用matlabyalmipgurobi进行求解 代码逻辑清晰注释详细 本资源包含对文献的详细解读以及完整matlab代码复现最近在折腾微电网储能配置的课题偶然翻到这篇《考虑微网新能源经济消纳的共享储能优化配置》的论文里面提到的双层规划模型有点意思。咱们今天就来盘一盘它的实现套路顺便跑通配套的Matlab代码。先理清整体思路外层搞储能容量配置多大电池、多少功率内层算微电网运行经济性。两层之间通过KKT条件打通最后扔给Gurobi求解器暴力破解。代码用YALMIP建模确实方便比手写矩阵舒服多了。核心代码分三大模块走起%% 外层优化储能容量配置 for P_ess P_range for C_ess C_range [cost,flag] InnerLayer_Optimization(P_ess, C_ess); if flag 1 total_cost Calculate_Cost(P_ess, C_ess, cost); Update_Result(P_ess, C_ess, total_cost); end end end外层就是暴力枚举储能功率和容量组合每次枚举都要调内层算经济性。这里有个坑要注意——必须在内层收敛后才记录数据不然会混入无效解。(文章复现)考虑微网新能源经济消纳的共享储能优化配置matlab代码 参考资料《考虑微网新能源经济消纳的共享储能优化配置》 提出了考虑新能源消纳的共享储能电站容量功率配置方法针对储能电站投运成本最低与微能源网运行经济性最优的多目标建立了双层规划模型 其中外层模型求解电站配置问题内层模型求解经济消纳率及微能源网优化运行问题使用Karush-Kuhn-Tucker (KKT)法对模型转化求解。 使用matlabyalmipgurobi进行求解 代码逻辑清晰注释详细 本资源包含对文献的详细解读以及完整matlab代码复现内层模型才是重头戏咱们看怎么用KKT转化function [operational_cost, flag] InnerLayer_Optimization(P_ess, C_ess) % 定义决策变量 P_grid sdpvar(24,1); % 电网购电量 P_charge sdpvar(24,1); % 储能充电 P_discharge sdpvar(24,1); % 储能放电 % 构建目标函数 cost sum(c_grid.*P_grid*dt) sum(c_ess.*(P_chargeP_discharge)*dt); % 约束处理 constraints [... P_charge 0, P_discharge 0,... P_charge P_ess, P_discharge P_ess,... sum(P_charge)*dt C_ess, sum(P_discharge)*dt C_ess]; % 调用求解器 ops sdpsettings(solver,gurobi,verbose,0); optimize(constraints, cost, ops); flag 0; if strcmp(info.problem, Infeasible) 0 operational_cost value(cost); flag 1; end end这里有几个实现细节值得说储能充放电功率分开建模比用同一个变量更方便约束处理dt是时间间隔参数直接影响容量计算精度电网电价c_grid做成24维向量可以模拟分时电价场景重点来了KKT条件怎么塞进模型里看这段转换代码%% KKT条件处理 [grad, lagrange] kkt(F, cost, variables); complementarity []; for i 1:length(lagrange.dual) complementarity [complementarity, 0 lagrange.dual(i) 1000]; end constraints [F, grad 0, complementarity];这里用YALMIP自带的kkt函数自动生成平稳性条件然后手动处理互补松弛条件。不过实际跑的时候发现Gurobi对严格互补条件支持有限得适当放宽约束范围。跑完优化后结果可视化才是灵魂啊上这个三维曲面图代码mesh(P_range, C_range, Total_cost_matrix) xlabel(储能功率(kW)) ylabel(储能容量(kWh)) zlabel(总成本(万元)) title(储能配置成本曲面) colormap(jet)当看到曲面上出现明显的最低点就知道找到最优解了。不过实际项目中这个曲面可能有多局部极值需要结合约束条件仔细验证。最后说下调试经验遇到求解失败时优先检查内层问题的可行性。可以通过放松储能充放电功率约束来测试或者检查电价参数是否合理。另外Gurobi对数值稳定性很敏感建议把变量数量级调整到接近1的范围。完整代码里还有风光出力预测、负荷曲线生成等模块不过核心就是上面这些。建议跑案例时先用小规模数据比如6小时调度验证逻辑正确后再扩展到24小时能节省不少调试时间。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2452266.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!