考虑实时市场联动的电力零售商鲁棒定价策略 关键词:电力现货市场;需求响应;零售定价;鲁棒优化 参考文档:《考虑实时市场联动的电力零售商鲁棒定价策略》 仿真平台:MATLAB YALMIP GUROBI 主要内容:采用IEEE-33节点测试系统,节点边际电价通过二阶锥模型计算得到,节点边际电价通过最小二乘法拟合为一次函数,实时电价场景通过聚类得到,电动汽车类型通过聚类得到,电动汽车需求响应通过主从博弈模型描述并转化为KKT条件,两阶段离散场景分布鲁棒优化模型通过列与约束生成算法迭代求解,主问题为混合整数二次规划问题,子问题为混合整数线性规划问题,均通过GUROBI求解
先看节点边际电价这块硬骨头。直接上二阶锥模型计算,核心代码就几行:
bus = ext2int(loadcase('case33_modified')); mpc = runopf(bus, mpoption('opf.ac.solver', 'IPOPT')); LMP = mpc.bus(:, 14);但原始电价曲线跟狗啃的似的,得用最小二乘给捋直了。下面这段骚操作把非线性关系压成一次函数:
p = polyfit(load_profile, LMP, 1); fit_error = norm(LMP - polyval(p, load_profile))^2;这里有个坑:拟合误差超过2%就得重新校验电网拓扑,别问我是怎么知道的——都是调参调出的工伤。
实时电价场景生成直接甩k-means聚类:
[cluster_idx, centroids] = kmeans(price_scenarios, 5, 'Replicates', 10);电动汽车用户分群更刺激,得考虑充电功率、电池容量、可调度时段三个维度。上高斯混合模型聚类的时候记得标准化数据,不然维度差异能让你哭出声。
重头戏在主从博弈模型。电动汽车用户追求充电成本最小,零售商要利润最大化。转化KKT条件时,特别注意互补松弛条件处理:
Constraints = [Constraints, ... implies(alpha > 0, dual_cons == 0), ... implies(beta > 0, price_bound == 0)];这种混合整数约束在YALMIP里得用big-M法处理,M值别设太大,否则GUROBI求解时会怀疑人生。
考虑实时市场联动的电力零售商鲁棒定价策略 关键词:电力现货市场;需求响应;零售定价;鲁棒优化 参考文档:《考虑实时市场联动的电力零售商鲁棒定价策略》 仿真平台:MATLAB YALMIP GUROBI 主要内容:采用IEEE-33节点测试系统,节点边际电价通过二阶锥模型计算得到,节点边际电价通过最小二乘法拟合为一次函数,实时电价场景通过聚类得到,电动汽车类型通过聚类得到,电动汽车需求响应通过主从博弈模型描述并转化为KKT条件,两阶段离散场景分布鲁棒优化模型通过列与约束生成算法迭代求解,主问题为混合整数二次规划问题,子问题为混合整数线性规划问题,均通过GUROBI求解
两阶段鲁棒优化玩的是列与约束生成(C&CG)。主问题建模时把不确定性场景当孙子训:
MP = optimizer(Constraints, Objective, ops, {'gamma', 'theta'}, {'x', 'y'});子问题专门找最恶劣场景,这里得用对偶变换把max-min问题变成单层优化。注意求解子问题时把主问题变量当固定参数,否则迭代十次都收敛不了。
最后上点干货:实际跑IEEE-33节点系统时,GUROBI的MIPGap建议设0.5%就行,再低计算时间指数爆炸。鲁棒系数别超过0.3,否则保守得电价能吓跑用户。遇到模型不可行?八成是节点电压约束打架,回去检查潮流计算就完事儿。
说到底,电力零售定价就是戴着镣铐跳舞。既要跟着现货市场蹦迪,又得防着用户掀桌子。这套鲁棒优化方案,算是给价格这把双刃剑配了个刀鞘。代码虽糙,能跑就行;模型虽虐,管用就香。