“车-路-网”电动汽车充电负荷时空分布预测(matlab)

目录

1 主要内容

2 部分代码

3 程序结果

4 下载链接


主要内容

该程序参考《基于动态交通信息的电动汽车充电负荷时空分布预测》和《基于动态交通信息的电动汽车充电需求预测模型及其对配网的影响分析》文献模型,考虑私家车、出租车和共用车三类交通工具特性和移动负荷特性,实现了基于动态交通信息的电动汽车充电负荷时空分布预测。将负荷预测情况和33节点配电网络进行结合,形成交通网-配电网交互模型,采用牛拉法进行潮流计算。程序采用matlab编写,注释清晰,方便学习!

  • 交通网-配电网交互模型
路网模型参考下图:

很多文献都会用到路网结合模型,这也是电动车研究领域的一个热点方向,通过路网模型更能精确定位电能需求点以及对配电网络的影响。

  • 动态交通路网模型

动态交通网络模型采用图论法进行建模,拓扑结构示意图如下:

具体的数学模型表达式为:

式中:为交通路网;表示图 所有节点的集合;表示图 所有路段的集合;为路段权值的集合,即道路路阻;表示划分的时间段集合,即将全天划分为 m个时间段。

交通网络生成代码如下:

%%动态交通路网模型:采用图论分析方法建模
%G为交通路网(图);V表示图G所有节点的集合,本文设置32个配电网节点;E表示所有路段的集合;W为路段权重的集合,即道路路阻;K表示划分的时间段集合,即将全天划分为m个时间段。
%路段权值W表示道路出行代价,可采用路段长度、通行速度、行程时间等权值进行量化研究
%在城市路网中,路口交叉节点多设置信号灯进行管控,车辆行驶既受到路段阻抗影响,又在交叉节点产生时间延误。
%因此,城市道路路阻可表示为W(t)=CV(t)+RV(t);CV(t)表示节点阻抗模型,RV(t)表示路段阻抗模型
%依据城市交通状况划分标准,饱和度 S 评价指标:畅通(0<S≤0.6)、缓行(0.6<S≤0.8)、拥挤(0.8<S≤1.0)以及严重拥堵(1.0<S≤2.0)。
%道路交叉口和路段通行能力不同,可以得到不同饱和度对应的路段阻抗和节点阻抗模型
%RV(t)路段阻抗模型,通过饱和度S=Q/C,(Q为路段交通流量,C为通行能力,这里是随机生成S所以不用管Q与C的问题);t0为零流量行程时间;alpha beta为阻抗影响因子,来计算。
%CV(t)节点阻抗模型,通过信号周期c,绿信比lamda,路段车辆到达率q,来计算
%针对RV(t)路段阻抗和CV(t)节点阻抗模型中,饱和度S是唯一变量,其余为道路规划固定参数,因此,将RV(t)和CV(t)合并可得到道路路阻阻抗模型W(t)=CV(t)+RV(t)。
​
%% alpha beta 阻抗影响因子 t0-零流量行程时间,计算RV(t)路段阻抗模型
alpha=1.3;
beta=1.2;
t0=10;
​
%% 信号周期c,绿信比lamda,路段车辆到达率q,计算CV(t)节点阻抗模型
c=30;
lamda=0.7;
q=0.8;
​
%% 2【路网结构】 邻接矩阵(此时建立的仅是结构,而为给每条边赋以路段权值W)
LJ=zeros(32,32);
L=[1 2;2 3;3 9;1 4;2 6;3 7;4 5;5 6;6 7;7 8;8 9;4 10;5 11;6 12;7 13;10 11;11 12;12 13;13 14;8 21;9 26;10 15;11 16;12 17;12 18;14 20;15 16;16 17;17 18;18 19;19 20;20 21;15 32;16  27;17 22;18 23;19 24;20 24;21 25;32 27;27 22;22 23;23 24;24 25;25 26;23 28;24 29;25 30;26 31;27 28;28 29;29 30;30 31];
% 矩阵序号法写邻接矩阵
LJ(L(:,2)*32-32+L(:,1))=1; 
LJ(L(:,1)*32-32+L(:,2))=1;
%
figure(1)
G=graph(LJ,'upper');%根据带权邻接矩阵生成无向图
% plot(G);
% title('无向图')
plot(G,'EdgeLabel',G.Edges.Weight)
title('标定权重的无向图')
​
%% 3【阻抗模型权重W】(为给每条边赋以路段权值W)
% 1) 随机生成S权重   
% 2) 或者 输入shortestpath函数求路径(这一项操作没有便要做,不知道作用是为何)
S=zeros(32,32);
S=2*rand(32,32);
for i=1:32for j=1:32if LJ(i,j)==1if S(i,j)<=1 Rv(i,j)=t0*(1+alpha*S(i,j)^beta);elseRv(i,j)=t0*(1+alpha*(2-S(i,j))^beta);endif S(i,j)<=0.6 Cv(i,j)=0.9*(c*(1-lamda)^2/2/(1-lamda*S(i,j))+S(i,j)^2/2/q/(1-S(i,j)));elseCv(i,j)=c*(1-lamda)^2/2/(2-lamda*S(i,j))+1.5*(S(i,j)-0.6)*S(i,j)/(2-S(i,j));endW(i,j)=Rv(i,j)+Cv(i,j);elseW(i,j)=0*1e3;endend
end
W(find(W>50))=50;
figure(2)
bar3(W)
%
G=graph(W,'upper');
% plot(G);
% title('无向图')
plot(G,'EdgeLabel',G.Edges.Weight)
title('标定权重的无向图')
​
%[path,distance]=shortestpath(G,1,6)      %这行代码在这块没用,是多余的
%% 4【路程模型权重L】(作为计算耗电量中的一个参数)
RL=10+10*rand(32,32);
RL=RL.*LJ;

部分代码

load dataTRN.mat;
load dataEV.mat;
load dataWq.mat;
G=graph(W,'upper');                %生成路-网耦合图G,W是每条边的权重值,W为32*32阶矩阵
Charge=zeros(size(Mcar,1),5);      %生成一个size(Mcar,1)=1000*5的零矩阵,其中size(Mcar,1)=1000。
​
TP_carnumber=zeros(size(W,1),3);   %生成一个size(W,1)=32*3的零矩阵,W是每条边的权重值,W为32*32阶矩阵,TP_carnumber(x,1)、TP_carnumber(x,2)、TP_carnumber(x,3)应该是每条边上/每个交通节点私家车1,公交车2,私家车3的数量
Pcharge=zeros(24,3);               %生成一个24*3的零矩阵,******PCharge代表24小时内私家车1,公交车2,私家车3
Pchar_slow=12;                     %设置慢充充电功率为12KW
Pchar_fast=48;                     %设置慢充充电功率为48KW
Pntcharge=zeros(24,32);            %生成一个24*32的零矩阵,PntCharge代表24个小时内32个配网节点的供电负荷=电动汽车耗电量
%% MC
for icar=1:size(Mcar,1)             %EV的编号,从1-1000,共1000台EV,size(Mcar,1)=1000,一个for icar=1:size(Mcar,1) 循环代表把第一台EV的%1-9个特征变量(车辆编号icar、EV种类Icar_kind、EV初始位置Birthland、%目的地Destination、初始时刻tBirth1、返程时刻tBirth2、ev容量Cbat、初始soc SOC0、速度Vcar)全部采集一遍%1000个for icar=1:size(Mcar,1) 循环代表把1000台EV的%1-9个特征变量(车辆编号icar、EV种类Icar_kind、EV初始位置Birthland、%目的地Destination、初始时刻tBirth1、返程时刻tBirth2、ev容量Cbat、初始soc SOC0、速度Vcar)全部采集一遍icarIcar_kind=Mcar(icar,2);%EV种类;%size(Mcar,2)=1000Birthland=Mcar(icar,3);%EV初始位置Destination=Mcar(icar,4);%目的地tBirth1=Mcar(icar,5);%初始时刻tBirth2=Mcar(icar,6);%返程时刻Cbat=Mcar(icar,7);%ev容量SOC0=Mcar(icar,8);%初始socVcar=Mcar(icar,9);%速度TP_carnumber(Birthland,Icar_kind)=TP_carnumber(Birthland,Icar_kind)+1;%第Birthland条边/第Birthland个交通节点下,对应的第Icar_kind种车型加1,此行代码是计数的作用if   Mcar(icar,3)==Mcar(icar,4)                                       %如果EV初始位置Birthland=car(icar,3)==EV目的地Destination=Mcar(icar,4)continue                                                           %end                                                                   %[path,distance]=shortestpath(G,Birthland,Destination);                %如果EV初始位置Birthland=car(icar,3)   不等于  EV目的地Destination=Mcar(icar,4)%则输出EV初始位置Birthland=car(icar,3)与EV目的地Destination=Mcar(icar,4)最短路径path与最短距离distance%% C1 私家车if  Icar_kind==1%考虑环境温度和速度 耗电量dE=1.5*distance/Vcar+(0.21-1e-3*Vcar+1.531/Vcar)*distance;       %由最短行驶距离distance,电动汽车行驶实时车速Vcar=Mcar(icar,9),计算出EV初始位置到目的地的耗电量SOC1=SOC0-dE/0.9/Cbat;                                           %由初始soc即SOC0=Mcar(icar,8) 与 EV初始位置到目的地的耗电量 与 充电效率0.9 与 ev容量Cbat=Mcar(icar,7)SOC2=SOC1-dE/0.9/Cbat;                                           %计算出电动汽车剩余电量SOC2tdest1=tBirth1+distance/Vcar;                             %到达目的地时间(tdest1)=初始时刻+行驶时间if  SOC2<0                                                %判断私家车是否充电的条件% 触发慢充/计及排队时间Tmmc=Wq(ceil(tdest1));                                %ceil为向上取整T80=tdest1+(0.8-SOC1)*Cbat/Pchar_slow+Tmmc;           %充电到0.8EV容量时间(T80)=到达目的地时间+慢充到0.8EV容量时间+Tmmcif T800.8EV容量时间<到达第二个目的地的时间Charge(icar,2)=1;                                  %Icar_kind=Mcar(icar,2);EV种类;所以Charge(icar,2)赋值为私家车Icar_kind==1Charge(icar,3)=floor(tdest1);                      %EV初始位置Mcar(icar,3)赋值为向下取整tdest1,即32个交通节点中的一个Charge(icar,4)=ceil(T80);                          %目的地Mcar(icar,4)赋值为向上取整T80,即32个交通节点中的一个Charge(icar,5)=ceil(Pchar_slow);                   %初始时刻Mcar(icar,5)赋值为向上取整Pchar_slowPntcharge(Charge(icar,3):Charge(icar,4),Destination)=Pntcharge(Charge(icar,3):Charge(icar,4),Destination)+Charge(icar,5);%列表切片,Pntcharge(Charge(icar,3):Charge(icar,4),Destination)即为取Charge(icar,3):Charge(icar,4)所在行与Destination所在列的交叉元素elseCharge(icar,2)=1;                                  %Icar_kind=Mcar(icar,2);EV种类;所以Charge(icar,2)赋值为私家车Icar_kind==1Charge(icar,3)=floor(tdest1);                      %EV初始位置Mcar(icar,3)赋值为向下取整tdest1Charge(icar,4)=ceil(tBirth2);                      %目的地Mcar(icar,4)赋值为向上取整tBirth2,因为此时T80>tBirth2成立Charge(icar,5)=ceil(Pchar_slow);                   %初始时刻Mcar(icar,5)赋值为向上取整Pchar_slowPntcharge(Charge(icar,3):Charge(icar,4),Destination)=Pntcharge(Charge(icar,3):Charge(icar,4),Destination)+Charge(icar,5);%列表切片,Pntcharge(Charge(icar,3):Charge(icar,4),Destination)即为取Charge(icar,3):Charge(icar,4)所在行与Destination所在列的交叉元素
​

程序结果

4 下载链接

见下方!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Amazon Redshift Serverless 和 Toucan 构建数据故事应用程序

这是由 Toucan 的解决方案工程师 Django Bouchez与亚马逊云科技共同撰写的特约文章。 带有控制面板、报告和分析的商业智能&#xff08;BI&#xff0c;Business Intelligence&#xff09;仍是最受欢迎的数据和分析使用场景之一。它为业务分析师和经理提供企业的过去状态和当前状…

【ARM AMBA AXI 入门 10 - AXI 总线 DATA信号与 STRB 信号之间的关系 】

文章目录 AXI STRB 信号 AXI STRB 信号 AXI总线是ARM公司设计的高性能处理器接口&#xff0c;其中STRB和DATA信号在AXI协议中有特殊的含义和关系。 DATA信号&#xff1a;在AXI中&#xff0c;DATA信号用于在读写操作中传输实际的数据。数据的大小可以根据AXI接口的位宽来变化&…

Java免费自学网站墙裂推荐!!!!

最近&#xff0c;常有一些读者问我&#xff1a;“有没有什么推荐的Java学习网站啊&#xff1f;” 因为一直没有时间&#xff0c;所以我之前也是让大家上知乎、搜索引擎搜一下就好了。 但是&#xff0c;我深知不能这样&#xff0c;应该拿出更真诚的态度带来优质的内容。 于是…

前端技术Vue学习笔记--005

Vue学习笔记 一、非父子通信-event bus 事件总线 作用&#xff1a;非父子组件之间&#xff0c;进行简易消息传递。&#xff08;复杂场景用----Vuex&#xff09; 使用步骤&#xff1a; 创建一个都能访问的事件总线 &#xff08;空Vue实例&#xff09;-----utils/EventBus.js /…

react-sortable-hoc 拖拽列表上oncick事件失效

const SortableItem SortableElement(({value, onChangePayment}) > {const onClickItem () > {// todo}return (<View className"-item" onClick{onClickItem}>xxxxxxx</View>) })问题&#xff1a;onClick 无效 解决&#xff1a;添加distance

java八股文面试[java基础]——接口和抽象类的区别

知识来源&#xff1a; 【基础】接口和抽象类_哔哩哔哩_bilibili 【2023年面试】Java中抽象类和接口有什么区别_哔哩哔哩_bilibili 【23版面试突击】抽象类和接口的区别&#xff0c;类可以继承多个类么&#xff0c;接口可以继承多个接口么,类可以实现多个接口么&#xff1f;_…

中文医学知识语言模型:BenTsao

介绍 BenTsao&#xff1a;[原名&#xff1a;华驼(HuaTuo)]: 基于中文医学知识的大语言模型指令微调 本项目开源了经过中文医学指令精调/指令微调(Instruction-tuning) 的大语言模型集&#xff0c;包括LLaMA、Alpaca-Chinese、Bloom、活字模型等。 我们基于医学知识图谱以及医…

Linux服务——http协议及nginx服务

目录 一、HTTP协议 1、跨网络的主机间通讯方式 套接字相关的系统调用 2、HTTP协议访问网站的过程 3、http协议状态码分类 常见的http协议状态码 4、MIME 5、URL组成 6、HTTP协议版本 7、系统处理http请求的工作模式 8、apache与nginx的区别 二、I/O模型 I/O模型相关…

javascript闭包

javascript闭包 函数getNum想访问内部函数fn中的变量fg&#xff0c;就形成了闭包。 用途&#xff1a; 增加了内部函数变量的寿命 缺点&#xff1a; 会造成内存泄露

使用VisualStudio制作上位机(二)

文章目录 使用VisualStudio制作上位机(二)第三部分:GUI内部函数设计使用VisualStudio制作上位机(二) Author:YAL 第三部分:GUI内部函数设计 事件添加 给窗体或窗体按钮相关的操作添加事件有两种方式,事件的名字直白的表面了这是什么事件。 直接双击界面,自动生成窗…

微信公众号关注/取消订阅事件一文详解

一、背景介绍 这周期的项目需求中需要做一个引导用户关注微信公众号的功能&#xff0c;但是引导用户关注的前提是需要实时获取当前用户是否已经关注微信公众号,如果光看官方文档还是对于一些小伙伴来说比较无从下手&#xff0c;所以我来分享以下我做的过程中遇到的问题以及解决…

HTTP与RPC的取舍

HTTP与RPC的取舍 HTTP和RPC都是常用的网络通信协议&#xff0c;它们各有优劣。选择何种协议&#xff0c;主要取决于应用的需求和场景。 HTTP和RPC都有各自的优点和缺点&#xff0c;首先我们对两种协议进行一个总结。 HTTP协议图 HTTP的优点&#xff1a; 广泛的支持&#xff1…

leetcode:338. 比特位计数(python3解法)

难度&#xff1a;简单 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;[0,1,1] 解释&#xff1a; 0…

在自定义数据集上使用 Detectron2 和 PyTorch 进行人脸检测

本文讲讲述如何使用Python在自定义人脸检测数据集上微调预训练的目标检测模型。学习如何为Detectron2和PyTorch准备自定义人脸检测数据集&#xff0c;微调预训练模型以在图像中找到人脸边界。 人脸检测是在图像中找到&#xff08;边界的&#xff09;人脸的任务。这在以下情况下…

【Java】树结构SQL数据的如何去实现搜索

这里写自定义目录标题 需要实现的效果前端需要的json格式&#xff1a;一定是一个完整的树结构错误错误的返回格式错误的返回格式实现的效果 正确正确的返回格式正确的展示画面 后端逻辑分析代码总览 数据库表结构 需要实现的效果 前端需要的json格式&#xff1a;一定是一个完整…

STM32F4X USART串口使用

STM32F4X USART串口使用 串口概念起始位波特率数据位停止位校验位串口间接线 STM32F4串口使用步骤GPIO引脚复用函数串口初始化函数串口例程 串口概念 串口是MCU与外部通信的重要通信接口&#xff0c;也是MCU在开发过程中的调试利器。串口通信有几个重要的参数&#xff0c;分别…

java8:HashMap的实现原理

一概述 这个哈希表是基于 Map 接口的实现的&#xff0c;它允许 null 值和null 键&#xff0c;它不是线程同步的&#xff0c;同时也不保证有序。 Map 的这种实现方式为 get&#xff08;取&#xff09;和 put&#xff08;存&#xff09;带来了比较好的性能。但是如果涉及到大量的…

如何使用自动化测试工具Selenium?

哈喽&#xff0c;大家好&#xff0c;我是小浪。那么有一段时间没有更新了&#xff0c;还是在忙实习和秋招的事情&#xff0c;那么今天也是实习正式结束啦&#xff0c;开始继续更新我们的学习博客&#xff0c;后期主要是开发和测试的学习博客内容巨多&#xff0c;感兴趣的小伙伴…

Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

bit7z一个c静态库&#xff0c;为7-zip共享库提供了一个干净简单的接口 使用CMAKE重新编译github上的bit7z库&#xff0c;用来解压/预览iso9660&#xff0c;WIm&#xff0c;Zip,Rar等常用的压缩文件格式。z-zip库支持大多数压缩文件格式 导读 编译bit7z(C版本)使用mscv 2017编译…

【LeetCode-困难题】42. 接雨水

题目 题解一&#xff1a;暴力双重for循环&#xff08;以行计算水量&#xff09; 1.先找出最高的柱子有多高&#xff08;max 3&#xff09; 2.然后第一个for为行数&#xff08;1&#xff0c;2&#xff0c;3&#xff09; 3.第二个for计算每一行的雨水量&#xff08;关键在于去除…