news 2026/6/15 11:46:30

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

作者头像

张小明

前端开发工程师

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/6/13 22:45:42

蓝丝带产后养护:以6步焕新,托举妈妈的第二次生命

当新生命的第一声啼哭响起,女人的身份便拥有了新的注解。在这场名为「母亲」的盛大仪式里,我们倾注所有爱意迎接宝宝的到来,却常常忽略那个最需要被照顾的人——自己。产后身体的微妙变化、情绪的暗流涌动、时间的碎片化管理,让许…

作者头像 李华
网站建设 2026/5/21 9:27:05

经济学本质的重构:从稀缺性资源配置到价值创造、分配与演化

经济学本质的重构:从稀缺性资源配置到价值创造、分配与演化一、引言自萨缪尔森在《经济学》中确立“经济学是研究稀缺性资源配置”的核心定义后(Samuelson, 1955),这一认知框架长期主导经济学学科发展。在此基础上,经济…

作者头像 李华
网站建设 2026/6/15 12:54:01

小白必看:谷歌账号注册图文详解

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式谷歌账号注册指导应用,包含:1)分步骤可视化引导界面 2)实时表单填写示范 3)常见错误动画演示 4)多语言支持 5)注册成功庆祝页面。要求使用Re…

作者头像 李华
网站建设 2026/6/15 12:56:07

WSL网络配置入门:理解LOCALHOST代理问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向WSL新手的交互式学习应用,内容包括:1. WSL网络基础知识图解;2. LOCALHOST代理问题的简单解释;3. 分步骤的配置教程&…

作者头像 李华
网站建设 2026/6/15 12:55:13

VMware新手必看:图解安装教程与第一个虚拟机创建

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向新手的VMware Player交互式学习应用,包含:1.分步骤安装动画演示 2.虚拟机创建向导 3.典型操作系统安装模板(Windows10/Ubuntu) 4.基础网络配置…

作者头像 李华
网站建设 2026/6/15 13:55:06

传统vsAI:SWEEZY CURSORS开发效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个对比展示工具,左侧显示传统手写代码实现SWEEZY CURSORS的过程,右侧展示使用AI工具自动生成的相同效果。功能包括:1) 代码量对比&#x…

作者头像 李华