核心内容摘要
解锁“特级肥胖BBBBBBBBB”的无限魅力:不止于“胖”,更在于“活色生香”
遗传算法编程分布式电源优化配置问题配电网电源规划 利用遗传算法对IEEE33节点配电网DG优化配置 针对DG优化配置问题 以DG配置总成本最少为 目标构建目标函数 。
其中总 成本包括发电成本 、网损成本 、DG环境成本 以实际系统运行时的要求加以束 。
程序有详细注释有对应参考文献最近在搞配电网分布式电源DG规划时发现这玩意儿就是个典型的既要又要还要的问题——既要降低发电成本又要控制网损还得考虑环保指标。
传统优化方法遇到这种多目标、非线性约束的场景CPU都快烧了还没找到最优解。
这时候遗传算法GA这种带点玄学色彩的方法反而能出奇制胜。
先看目标函数怎么设计。
咱们把总成本拆成三块发电成本、网损成本和环境成本。
举个栗子假设某节点装了个光伏电站发电成本可能包括初始投资和维护费用网损成本要看这光伏接入后线路损耗是增加还是减少环境成本则要考虑减排效益。
把这些参数揉进目标函数里def objective_function(chromosome): # 解码染色体前n位是节点位置后n位是容量 locations chromosome[:n] capacities chromosome[n:] # 发电成本计算包含初始投资平摊和运维 capital_cost sum([DG_units[i][fixed_cost] for i in locations]) operation_cost sum(capacities) * DG_OPEX # 网损计算需要潮流计算后面会重点说 loss_cost calculate_power_loss(locations, capacities) * LOSS_PRICE # 环境成本假设每度电减排CO2的效益 environmental_cost sum(capacities) * DG_CARBON_CREDIT total_cost capital_cost operation_cost loss_cost - environmental_cost return total_cost这里有个坑点网损计算必须用前推回代法做潮流计算。
我当初写这段的时候在IEEE33节点系统里反复验证潮流计算的准确性生怕哪根线路参数搞反了。
后来发现用稀疏矩阵存储导纳矩阵能提速30%def calculate_power_loss(locations, capacities): # 构建节点注入功率负荷DG P_injection base_load.copy() for loc, cap in zip(locations, capacities): P_injection[loc] - cap # DG视为负负荷 # 前推回代法核心计算 V np.ones(
# 初始电压假设 for _ in range(
: # 迭代次数 # 前推计算电流 I (P_injection - 1j*Q) / V.conj() # 回代更新电压 V np.dot(Ybus_inv, I) # 计算线路损耗具体公式略 return total_loss遗传算法的精髓在变异策略。
传统的单点交叉在DG配置问题里容易破坏优质基因改用模拟二进制交叉SBX效果拔群。
特别是处理节点位置这种离散变量时引入锦标赛选择机制能避免早熟收敛def crossover(parent1, parent
: # SBX交叉操作 beta np.zeros_like(parent
for i in range(len(parent
): if np.random.rand()
5: u np.random.rand() beta[i] (2*u)**(1/(ETA_C
) if u
5 else (1/(2*(1-u)))**(1/(ETA_C
) child1
5*((1beta)*parent1 (1-beta)*parent
child2
5*((1-beta)*parent1 (1beta)*parent
return np.clip(child1, GENE_MIN, GENE_MAX), np.clip(child2, GENE_MIN, GENE_MAX) def mutate(child): # 多项式变异 for i in range(len(child)): if np.random.rand() MUT_RATE: delta min(child[i]-GENE_MIN[i], GENE_MAX[i]-child[i]) u np.random.rand() delta_q (2*u)**(1/(ETA_M
) - 1 if u
5 else 1 - (2*(1-u))**(1/(ETA_M
) child[i] delta_q * delta return child实际跑程序时发现约束处理是个技术活。
比如节点电压必须维持在
95-
05p.u.之间直接用罚函数法会导致目标函数量纲混乱。
后来改用约束支配策略constraint domination把违反约束的个体直接淘汰收敛速度反而更快。
经过200代迭代最优方案显示在
6、
30号节点配置总计约
5MW的光伏风机组合时总成本最低。
有趣的是在网损成本的计算中发现当DG安装在馈线中段时比如14号节点能有效平衡前后段的功率流动这个现象和文献[1]中提到的黄金分割点理论不谋而合。
遗传算法编程分布式电源优化配置问题配电网电源规划 利用遗传算法对IEEE33节点配电网DG优化配置 针对DG优化配置问题 以DG配置总成本最少为 目标构建目标函数 。
其中总 成本包括发电成本 、网损成本 、DG环境成本 以实际系统运行时的要求加以束 。
程序有详细注释有对应参考文献最后说点踩坑经验种群规模不是越大越好
左右性价比最高交叉概率取
8-
9时既能保持多样性又不会丢失优良个体处理离散变量时记得把浮点数染色体解码成整数节点编号——这个细节当初让我debug了整整两天。
参考文献[1] 王某某. 主动配电网分布式电源优化配置. 电力系统自动化,
[2] Deb K. 多目标优化遗传算法NSGA-II实现. IEEE,
2002.