💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥
📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文,算法,机器学习和人工智能学习。
🚀支持:🎁🎁🎁如果觉得博主的文章还不错或者您用得到的话,可以关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!目录
1 概述
本文提出一种确定机组组合的降维半解析动态规划方法,可以与其他经济调度算法相结合,用以解决多种约束条件下的机组组合问题。该方法通过比较各时段负荷及机组参数,剔除各时段下不满足要求的组合状态,从而减少动态规划中的状态点数;根据机组的最小连续运行、停运时间限制,以及机组功率上升、下降速度的约束,剔除了状态点间的无效路径,从而减少了动态规划的路径个数,达到降维的目的;在确定机组启停状态后,再采用解析法进行机组的功率分配,可以大大提高动态规划方法的效率。
2 知识点学习
机组组合问题我们前面都总结过:
电力系统机组组合优化调度是一个复杂的问题,它涉及到在满足电力需求的同时,优化发电机的启停状态以及输出功率,以最小化运行成本、满足系统约束(如功率平衡、机组出力限制、网络传输限制等),并考虑系统的可靠性和稳定性。IEEE 14节点、IEEE 30节点和IEEE 118节点系统模型是电力系统研究中常用的测试系统,用于模拟和验证不同的优化算法和策略。
研究步骤
- 系统建模:
- 网络模型:包括节点、线路、变压器等元件的参数。
- 发电机模型:每台发电机的成本函数(通常是二次函数)、最小/最大出力限制、启停成本、爬坡速率等。
- 负荷模型:各节点的负荷预测值。
- 问题定义:
- 目标函数:通常是最小化总运行成本,包括发电成本和启停成本。
- 约束条件:
- 功率平衡约束:每个节点的注入功率等于负荷。
- 线路传输容量约束:确保线路上的潮流不超过其最大容量。
- 发电机出力约束:每台发电机的输出功率在其最小和最大限制之间。
- 爬坡速率约束:发电机输出功率的变化率有限制。
- 启停时间约束:发电机从停机到启动或从运行到停机需要一定时间。
- 优化算法选择:
- 混合整数线性规划(MILP):将问题中的非线性部分线性化,使用商业求解器(如CPLEX、Gurobi)求解。
- 动态规划:适用于小规模系统,可以处理复杂的约束和状态转移。
- 启发式算法:如遗传算法、粒子群优化、模拟退火等,适用于大规模系统,但可能无法保证找到最优解。
- 拉格朗日松弛法:将复杂约束松弛到目标函数中,通过迭代求解。
- 数据准备与仿真:
- 使用MATLAB、Python(如使用Pyomo库结合CPLEX或Gurobi求解器)等工具进行编程。
- 加载IEEE 14节点、IEEE 30节点或IEEE 118节点的系统数据。
- 设定仿真参数,如时间步长、仿真时长等。
- 结果分析:
- 分析优化后的机组启停计划和出力计划。
- 比较不同算法的性能,如求解时间、成本节约等。
- 评估系统的可靠性和稳定性,如是否满足所有约束条件。
- 优化与改进:
- 根据仿真结果调整算法参数或优化模型。
- 尝试新的优化策略或算法。
3 运行结果
3.1 算例1——IEEE14节点
3.2 算例2——IEEE30节点
3.3 算例3——IEEE118节点
3.4 二阶锥松弛法
%发电机费用曲线 二次函数分段线性化
P_nl = sdpvar(n_gen, n_L, n_T);
% for i = 1: n_gen
for t = 1: n_T
C = [C,
gen_P(gen(:,GEN_BUS),t) == sum(P_nl(:,:,t), 2)+gen(:,GEN_PMIN).*u_state(gen(:,GEN_BUS),t)/baseMVA,
];
% for l = 1: n_L
C = [C,
0 <= P_nl(:,:,t) <= (gen(:, GEN_PMAX)-gen(:, GEN_PMIN))/n_L/baseMVA*ones(1,n_L),
];
% end
end
% end
%%
% 机组开机费用 Cjk
cost_up = sdpvar(n_gen, n_T);
C = [C, cost_up >= 0];
for k = 1: n_T
for t = 1: k-1
C = [C,
cost_up(:,k) >= start_cost(:,t).*(u_state(gen(:,GEN_BUS),k) - sum(u_state(gen(:,GEN_BUS),[k-t: k-1]),2))
];
end
end
for i = 1: n_gen
if (init_state(gen(i,GEN_BUS)) == 0)
C = [C,
cost_up(i,1) >= start_cost(i,init_down(i))*(u_state(gen(i,GEN_BUS),1)-init_down(i)*init_state(gen(i,GEN_BUS)))
];
end
end
%发电机费用曲线 二次函数分段线性化
P_nl = sdpvar(n_gen, n_L, n_T);
% for i = 1: n_gen
for t = 1: n_T
C = [C,
gen_P(gen(:,GEN_BUS),t) == sum(P_nl(:,:,t), 2)+gen(:,GEN_PMIN).*u_state(gen(:,GEN_BUS),t)/baseMVA,
];
% for l = 1: n_L
C = [C,
0 <= P_nl(:,:,t) <= (gen(:, GEN_PMAX)-gen(:, GEN_PMIN))/n_L/baseMVA*ones(1,n_L),
];
% end
end
% end
%%
% 机组开机费用 Cjk
cost_up = sdpvar(n_gen, n_T);
C = [C, cost_up >= 0];
for k = 1: n_T
for t = 1: k-1
C = [C,
cost_up(:,k) >= start_cost(:,t).*(u_state(gen(:,GEN_BUS),k) - sum(u_state(gen(:,GEN_BUS),[k-t: k-1]),2))
];
end
end
for i = 1: n_gen
if (init_state(gen(i,GEN_BUS)) == 0)
C = [C,
cost_up(i,1) >= start_cost(i,init_down(i))*(u_state(gen(i,GEN_BUS),1)-init_down(i)*init_state(gen(i,GEN_BUS)))
];
end
end
👨🎓博主课外兴趣:中西方哲学,送予读者:
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。在我这个专栏记录我有空时的一些哲学思考和科研笔记: