news 2026/2/18 5:08:56

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

作者头像

张小明

前端开发工程师

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/2/17 11:40:39

企业级DNS优化实战:如何选择最快的DNS服务器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个企业DNS优化案例展示页面,包含不同DNS服务器(如8.8.8.8、1.1.1.1等)的响应时间对比测试工具,支持批量测试和结果导出。使用…

作者头像 李华
网站建设 2026/2/17 6:46:23

用n8n快速验证产品创意:1小时搭建MVP工作流

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个产品创意验证工作流:1. 从社交媒体抓取用户反馈 2. 进行情感分析 3. 生成每日趋势报告 4. 自动发送到创始人邮箱。要求使用n8n的HTTP Request、Function和Emai…

作者头像 李华
网站建设 2026/2/17 11:40:05

如何用LangGraph中文文档加速AI应用开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 基于LangGraph中文文档,开发一个智能问答系统,能够理解中文问题并从文档中提取准确答案。系统需要包含以下功能:1. 中文自然语言理解模块 2. 文…

作者头像 李华
网站建设 2026/2/16 18:25:56

DVWA实战:从下载到漏洞利用全流程解析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个DVWA漏洞利用演示工具,包含以下功能:1. 自动检测DVWA安装状态;2. 提供常见漏洞(如SQL注入、XSS、CSRF)的自动化…

作者头像 李华
网站建设 2026/2/17 18:12:49

企业级解决方案:搭建.MD文档协作平台

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业级.MD文档协作平台,功能包括:1. 用户认证和权限管理 2. 实时协同编辑.MD文件 3. 版本历史记录和差异对比 4. 评论和批注功能 5. 支持导出多种格…

作者头像 李华
网站建设 2026/2/14 17:53:09

远程医疗突破:患者自拍即可骨骼分析,云端AI赋能基层

远程医疗突破:患者自拍即可骨骼分析,云端AI赋能基层 1. 什么是骨骼关键点分析技术? 想象一下,你对着手机摄像头随意拍张全身照,AI就能自动标出你的肩膀、手肘、膝盖等关键位置——这就是骨骼关键点分析技术。它就像给…

作者头像 李华