news 2026/6/10 11:54:13

基于双层优化的综合能源系统规划设计:微网多电源容量优化配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于双层优化的综合能源系统规划设计:微网多电源容量优化配置

基于双层优化的综合能源系统规划设计 采用kkt条件,大M法,对偶理论求解 代码注释齐全,cplex求解 良心代码,适合新手学习。 主要内容:微网的多电源容量优化配置,规划出最佳的微电网光伏、风电、储能等多电源的容量配置方案,此外,代码采用双层模型,上层以周期内运维成本以及投资成本之和最低为目标函数,下层则以调度周期内购售电成本以及燃料成本最低为目标函数,上层得出最佳容量配置方案,下层得出最佳运行策略。

在综合能源系统规划设计里,微网的多电源容量优化配置是个关键问题。今天咱就来讲讲基于双层优化的方法,还会带大家看用cplex求解的代码,新手友好哦!

一、整体思路

采用双层模型,上层目标是让周期内运维成本和投资成本之和最低,下层则追求调度周期内购售电成本以及燃料成本最低。上层确定最佳容量配置方案,下层得出最佳运行策略。

二、求解方法

这里用到了KKT条件、大M法和对偶理论。KKT条件能帮我们找到满足最优解的必要条件;大M法是处理约束条件转换的好帮手;对偶理论则从另一个角度辅助我们求解复杂的优化问题。

三、代码实现(Python + cplex)

import cplex # 定义常量 num_periods = 24 # 调度周期时长,假设为24小时 num_sources = 3 # 电源种类数,光伏、风电、储能 # 成本参数 investment_cost = [1000, 1500, 2000] # 光伏、风电、储能每单位容量投资成本 operation_cost = [10, 15, 20] # 光伏、风电、储能每单位容量运维成本 purchase_price = 0.5 # 购电价格 sale_price = 0.3 # 售电价格 fuel_cost = 0.4 # 燃料成本 # 创建cplex模型 model = cplex.Cplex() # 上层变量:电源容量配置 upper_vars = [] for i in range(num_sources): var_name = "capacity_{}".format(i) model.variables.add(names=[var_name], lb=[0.0], types=[model.variables.type.continuous]) upper_vars.append(var_name) # 下层变量:各时段的发电量、购电量、售电量等 lower_vars = [] for t in range(num_periods): for i in range(num_sources): gen_name = "generation_{}_{}".format(i, t) model.variables.add(names=[gen_name], lb=[0.0], types=[model.variables.type.continuous]) lower_vars.append(gen_name) purchase_name = "purchase_{}".format(t) model.variables.add(names=[purchase_name], lb=[0.0], types=[model.variables.type.continuous]) lower_vars.append(purchase_name) sale_name = "sale_{}".format(t) model.variables.add(names=[sale_name], lb=[0.0], types=[model.variables.type.continuous]) lower_vars.append(sale_name) # 上层目标函数:运维成本与投资成本之和最低 upper_obj = [] for i in range(num_sources): upper_obj.append((upper_vars[i], investment_cost[i] + operation_cost[i])) model.objective.set_linear(upper_obj) model.objective.set_sense(model.objective.sense.minimize) # 下层目标函数:购售电成本与燃料成本最低 lower_obj = [] for t in range(num_periods): for i in range(num_sources): gen_name = "generation_{}_{}".format(i, t) lower_obj.append((gen_name, fuel_cost)) purchase_name = "purchase_{}".format(t) lower_obj.append((purchase_name, purchase_price)) sale_name = "sale_{}".format(t) lower_obj.append((sale_name, -sale_price)) model.objective.set_linear(lower_obj) # 约束条件(这里简单示例功率平衡约束) for t in range(num_periods): constraint_expr = [] for i in range(num_sources): gen_name = "generation_{}_{}".format(i, t) constraint_expr.append((gen_name, 1)) purchase_name = "purchase_{}".format(t) constraint_expr.append((purchase_name, 1)) sale_name = "sale_{}".format(t) constraint_expr.append((sale_name, -1)) model.linear_constraints.add(lin_expr=[cplex.SparsePair(ind=[var for var, _ in constraint_expr], val=[val for _, val in constraint_expr])], senses=["E"], rhs=[0]) # 求解模型 model.solve() # 输出结果 print("上层最佳容量配置方案:") for i, var in enumerate(upper_vars): print("电源 {} 的容量: {}".format(i, model.solution.get_values(var))) print("下层最佳运行策略:") for t in range(num_periods): print("时段 {}:".format(t)) for i in range(num_sources): gen_name = "generation_{}_{}".format(i, t) print("电源 {} 的发电量: {}".format(i, model.solution.get_values(gen_name))) purchase_name = "purchase_{}".format(t) print("购电量: {}".format(model.solution.get_values(purchase_name))) sale_name = "sale_{}".format(t) print("售电量: {}".format(model.solution.get_values(sale_name)))

代码分析

  1. 参数定义:先设定了调度周期时长、电源种类数,以及各种成本参数,这些都是模型计算的基础数据。
  2. 变量创建:分上层和下层分别创建变量。上层变量是各电源的容量配置,下层变量包括各时段各电源发电量、购电量和售电量。
  3. 目标函数设定:上层目标是让投资和运维成本之和最小,下层是让购售电和燃料成本最小。通过向cplex模型添加线性表达式来设定目标函数。
  4. 约束条件:这里简单写了个功率平衡约束,就是在每个时段,发电量加上购电量要等于售电量,以此维持电力系统的平衡。实际应用中可能还有更多复杂约束。
  5. 求解与结果输出:调用cplex的求解方法,然后把上层的最佳容量配置方案和下层的最佳运行策略打印出来,方便查看结果。

这样基于双层优化的微网多电源容量优化配置就实现啦,希望新手小伙伴能从中学到东西,一起探索综合能源系统规划设计的更多奥秘!

基于双层优化的综合能源系统规划设计 采用kkt条件,大M法,对偶理论求解 代码注释齐全,cplex求解 良心代码,适合新手学习。 主要内容:微网的多电源容量优化配置,规划出最佳的微电网光伏、风电、储能等多电源的容量配置方案,此外,代码采用双层模型,上层以周期内运维成本以及投资成本之和最低为目标函数,下层则以调度周期内购售电成本以及燃料成本最低为目标函数,上层得出最佳容量配置方案,下层得出最佳运行策略。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 13:37:04

30分钟搭建VS2015密钥验证API原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个VS2015密钥验证API原型,功能包括:1. RESTful API接口;2. 密钥格式验证;3. 模拟微软验证服务;4. 返回验证结果。…

作者头像 李华
网站建设 2026/6/10 11:39:10

QWEN3如何革新AI辅助编程体验?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 使用QWEN3模型开发一个智能代码生成器,能够根据自然语言描述自动生成Python代码。要求支持以下功能:1. 根据用户输入的功能描述生成可运行的代码片段&#…

作者头像 李华
网站建设 2026/5/30 14:48:10

系统管理员必备:BLUESCREENVIEW实战排查案例集

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个包含多个蓝屏故障案例分析的交互式教程。每个案例应包括:1. 错误截图 2. BLUESCREENVIEW分析过程 3. 问题定位 4. 解决方案 5. 预防措施。要求使用Markdown格式…

作者头像 李华
网站建设 2026/6/10 11:16:07

用AI背单词神器:不背单词网页版智能学习法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个AI辅助背单词的网页应用,包含以下功能:1. 基于用户记忆曲线智能安排复习时间;2. 语音识别功能,可以跟读并评分;…

作者头像 李华
网站建设 2026/5/26 14:59:59

传统vs深度学习:2D骨骼检测方案对比,云端快速验证

传统vs深度学习:2D骨骼检测方案对比,云端快速验证 引言:为什么需要骨骼关键点检测? 想象一下,当你观看一段舞蹈视频时,大脑能自动识别出舞者的手肘、膝盖等关节位置,并据此理解动作含义。骨骼…

作者头像 李华
网站建设 2026/6/9 19:38:04

AI+虚仿 智慧教育引领淡水渔业智慧养殖专业新双高建设

随着新一轮科技革命与产业变革的深入发展,智慧教育、人工智能(AI)、虚拟仿真(虚仿)等技术正深刻重塑职业教育生态。《关于推动现代职业教育高质量发展的意见》《关于深化现代职业教育体系建设改革的意见》等政策明确要…

作者头像 李华