“车-路-网”电动汽车充电负荷时空分布预测(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:32
    for j=1:32
        if LJ(i,j)==1
            if S(i,j)<=1 
               Rv(i,j)=t0*(1+alpha*S(i,j)^beta);
            else
               Rv(i,j)=t0*(1+alpha*(2-S(i,j))^beta);
            end
            if 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)));
            else
               Cv(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));
            end
               W(i,j)=Rv(i,j)+Cv(i,j);
        else
               W(i,j)=0*1e3;
        end
    end
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)全部采集一遍
    icar
    
    Icar_kind=Mcar(icar,2);%EV种类;%size(Mcar,2)=1000
    Birthland=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);%初始soc
    Vcar=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;                                           %计算出电动汽车剩余电量SOC2
        tdest1=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容量时间+Tmmc
            if T800.8EV容量时间<到达第二个目的地的时间
               Charge(icar,2)=1;                                  %Icar_kind=Mcar(icar,2);EV种类;所以Charge(icar,2)赋值为私家车Icar_kind==1
               Charge(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_slow
               Pntcharge(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所在列的交叉元素
            else
               Charge(icar,2)=1;                                  %Icar_kind=Mcar(icar,2);EV种类;所以Charge(icar,2)赋值为私家车Icar_kind==1
               Charge(icar,3)=floor(tdest1);                      %EV初始位置Mcar(icar,3)赋值为向下取整tdest1
               Charge(icar,4)=ceil(tBirth2);                      %目的地Mcar(icar,4)赋值为向上取整tBirth2,因为此时T80>tBirth2成立
               Charge(icar,5)=ceil(Pchar_slow);                   %初始时刻Mcar(icar,5)赋值为向上取整Pchar_slow
               Pntcharge(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 下载链接

见下方!

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

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

相关文章

诺依框架ruoyi.js添加默认当年日期范围

ruoyi.js添加方法 // 默认当年日期范围如&#xff1a;2023-01-01到2023-08-22&#xff08;至今&#xff09; export function defaultYearDate(data) {// this.dateDefaultShow new Date();// this.dateDefaultShow.setMonth(new Date().getMonth() - 1);const end new Date…

element-table的动态操作,自动以表格,动态新增行、列,删除行列

灵活的自定义表格行列以及增删改查的操作,右键选中列则是列的删除&#xff0c;效果如下 <template><div class"st-table"><div style"width: 100%"><el-button click"addRow()" type"primary" icon"CircleP…

【学习FreeRTOS】第17章——FreeRTOS任务通知

1.任务通知的简介 任务通知&#xff1a;用来通知任务的&#xff0c;任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。 使用队列、信号量、事件标志组时都需另外创建一个结构体&#xff0c;通过中间的结构体进行间接通信&#xff01; 使用任务通知时&#xff0c…

Django学习笔记-AcApp端授权AcWing一键登录

笔记内容转载自 AcWing 的 Django 框架课讲义&#xff0c;课程链接&#xff1a;AcWing Django 框架课。 AcApp 端使用 AcWing 一键授权登录的流程与之前网页端的流程一样&#xff0c;只有申请授权码这一步有一点细微的差别&#xff1a; 我们在打开 AcApp 应用之后会自动向 AcW…

Mybatis-分页与动态字符

目录 一.Mybatis动态分页 什么是动态分页&#xff1a; 导入pom依赖 配置拦截器 编写Bookmapper文件 配置pageBean文件 配置BookBiz接口类 配置BookBizImpl实现接口类 编写实现类demo 测试结果 ​编辑 不走插件&#xff0c;不会分页 二.Mybatis的特殊字符 编写一个Book…

软件测试知识点总结(一)

文章目录 前言一. 什么是软件测试二. 软件测试和软件调试的区别三. 软件测试和研发的区别四. 优秀的测试人员所应该具备的素质总结 前言 在现实生活中的很多场景下&#xff0c;我们都会进行测试。 比如买件衣服&#xff0c;我们需要看衣服是不是穿着好看&#xff0c;衣服材质如…

java八股文面试[数据结构]——HashMap扩容优化

知识来源&#xff1a; 【2023年面试】HashMap在扩容上做了哪些优化_哔哩哔哩_bilibili

Ansible 自动化安装软件

例子如下&#xff1a; 创建一个名为/ansible/package.yml 的 playbook : 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上 将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上 将 dev 主机组中主机上的所有软件包更新为最新版本 --- - name:…

k8s之工作负载、Deployment、DaemonSet、StatefulSet、Job、CronJob及GC

文章目录 1、工作负载1.1、定义1.2、分类 2、Deployment2.1、定义2.2、Deployment创建2.3、Deployment 更新机制2.3.1、比例缩放&#xff08;Proportional Scaling&#xff09;2.3.2、HPA&#xff08;动态扩缩容&#xff09;2.3.2.1、需要先安装metrics-server2.3.2.2、配置hpa…

JVM工具-1. jps:虚拟机进程状态工具

文章目录 1. jps介绍2. jps命令格式3. jps工具主要选项4. jps -q5. jps -m6. jps -l7. jps -v 1. jps介绍 jps(JVM Process Status Tool)&#xff1a;虚拟机进程状态工具&#xff0c;可以列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类&#xff08;Main Class&…

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮

目录 0.1 效果展示 0.2 实现步骤 1 数据准备 2 属性查询 2.1 射线检测 2.2 获取FeatureID 2.3 属性查询 2.4 属性显示 3 单体高亮 3.1 构建材质参数集 3.2 材质参数设置 3.3 添加Cesium Encode Metadata插件 3.4 从纹理中取出特定FeatureId属性信息 3.5 创建…

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…

【业务功能篇83】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-应用层实战

五、ElasticSearch应用 1.ES 的Java API两种方式 Elasticsearch 的API 分为 REST Client API&#xff08;http请求形式&#xff09;以及 transportClient API两种。相比来说transportClient API效率更高&#xff0c;transportClient 是通过Elasticsearch内部RPC的形式进行请求…

MAVEN利器:一文带你了解IDEA中如何使用Maven

前言&#xff1a; 强大的构建工具——Maven。作为Java生态系统中的重要组成部分&#xff0c;Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用&#xff0c;Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…

windows10 docker 安装在D盘

win10安装docker后发现c盘空间急速减少&#xff0c;360管家查看发现images镜像安装在C盘&#xff0c;于是重装docker desktop以为在安装过程中能够选择&#xff0c;遗憾的是没有提供选择权限&#xff0c;默认直接就安装到了c盘。 desktop 迁移 百度得知可以将c盘的docker安装…

SpringCloud学习笔记(二)_Eureka注册中心

一、Eureka简介 Eureka是一项基于REST&#xff08;代表性状态转移&#xff09;的服务&#xff0c;主要在AWS云中用于定位服务&#xff0c;以实现负载均衡和中间层服务器的故障转移。我们称此服务为Eureka Server。Eureka还带有一个基于Java的客户端组件Eureka Client&#xff…

网络安全之红蓝对抗实战

前言 背景介绍&#xff1a;目标是拿到企业www.xxx.com的《上市商业计划书.docx》&#xff0c;通过 OPENVPN 访问。特别提出的得分规则修改&#xff0c;权限的得分必须有 WEBSHELL/交互式 SHELL&#xff0c;只有一个漏洞回显不给分&#xff0c;更加偏向考察**漏洞利用**而非漏洞…

大红喜庆版UI猜灯谜小程序源码/猜字谜微信小程序源码

今天给大家带来一款UI比较喜庆的猜灯谜小程序&#xff0c;大家看演示图的时候当然也是可以看得到那界面是多么的喜庆&#xff0c;而且新的一年也很快就来了,所以种种的界面可能都比较往喜庆方面去变吧。 这款小程序搭建是免服务器和域名的&#xff0c;只需要使用微信开发者工具…

ARM--day7(cortex_M4核LED实验流程、异常源、异常处理模式、异常向量表、异常处理流程、软中断编程、cortex_A7核中断实验)

软中断代码&#xff1a;&#xff08;keil软件&#xff09; .text .global _start _start:1.构建异常向量表b resetb undef_interruptb software_interruptb prefetch_dataabortb data_abortb .b irqb fiq reset:2.系统一上电&#xff0c;程序运行在SVC模式1>>初始化SVC模…