电动汽车充放电的优化调度(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🎉3 文献来源
🌈4 Matlab代码、数据、文章讲解
💥1 概述
摘要:由于用电量的增加,车辆电气化将对电网产生重大影响。对电动汽车(EV)的充电和放电进行智能调度非常重要。然而,调度问题有两大挑战。首先,寻找能够最小化总成本的全局最优调度方案是一个挑战。其次,很难找到一个能够处理大量人口和电动汽车随机到达的分布式调度方案。本文提出了电动汽车充放电的全局最优调度方案和局部最优调度方案。我们首先提出了一个全局调度优化问题,其中对充电功率进行优化,以最小化白天进行充电和放电的所有电动汽车的总成本。全局最优解决方案提供了全局最小的总成本。然而,全局最优调度方案是不切实际的,因为它需要有关未来基本负载和到达时间的信息,以及将在一天的未来时间到达的电动汽车的充电周期。为了开发一个实用的调度方案,我们然后制定了一个局部调度优化问题,该问题旨在最小化本地组中当前正在进行的EV组中的EV的总成本。局部最优调度方案不仅可扩展到大型电动汽车群体,而且对动态电动汽车到达具有弹性。通过仿真,我们证明了与全局最优调度方案相比,局部最优调度方案可以获得接近的性能。
在全局最优调度方案中,由于我们假设我们具有关于一天内的电动汽车和基本负载的信息的全局知识,因此我们可以通过仅解决一次全局调度优化问题(5)来找到每个间隔的最优充电功率。在局部最优调度方案中,我们不知道未来负载和未来EV的信息。我们提出了一种局部最优调度方案,通过使用滑动窗口机制来找到本地电动汽车在下一个间隔内的最优充电功率
在局部最优调度方案中,我们基于组进行调度优化。一组EV包括位于一个位置或多个附近位置的EV。例如,在停车场进行充电和放电的电动汽车可以被分类为一组,而住宅车库中的电动汽车可被分类为另一组。每个组都有一个本地控制器(LC)。局部最优调度方案中的通信和控制如图2所示。本地控制器与位于公用事业公司的中央控制器和本地站点的充电站建立通信连接。本地控制器从中央控制器接收当天的预测负荷。本地控制器与每个充电站实时通信以收集EV信息,基于该信息执行调度优化,然后指示每个本地EV以最佳充电功率对电池进行充电或放电。

安装CVX包:
先点击这里:风电随机性动态经济调度模型
然后:也是代码前的准备
本文是一种最优调度算法,以最大限度地降低电动汽车充放电的总成本。
📚2 运行结果





| 模拟大规模电动车充电行为(Matlab实现) |
| 电动汽车对系统运行的影响(Matlab实现) |
| 基于蒙特卡洛法的规模化电动汽车充电负荷预测(Python&Matlab实现) |
| 基于电动汽车的带时间窗的路径优化(Python&Matlab代码实现) |
| (Matlab实现)基于蒙特卡诺和拉格朗日乘子法的电动车调度【有序、无序充放电】 |
部分代码:
%===简单乘法计算=====
% k_con=alfa/(omega^theta*(theta+1));
%=====充电间隔时间======
tau=1; % 小时内
%=====充电间隔数========
num_slot=length(L_b_mic);
%====(2)基本价格=======
price_basic=zeros(num_slot,1); % 基于基本负荷的价格
for i=1:num_slot
price_basic(i)=k_0+k_1* L_b_mic(i);
end
fprintf('价格,最低价格=%g,最高价格=%g.\n',min(price_basic), max(price_basic));
%% 电动汽车EV容量
Cap_battery_org=16; % KWh
gamma=0.9; % 充电完成时电池的百分比
Cap_battery=gamma*Cap_battery_org;
%% ==最大充电率===
P_max=5; % KW
%% 电动汽车数量
num_EV=200;
% 仅给电池充电的电动汽车的百分比
P_Chg=0;
% CHG EVs数量
num_CHG_EV=round(P_Chg*num_EV); % CHG EV 将位于 EV 信息矩阵的前面部分。
% V2G EVs数量
num_V2G_EV=num_EV-num_CHG_EV;
%% 电动汽车充电模式
% 30% 的电动汽车在间隔 1 之前连接到充电站,其余的均匀分布
%EV矩阵:1) 到达时间,2) 出发时间,3) 初始能量,4) 充电周期,5) 最小充电时间%
% EV_info=zeros(num_EV,3);
%===间隔1前接入站的EVS百分比====
% Per_EV=0.1;
%=====其他车辆到达时间均匀分布在[ 1,20 ]之间======
% for i=1:num_EV
% temp_00=rand;
% if temp_00<=Per_EV
% T_arrival(i,1)=1;
% else
% T_arrival(i,1)=round(1 + (20-1).*rand);
% end
% end
%
%=====充电时间均匀分布在 [4, 12] 小时之间======
% T_charging= round(4 + (12-4).*rand(num_EV,1));
% T_charging=-1*sort(-1*T_charging);
%
% % the departure time
% for i=1:num_EV
% T_departure(i,1)=min(24, T_arrival(i,1)+T_charging(i,1));
% end
%====初始电量均匀分布在电池容量的[0 0.8]之间======
% Ini_percentage=0+ (0.8-0).*rand(num_EV,1);
% % fill the EV_info
% EV_info(:,1)=T_arrival;
% EV_info(:,2)=T_departure;
% EV_info(:,3)=Cap_battery_org*Ini_percentage;
%
% for i=1:num_EV
% EV_info(i,4)=EV_info(i,2)-EV_info(i,1)+1; % 充电周期
% EV_info(i,5)=EV_info(i,3)/P_max; % 最小充电时间
% if EV_info(i,4) < EV_info(i,5)
% fprintf('EV %g 充电时间不合理.\n',i);
% end
% end
%
% % save and load EV_info
% save EV_info.txt EV_info -ascii;
load EV_info.txt;
EV_info=EV_info(1:num_EV,:);
%% 电动汽车与充电间隔的关系
F=zeros(num_EV, num_slot);
G=ones(num_EV, num_slot);
for i=1:num_EV
for j=EV_info(i,1):EV_info(i,2)
F(i,j)=1;
G(i,j)=0;
end
end
F1=reshape(F',1,[]);
% F=ones(num_EV, num_slot);
%% 绘制基本负荷
xx_1=1:num_slot;
figure;
yy_1(:,1)=L_b_mic;
yy_1(:,2)=P_L_b_mic;
plot(xx_1,yy_1);
ylabel('负荷[KW]');
xlabel('小时数');
legend('实际负荷量','预测负荷量');
%% 使用CVX工具的V2G全局最优方案
%(1)等式约束: Ax=b
% (2)优化变量x=[z1, z2, ..., z_24, x11, x12, ...., x_100,24]'
num_OptVar=1*num_slot+num_slot*num_EV;
b_a=L_b_mic; %第一个等式约束的矩阵
A1_a=zeros(num_slot, num_OptVar-1*num_slot);
A1=[eye(num_slot) A1_a];
A2_a=zeros(num_slot, num_OptVar-1*num_slot);
s_temp=0;
for i=1:num_slot
for j=1:num_EV
A2_a(i, (j-1)*num_slot+i)=F(j,i);
% fprintf('Assign F(%g,%g)=%g, to A2_a(%g, %g).\n',j,i,F(j,i),i,(j-1)*num_slot+1);
s_temp=s_temp+F(j,i);
end
end
A2_b=zeros(num_slot, num_slot);
A2=[A2_b A2_a];
A_a=A1-A2; % 第一个等式约束的矩阵
clear A1 A2 A1_a A2_a A2_b;
%======第一个等式约束的矩阵=====
B_1=zeros(num_EV, num_OptVar-1*num_slot);
for i=1:num_EV
B_1(i,(i-1)*num_slot+1:(i-1)*num_slot+num_slot)=F(i,:);
end
temp_1=zeros(num_EV, num_slot);
B1=[temp_1 B_1]; % 第二等式约束的矩阵
b_b=(Cap_battery/tau)*ones(num_EV,1)-EV_info(:,3);% 第二等式约束的矩阵
clear B_1 temp_1;
%合并等式矩阵
% Eq_left=[A_a' B1']';
% Eq_right=[b_a' b_b']';
%% ======等式约束=====
Eq_L=A_a;
Eq_R=b_a;
clear A_a b_a;
%% ======不等式约束=====
% ====1)第一个不等式约束=====
In_1=zeros(num_EV*num_slot, num_OptVar);
for i=1:num_slot
for j=1:num_EV
In_1((i-1)*num_EV+j,num_slot+(j-1)*num_slot+1:num_slot+(j-1)*num_slot+i)=F(j,1:i);
% fprintf('set row %g, col %g:%g by using F(%g,1:%g).\n',(i-1)*num_EV+j,num_slot+(j-1)*num_slot+1,num_slot+(j-1)*num_slot+i,j,i);
end
end
In_1=-1*In_1; % 第一个不等式,左边
In_b1=zeros(num_EV*num_slot, 1); % 第一个不等式,右边, [EV1_slot1, EV2_slot1, ..., EV1_slot2, EV2_slot2,...]'
for i=1:num_slot
In_b1( (i-1)*num_EV+1:(i-1)*num_EV+num_EV, 1 )= (1/tau)*EV_info(1:num_EV,3);
end
%=====2)第二个不等式约束=====
In_2=-1*In_1; %第二个不等式约束,左边
In_b2=zeros(num_EV*num_slot, 1); % 第二个不等式约束,右边, [EV1_slot1, EV2_slot1, ..., EV1_slot2, EV2_slot2,...]'
temp_b2=Cap_battery_org - EV_info(1:num_EV,3);
for i=1:num_slot
In_b2( (i-1)*num_EV+1:(i-1)*num_EV+num_EV, 1 )= (1/tau)*temp_b2;
🎉3 文献来源
部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码、数据、文章讲解
相关文章:
电动汽车充放电的优化调度(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
《JeecgBoot系列》 如何设计表单实现“下拉组件二级联动“ ? 以省市二级联动为例
《JeecgBoot系列》 如何设计表单实现"下拉组件二级联动" ? 以省市二级联动为例 一、准备字典表 1.1 创建字典表 CREATE TABLE sys_link_table ( id int NULL, pid int NULL, name varchar(64) null );1.2 准备数据 idpidname1全国21浙江省32杭州市42宁波市51江苏…...
数学小课堂:数学的线索(从猜想到定理再到应用的整个过程)
文章目录 引言I 勾股定理1.1 勾三股四弦五1.2 数学和自然科学的三个本质差别1.3 总结引言 从猜想到定理再到应用的整个过程是数学发展和体系构建常常经历的步骤。 I 勾股定理 勾股定理: 直角三角形两条直角边的平方之和等于斜边的平方,这个定理在国外都被称为毕达哥拉斯定理…...
Collecting package metadata (current_repodata.json): failed
一、问题描述 安装anaconda之后,想创建环境,用了下面这段代码: conda create -n pytorch python3.7 conda创建环境报错了,报了如下这一堆: Collecting package metadata (current_repodata.json): failedUnavailab…...
几十亿工单表,查询优化案例
前言: 之前在某大型保险公司担任技术经理,负责优化话务系统模块,由于系统已经运行10年之久,尤其在话务系统中,沉积了几十亿的话务信息表,业务人员反馈,话务系统历史数据查询部分已经完全查询不动࿰…...
LabVIEW应用程序(EXE)无法正确动态调用插件
LabVIEW应用程序(EXE)无法正确动态调用插件正在构建一个应用程序并使用插件架构,以便可以动态调用将来创建的VI(插件)。应用程序在LabVIEW开发环境中可以正常运行,但不能作为可执行程序运行。运行可执行文件…...
到了35岁,软件测试职业发展之困惑如何解?
35岁,从工作时间看,工作超过10年,过了7年之痒,多数IT人都已经跳槽几次。 35岁,发展比较好的软件测试人,已经在管理岗位(测试经理甚至测试总监)或已经成为测试专家或测试架构师。发展…...
Google Guice 3:Bindings(1)
1. 序言 上一篇博客,《Google Guice 2:Mental Model》,讲述了Guice的建模思路:Guice is a map Guice官网认为:binding是一个对象,它对应Guice map中的一个entry,通过创建binding就可以向Guice …...
学习国家颁布的三部信息安全领域法律,理解当前工作中的信息安全合规要求
目录三部信息安全领域的法律文件三部法律的角色定位与联系三部法律的适用范围三部法律的主要履职部门三部法律条文章节结构中的共性三部法律中的一些次重点章节网络安全法的重点章节数据安全法的重点章节个人信息保护法的重点章节关于工业和信息化部行政执法项目清单三部信息安…...
LeetCode_Python_二分查找算法
二分查找算法要求二分查找过程如何更新左右边界实例type1:常规记录中间元素type2:取跳出循环后的左或右边界算法要求 顺序存储结构元素大小有序 二分查找过程 将元素排序;将中间位置记录的这个元素与目标元素比较; 2.1 如果相同&a…...
功能测试三年,是时候做出改变了
前言 测试行业3年多经验,学历大专自考本科,主要测试方向web,PC端,wap站,小程序公众号都测试过,app也测过一些,C端B端都有,除功能外,接口性能也有涉猎,但是不…...
图扑孪生工厂流水线组态图可视化
前言 2018 年,世界经济论坛(WEF)携手麦肯锡公司共同倡议并正式启动了全球“灯塔工厂网络项目”(Lighthouse Network),共同遴选率先应用工业革命 4.0 技术实现企业盈利和持续发展的创新者与示范者。这就使得工厂系统需要对各流水线及生产运行成本方面进行…...
车机开发—【CarService启动流程】
汽车架构:车载HAL是汽车与车辆网络服务之间的接口定义(同时保护传入的数据): 车载HAL与Android Automotive架构: Car App:包括OEM和第三方开发的AppCar API:内有包含CarSensorManager在内的AP…...
webpack中require.context的运用
1. 作用: 利用require创建context (上下文),来告知在编译时具体需要导入哪些模块(即:批量处理待导入模块进行导入); webpack会在构建的时候解析代码中的require.context() (实际上是webpack的方法,vue一般基于webpack…...
2023“Java基础-中级-高级”面试集结,已奉上我的膝盖
Java基础(对象线程字符接口变量异常方法) 面向对象和面向过程的区别? Java 语言有哪些特点? 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C的区别? 什么是 Java 程序的主类&…...
RabbitMQ之发布确认
发布确认 1 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消…...
一文读懂函数编程及其工作原理
微软MVP实验室研究员 马洪喜-微软 MVP 19年研发经验 云计算咨询顾问专家 容器云及基础架构云技术专家 DevOps 及微服务咨询专家 什么是函数编程 我先用通俗的大白话给大家解释一下函数(Functions, Function as a Service, FaaS)的几个要点,这样看后面示例时才不…...
WSO2 apim Subscribe to an API
WSO2 apim Application Subscribe to an API1. Published an Api2. Subscribe to an API using Key Generation Wizard3. Subscribe to an existing application4. AwakeningWSO2安装使用的全过程详解: https://blog.csdn.net/weixin_43916074/article/details/127987099. Offi…...
聚类(性能度量)
文章目录聚类(性能度量)外部指标例1内部指标例2聚类(性能度量) 对数据集 D{x1,x2,...,xm}D\{x_1,x_2,...,x_m\}D{x1,x2,...,xm} ,假定通过聚类给出的簇划分为 C{C1,C2,...,Ck}C\{C_1,C_2,...,C_k\}C{C1,C2,…...
GPT-4——比GPT-3强100倍
GPT-4——比GPT-3强100倍 当前世界上最强大的人工智能系统当属ChatGPT。推出2个月用户数就突破1亿。ChatGPT是当下最炙手可热的话题,科技圈几乎人人都在讨论。这边ChatGPT的热度还在不断攀升,另一边来自《纽约时报》的最新报道称ChatGPT即将被自家超越&…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...





