风与水如何联合优化?基于混合遗传算法的风-水联合优化运行程序代码!

前言

为提高风电场的供电质量同时增加其发电效益,利用储能技术为风电场配置一个蓄能系统是比较重要的解决措施之一。风电的蓄能技术有水力蓄能、压缩空气蓄能、超导磁力蓄能、流体电池组、电解水制氢等,其中水力蓄能是技术较成熟的一种蓄能方式,且小型的水力发电系统投资也不大,因此为采用风-水电联合供电模式不失为一种优选的方案。

风-水联合优化模型

假定风电场在没有配置水力蓄能系统时的初始功率输出和配置水力蓄能系统后的水电机组容量均是确定的。根据我国风电产业发展的国情,我们以增加风电场的效益以及平滑风电场功率输出为目的建立目标函数:目标函数描述的是一个效益最大化的模型,寻求的是在一定的风能资源前提下如何优化调度风电场中风力发电机组、水泵和水力发电机组在各个时段的出力值以便获取风电场的最大利润和平滑风电场输出。模型中暂不考虑一些固定成本,比如水力蓄能系统的固定投资成本以及可能涉及的一些其它固定投资成本。

基于局部弹性搜索的混合遗传算法

所谓的概率遍历搜索法即在变量的取值范围内按照一定的精度要求,将连续区间转化为离散区间,然后对于区间内的离散点在一定的保证概率(如0.99)下求得需要搜索的次数,然后按此搜索次数参与全局寻优,最后获得符合一定精度的最优解。

遗传算法操作的是一群编码化的可行解,称作种群。它通过种群的更新与迭代来搜索全局最优解。种群的迭代是通过选择、交叉和变异等具有生物意义的遗传算子来实现的。鉴于有关遗传算法的推文已经介绍的比较多,在此就不再赘述。不过特别需要指出的是,遗传算法在进行优化时,一般涉及的变量都是独立的,并且其取值范围都是已知的,而在本程序所涉及的风-水电联合优化运行问题中,3个变量却相互制约,每一个变量的取值都有可能影响另外两个变量的取值,而且变量的取值范围也是随时变化的,这就为遗传算法的实现带来了很大的难度。程序在处理这个问题时采取了一种概率遍历搜索的方法,取得了满意的效果。

程序提出的基于局部弹性收缩的混合遗传算法采取先用遗传算法进行全局寻优,找到初步最优解后,以此最优解为初值,再用弹性搜索法求得最终的全局最优解的方法。下面就对局部弹性搜索法做一简单的说明。

假设x∈[a,b],通过遗传算法求得x的初步最优解是x,适应度评价函数为f(x),则局部弹性搜索的步骤如下:

1)设置指向系数sign(控制搜索的方向)初始值为0:

2)求得x,与上下边界的距离的最小值,即d1=x1-a;d2=b-x1,D=min(d1,d2);

3)步长Δx=Dx(-1)sign(1-nb/N);N为局部弹性搜索的总次数,n为第n次搜索,b为弹性系数(控制搜索的精度);

4)x(n)=x1+Δx,并计算新的适应度函数值f(x(n)),如果f(x(nn))>f(x1)则sign=0,x1=x(n)则sign=1;

5)n=n+1,返回到第(2)步循环执行;

程序介绍

程序提出的基于遗传算法的风-水电联合优化运行就是采用水力蓄能的方式,为风电场配置一个水力发电系统,当可利用风能数值较大时,将一部分风能通过水泵以水能的形式储存于水库中,然后在可利用风能数值较小或上网电价较高时再经过水电发电机组将存储的能量输送到电网中去,以此实现风电场功率的优化输出,这样一方面平滑了风电场的输出波动,另一方面也充分利用了风能,增加了风电场的效益。程序中算例丰富,注释清晰,干货满满,创新性和可扩展性很高,足以撑起一篇高水平论文!下面对程序做简要介绍!

程序适用平台:Matlab+Yalmip+Cplex

程序结果

部分程序

VStepPp=rand(sizepop,NVAR)*(Vmax-Vmin)+Vmin;                                  %初始化速度
%确定风机功率P_w的取值范围-​
Pwmax=min(P_max,P_v)';       ​%[0,min(8,Pv)]
Pwmin=P_gmin*ones(1,NVAR);   ​%初始化速度
%-​确定水力发电功率P_h的取值范围
Phmax=P_hmax*ones(1,NVAR);    %[0,3]​
%% 优化
F=fun(P_w,P_h,P_p,sizepop,NVAR,C,C_p);   ​ %计算目标函数(适应度值)
E=zeros(sizepop,NVAR+1);
%-对不符合条件的解(粒子)加上惩罚因子​
%判断哪些解需要加入惩罚因子​
% 约束条件(2)            
​for nvar=1:NVAR
if P(j,nvar)>P_max​%flag=1时表示不满足约束条件
F(j)=F(j)-M;     %加上惩罚因子​%flag=1时表示不满足约束条件
F(j)=F(j)-M;   %加上惩罚因子​
% 约束条件(3)
 ​if P_p(j,nvar)+P_w(j,nvar)>P_gmaxF(j)=F(j)-M;
if P_p(j,nvar)+P_w(j,nvar)<P_gmin​
% 约束条件(4)
if P_h(j,nvar)>min(P_hmax,E(j,nvar)*eta_h/t)F(j)=F(j)-M;​
E(j,nvar+1)=E(j,nvar)+t*(eta_p*P_p(j,nvar)-P_h(j,nvar)/eta_h);         %下一时刻水库储能​
% 约束条件(6)        ​
% 约束条件(5)
​if P_p(j,nvar)>P_pmaxF(j)=F(j)-M;
if P_p(j,nvar)<P_pmin F(j)=F(j)-M;​
% 约束条件(7)
 if P_v(nvar)-P_w(j,nvar)-P_p(j,nvar)<0F(j)=F(j)-M;​
%附加约束条件(1)​
if P_h(j,nvar)*P_p(j,nvar)~=0F(j)=F(j)-M*(P_h(j,nvar)*P_p(j,nvar));​
% 个体极值和群体极值(初始情况)
[bestfitness,I]=max(F);   ​ %找出最大的惩罚函数:bestfitness为惩罚函数值;I为序号数
zbest=Vary(I,:);           ​%全局最佳
gbest=Vary;                ​%个体最佳
fitnessgbest=F;            ​%个体最佳适应度值
fitnesszbest=bestfitness;  %全局最佳适应度值

部分内容源自网络,侵权联系删除!

欢迎感兴趣的小伙伴关注并私信获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/601771.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

给网站网页PHP页面设置密码访问代码

将MkEncrypt.php文件上传至你网站根目录下或者同级目录下。 MkEncrypt.php里面添加代码&#xff0c;再将调用代码添加到你需要加密的页进行调用 MkEncrypt(‘123456’);括号里面123456修改成你需要设置的密码。 密码正确才能进去页面&#xff0c;进入后会存下cookies值&…

项目经理【过程】概念

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 【人】任务 【人】绩效 【过程】概念 一、过程是什么 1.1 项目管理五大过程组 1.2 五大过程组之间的相互作用 1.3 项目阶段VS过…

《Linux运维总结:ARM架构CPU基于docker-compose一离线部署consul v1.18.1集群工具》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

【SpringBoot】-- 监听容器事件、Bean的前后置事件

目录 一、ApplicationContextInitializer 使用 1、自定义类&#xff0c;实现ApplicationContextInitializer接口 2、在META-INF/spring.factories配置文件中配置自定义类 二、ApplicationListener 使用 1、自定义类&#xff0c;实现ApplicationListener接口 2、在META-…

tensorboard子目录运行

tensorboard默认在根目录运行&#xff0c;浏览器访问127.0.0.1:6006打开界面。 如果想在子目录运行&#xff0c;那么可以这么执行 tensorboard --logdir ./logs --path_prefix/app/asd 然后浏览器既可以通过 http://localhost:6006/app/asd/来访问。​​​​​​ 但这么做遇…

HADOOP之YARN详解

目录 一、YARN的简介 1.1 MapReduce 1.x 1.1.1 MapReduce 1.x的角色 1.2 YARN的介绍 1.3 YARN的设计思想 二 YARN的配置 1. mapred-site.xml 2. yarn-site.xml ​编辑 3. hadoop-env.sh 4. 分发到其他节点 5.YARN的服务启停 6. 任务测试 三 YARN的历史日志 1. 历…

JetBrains的多数据库管理和SQL工具DataGrip 2024.1版本在Windows/Linux系统的下载与安装配置

目录 前言一、DataGrip在Windows安装二、DataGrip在Linux安装三、Windows下使用配置四、Linux下使用配置总结 前言 ​ “ DataGrip是一款多数据库管理和SQL工具&#xff0c;适用于不同类型的数据库。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地管理数据库、…

【Linux网络编程】4.TCP协议、select多路IO转换

目录 TCP协议 TCP通讯时序 三次握手 四次挥手 滑动窗口 测试代码1 测试结果 Address already in use解决方法 批量杀进程 测试代码2 测试结果 测试代码4 测试结果 TCP状态转换 主动发起连接请求端 主动关闭连接请求端 被动接收连接请求端 被动关闭连接请求端…

浅谈自己用过最好用的AI工具概括

个人最经常用的AI工具的其实是Copilot&#xff0c;但是也有别的一些最好用的AI工具&#xff0c;包括&#xff1a; OpenAI GPT-3&#xff1a;这是一个自然语言生成模型&#xff0c;具有强大的语言理解和生成能力。它可以用于各种任务&#xff0c;如文字生成、自动回复和文本摘要…

1984. 学生分数的最小差值C++

给你一个 下标从 0 开始 的整数数组 nums &#xff0c;其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。 从数组中选出任意 k 名学生的分数&#xff0c;使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。 返回可能的 最小差值 。 示例 1&#xff1a; 输入&…

台灯的十大品牌有哪些?十大护眼灯品牌推荐

相信细心的家长已经发现&#xff0c;自家孩子随着步入更高的年级&#xff0c;每天晚上学习的时间也越来越晚了&#xff0c;而这个过程中必然少不了一盏好的台灯&#xff01; 市场上有不少网红代言的护眼灯&#xff0c;虽然它们销售量高&#xff0c;但其实缺乏专业技术和安全保障…

大数据Scala教程从入门到精通第三篇:Scala和Java的关系

一&#xff1a;Scala和Java的关系 1&#xff1a;详解 一般来说&#xff0c;学 Scala的人&#xff0c;都会 Java&#xff0c;而 Scala 是基于 Java 的&#xff0c;因此我们需要将 Scala和 Java 以及 JVM 之间的关系搞清楚&#xff0c;否则学习 Scala 你会蒙圈 Scala可以使用SDK…

【算法】基础算法004之前缀和

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 前言 本篇文章为大家带来前缀和…

推荐一个gpt全能网站

进入后&#xff0c;里面是这样的 点开后&#xff0c;里面是这样的 你以为只有这些吗&#xff1f; 往下翻一翻&#xff0c;你会发现新大陆&#xff01;&#xff01; 在输入框的下面&#xff0c;有一个分类栏&#xff0c;鼠标移上去&#xff0c;下面就会给出一堆网站 光是gp…

(超简单)SpringBoot中简单用工厂模式来实现

简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表&#xff0c;比如按角色查询用户列表、按机构查询用户列表&#xff0c;用户信息需要从数据库中查询&#xff0c;因为不同的类型查询的逻辑不相同&#xff0c;因此简单用工厂模式来设计一下&#xff1b; 首先新建一个…

为什么 ChatGPT 不火了?

不火了是有原因的&#xff0c;下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起&#xff1a; 很多朋友拿到 ChatGPT 后的第一个痛点就是&#xff1a;用的不好 你经常会感觉到 ChatGPT 回答的好空&#xff0c;没有太多参考价值。 而第二个痛点则是&#xff1a;无处去用…

数据结构复习/学习9--堆/堆实现/升降序建堆/top-k问题

一、堆与完全二叉树 1.堆的逻辑与物理结构 2.父节点与子节点的下标 3.大小根堆 二、堆的实现&#xff08;大根堆为例&#xff09; 注意事项总结&#xff1a; 注意堆中插入与删除数据的位置和方法与维持大根堆有序时的数据上下调整 三、堆排序 1.排升序建大堆效率高 注意事项…

Android 开机启动扫描SD卡apk流程源码分析

在开机的时候&#xff0c;装在SD卡的apk和装在系统盘的apk扫描过程不一样&#xff0c;系统盘apk在系统启动过程中扫描&#xff0c;而SD卡上的就不是&#xff0c;等系统启动好了才挂载、扫描&#xff0c;下面就说下SD扫描的流程&#xff1a; 在SystemServer启动MountService&am…

Golang | Leetcode Golang题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; func searchMatrix(matrix [][]int, target int) bool {m, n : len(matrix), len(matrix[0])i : sort.Search(m*n, func(i int) bool { return matrix[i/n][i%n] > target })return i < m*n && matrix[i/n][i%n] target }

【查找算法】之二分查找

一、算法介绍 二分查找&#xff0c;也称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。对于包含 n 个元素的有序数组&#xff0c;二分查找的步骤如下&#xff1a; 确定搜索范围&#xff1a;首先&#xff0c;将要查找的元素与数组中间的元素进行比较。如果…
最新文章