2022深圳杯C题思路解析

题目描述:

继续更新 

再更问题三

继续更新第一问、第四问

1.2 问题重述
在制定电动车调度方案时,必须考虑充、换电池的时间成本,从而提出了新
的车辆运输选址及调度问题。
1) 已知自动驾驶电动物料车在取料点 P 和卸货点 D 之间往复运送物料,
通过建立数学规划模型,在 P 点和 D 点之间确定一个换电站选址及调
度方案,以满足资源约束与电池运行方式为约束条件,实现极大化制
定时间段内运送物料量的目标。基于附录中的数据求解规划模型得到
换电站的位置,并求得 1000 小时内所运输的物料量,所使用车辆、
电池组数量和车辆及其电池组的具体调度方案。
2) 在基于问题 1 其他条件与任务不变的情况下,将建站条件更改为“在
P 点与 D 点之间每个方向分别确定一个换电站位置”。
3) 在考虑峰谷电价、购置电池组、建设充、换电站等成本的基础上,制
定被整每日最低运输量、3 年结算周期投资运行成本最低的建站及电
池组调度方案。根据附录所给的数据(缺考的数据自行补充),给出
具体算例。
4) 对多个取料点、单个卸货点,研究上述换电站选址及车辆-电池组调
度问题。
二、 问题分析
基于动态规划的电动物料车换电站选址及调度方案
摘要
5.1.1
在温室效应逐年加剧的状态下,环保的自动驾驶电动车是发展趋势。本文
通过建立数学规划模型,分析了自动驾驶物料电动车在取料点与卸货点之间循环
往复运送物料耗电情况,并在极大化指定时间段内运送物料量的情况下给出换电
站的选址及调度方案。该问题的研究对电动汽车的推广具有重要意义,并能有效
节省时间与资源,提高运输物料的效率。
本文首先对附录数据进行分析,可知车道上最多可跑 98 辆车,每隔 12 秒发
一次车,在看周期的情况下,载货状态跑一趟消耗 5%电量,空载状态跑一趟大
约消耗 3.33%电量。往返 9 次消耗 75%的电量。运输车换电均需花费 2 分钟,与
完成一次装卸货时间相同,换电站内900组电池组共可满足150辆车的换电需求。
针对问题一,首先将极大化制定时间段内运送物料量问题转化为保持路上拥
有在约束条件下最大的车辆数,尽可能减少因换电和装卸货所浪费的时间,即使
得到达 D 点的次数最多。因此,以换电站与 P 点之间的距离 𝑋? 为决策变量,以
资源约束与电池运行方式为约束条件,建立以指定时间段内到达 D 点次数最多为
目标的目标函数。通过 Python 使用模拟退火算法,求得最优解 X 的值为 5.5。
得出换电站距离为5.5KM时后面的问题就迎刃而解,
1: 所使用的车辆数应该为118辆(实际根据你的假设可能略有出入),
原因是第一辆车经过程 1,换电过程花费的 2 分
钟中,A 处继续派出了 10 辆车。第一辆车经过程 2 最后到达 A 点处时,为了节
省时间,继续在 A 处派出 10 辆车,并开始循环,
2:  所使用的电池组数为 108 × 6 = 648 组,原因是第一辆车与第 98 辆车经过
程 1 到达 B 点处换电需要 98 辆车所要的电池组数,而有上述分析知,第一辆车
经过程 2 之后,第 99 辆车已经过程 1 开始在 B 点处充电了,之前新增的 10 辆车
也需充电,因此共需要为 108 辆车提供换电池组,

5.1.2 模型建立
这是一个规划类问题,可用线性规划模型来进行求解。规划模型的要素:决
策变量,目标函数,约束条件。
本题的决策变量是换电站的位置,假设换电站位置距离 P 点 𝑋? ,则它到 D
点的距离为 𝑋? 。我们还需要一系列的调度方案。根据文中的信息,实际上,我
们还需要根据的取值范围来进一步确定我们的规划模型。
运输车的路程情况如下图:
1 双向同址下换电站运输车的路程情况

由于该换电站是一个双向同址,沿 D 到 P 方向时,记该换电站为 A;沿 P 到
D 方向时,记该换电站为 B。
已知一辆车从发货地满电量出发,最后到换电站换电也是满电的,之后的每
一次满电状态均是从换电站出发的,于是我们可以假设运输车辆都是从换电站出
发的。
满足约束的方程组如下:
83.3% + 5?6 % ≤ 90%
83.3% + 56 10 − ? % ≤ 90%
0 ≤ ? ≤ 10
220 + 2? = 2 + 220 + 2(10 − ?)
?表示X变量显示不出来 
要具体了解可以 关注后 私信我
下面是第一问部分源码
import random #导⼊模块import pandas as pd 
import numpy as np import matplotlib.pyplot as plt from datetime import datetime From sympy import symbols,solve,linsolve 
x=symbols('x')f1=(5/6)*x*0.01+0.833-0.90 print(solve([f1<=0,f2<=0])) 
f3=4*x+200-222 #求解等式print(solve(4*x+200-222,x)) #⼦程序:定义优化问题的⽬标函数 def cal_Energy(X, nVar, mk): #m(k):惩罚因⼦,随迭代次数 k 逐渐增 ⼤ 
p1 = (max(0, 6*X[0]+5*X[1]-60))**2 
p2 = (max(0, 10*X[0]+20*X[1]-150))**2 fx = -(10*X[0]+9*X[1]) return fx+mk*(p1+p2) # ⼦程序:模拟退⽕算法的参数设置 
def ParameterSetting(): cName = "funcOpt" # 
定义问题名称 YouCans, XUPT nVar = 2 # 给定⾃变量数量,
y=f(x1,..xn) xMin = [0, 0] xMax = [8, 8] tInitial = 100.0 tFinal = 1 13
alfa = 0.98 meanMarkov = 100 #Markov 链长度,也即内循环运⾏次数 scale = 0.5 #定义搜索步长,可以设为固定值或逐渐缩⼩ return cName, nVar, xMin, xMax, tInitial, tFinal, alfa, meanMarkov, scale# 模拟退⽕算法def OptimizationSSA(nVar,xMin,xMax,tInitial,tFinal,alfa,meanMarkov,scale) : 
# ====== 初始化随机数发⽣器 ====== randseed = random.randint(1, 100) random.seed(randseed) # 随机数发⽣器设置种⼦,也可以设为指定整数 # ====== 随机产⽣优化问题的初始解 ====== xInitial = np.zeros((nVar)) # 初始化,
创建数组 
for v in range(nVar): # xInitial[v] = random.uniform(xMin[v], xMax[v]) #产⽣ [xMin, xMax] 范围的随机实数 xInitial[v] = random.randint(xMin[v], xMax[v]) #产⽣ [xMin, xMax] 范围的随机整数 # 
调⽤⼦函数 cal_Energy 计算当前解的⽬标函数值 fxInitial = cal_Energy(xInitial, nVar, 1) 
# m(k):惩罚因⼦,初值为 1# ====== 模拟退⽕算法初始化 ====== xNew = np.zeros((nVar)) # 
初始化,创建数组 xNow = np.zeros((nVar)) # 初
始化,创建数组 xBest = np.zeros((nVar)) # 
初始化,创建数组 xNow[:] = xInitial[:] # 
初始化当前解,将初始解置为当前解 xBest[:] = xInitial[:] # 初始化最优解,将当前解置为最优解 fxNow = fxInitial # 将初始解的⽬标函数置为当前值

误差因子检验部分代码如下:

误差因子分析: 
load ('text.mat'); X=data;z=zscore(X) 
%数据标准化 
M=cov(z)[V,D]=eig(M); d=diag(D); ) 
eig1=sort(d,'descend') 
v=fliplr(V) S=0; i=0; 
while S/sum(eig1)<0.85 i=i+1;S=S+eig1(i); end 
NEW=z*v(:,1:i) 
18 W=100*eig1/sum(eig1) figure(1) pareto(W); 
title('贡献率直方图'); L =(v') * diag(sqrt(eig1)); %方差贡献 
Var = sum((L.^2)); %排序 
Temp = [Var;1:length(Var)];VarTemp = flipud(sortrows(Temp',1)); 
L = L(:,VarTemp(:,2)); 
Var = VarTemp(:,1); 
j = 0; Sum = 0; 
while Sum/sum(Var) <0.85 j= j +1;Sum = Sum + Var(j); 
end L_main = L(:,1:j); H = sum((L_main.^2),2); VarContr = 100 * Var/sum(Var); 
figure(2) pareto(VarContr); 
title('因子旋转前方差贡献度'); [L_New,psi,T,stats,F]=factoran(z,j,'rotate','varimax','scores','T homson');
19 %新的共同度 H = sum((L_New.^2),2); 

2:第二小问类似 但是不是换电站地址不同 需要设两个变量

83.3% + ?3 + 12 (10 − ?) % ≤ 90% 83.3% + ?2 + 1
3 (10 − ?) % ≤ 90%
0 ≤ ?, ? ≤ 10
2 + ? + 10 − ? + 220 = ? + 10 − ? + 220
求解代码如下
想具体了解可以关注后私信
from sympy import symbols,solve,linsolve 
x,y=symbols('x y') 
f1=0.833-0.9+0.01*x*(1/3)+0.05-0.01*y*0.5 print(solve([f1,f2]))print(linsolve([f1,f2],(x,y)))

3:第三问要自己去查一下相关材料的价格进行调度安排,以下是部分成本的价格

且该运输车的行驶情况与问题1类似。通过网上查询资料可知,一辆电动运输车的均价为约为9万元,则在118辆车所构成的一个循环中,所需要的车辆成本为1062万元。 

经查询深圳电价统计局以及深圳市新能源电动汽车网,我们可发现该换电站选址处所使用的电为10千伏高供高计,且每个充电桩的功率7kw,而一个电池组充电时间约为3小时,则每个电池组的容量约为21kw.h,则一个循环所使用的电量为13608kw h

那么最后最低成本问题可以化简为电价最低,因为其他几项成本基本上可以固定,不会有太大的变化

考虑峰谷电价的影响,需知一单位千瓦时各阶段时的成本,即高峰时的价格,低谷时的价格。经中国南方电网查询,得

用电类别(每月)

10千伏高供高计

大量工商业及其他用电

250KW H及以下

1.02756875

0.67506875

0.23105875

250KW H及以上

1.00758875

0.65506875

0.21106875

再者,还需知峰谷电价各个阶段的时间,参考深圳市居民生活电价表里的峰谷电价阶段的各个时段:

表2 电价阶段时间表

电价阶段

时间

峰期

10:00-12:00,14:00-19:00

平期

8:00-10:00,12:00-14:00,19:00-24:00

谷期

0:00-8:00

为了保证3年结算周期投资运行成本最低,即应保证换电站的个数尽可能少,则我们可以选择建立一个类似问题一的双向同址的换电站,经查询,一个充换电站成本约为260万元。

第三问部分代码如下
from sympy  import symbols,solve
totalElectricity=648*21
max=1.0075
average=0.655
min=0.211
averagecost=9*60/464*13608*average
print("低谷电价为",c3,"单位为万元")
print("车辆成本为",c4,"单位为万元")
print("换电设备成本为",c5,"单位为万元")
print("3年内总最低成本为",totalcost,"单位为万元")

想具体了解可 关注后 私信我

4:第四问与第一问类似 但是要考虑多个拿货点 稍微复杂一点 要设多个未知量来表示多个拿货点到换电站之间的距离,但大题思路和第一问类似,以下以两个拿货点为例
对X1的情况进行讨论
当有多个拿货点的时候与此类似,当然两个拿货点之间最好至少要有一个换电站。

 第四问部分代码如下

From sympy import symbols,solve,linsolve 
X1=symbols('x1') 
f1=(5/6)*x1*0.01+0.833-0.90print(solve([f1<=0,f2<=0]))

想具体了解可以关注后私信

如想了解更多可以点赞关注收藏然后私信,这样系统提醒比较及时

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

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

相关文章

243. 一个简单的整数问题2(树状数组)

输入样例&#xff1a; 10 5 1 2 3 4 5 6 7 8 9 10 Q 4 4 Q 1 10 Q 2 4 C 3 6 3 Q 2 4输出样例&#xff1a; 4 55 9 15 解析&#xff1a; 一般树状数组都是单点修改、区间查询或者单点查询、区间修改。这道题都是区间操作。 1. 区间修改用数组数组维护差分数组 2. 区间查询&am…

golang 自定义exporter - 服务连接数 portConnCount_exporter 导出器

需求&#xff1a; 1、计算当前6379 、3306 服务的连接数 2、可prometheus 语法查询 下面代码可直接使用&#xff1a; 注&#xff1a; 1、windows 与linux的区分 第38行代码 localAddr : fields[1] //windows为fields[1] &#xff0c; linux为fields[3] 2、如需求 增加/修改/删除…

程序猿成长之路之密码学篇-分组密码加密模式及IV(偏移量)的详解

Cipher.getInstance("AES/ECB/PKCS5Padding"); Cipher cipher Cipher.getInstance("AES/CBC/PKCS5Padding"); 在进行加解密编程的时候应该有很多小伙伴接触过以上的语句&#xff0c;但是大伙儿在编码过程中是否了解过ECB/CBC的含义、区别以及PKCS5Padding…

Selenium之css怎么实现元素定位?

世界上最远的距离大概就是明明看到一个页面元素站在那里&#xff0c;但是我却定位不到&#xff01;&#xff01; Selenium定位元素的方法有很多种&#xff0c;像是通过id、name、class_name、tag_name、link_text等等&#xff0c;但是这些方法局限性太大&#xff0c; 随着自动…

指针进阶大冒险:解锁C语言中的奇妙世界!

目录 引言 第一阶段&#xff1a;&#x1f50d; 独特的字符指针 什么是字符指针&#xff1f; 字符指针的用途 演示&#xff1a;使用字符指针拷贝字符串 字符指针与字符串常量 小试牛刀 第二阶段&#xff1a;&#x1f3af; 玩转指针数组 指针数组是什么&#xff1f; 指针…

[SpringBoot3]基础篇

二、SpringBoot基础篇 2.1什么是SpringBoot SpringBoot是目前流行的微服务框架&#xff0c;倡导“约定优于配置”&#xff0c;其目的是用来简化新Spring应用的初始化搭建以及开发过程。SpringBoot提供了很多核心的功能&#xff0c;比如自动化配置starter&#xff08;启动器&a…

策略模式【Strategy Pattern】

刘备要到江东娶老婆了&#xff0c;走之前诸葛亮给赵云&#xff08;伴郎&#xff09;三个锦囊妙计&#xff0c;说是按天机拆开解决棘手问题&#xff0c; 嘿&#xff0c;还别说&#xff0c;真是解决了大问题&#xff0c;搞到最后是周瑜陪了夫人又折兵呀&#xff0c;那咱们先看看…

http、https笔记

目录 HTTP 基本概念状态码&#xff1a;get和post的区别&#xff1a;http 常⻅字段&#xff1a;http的缺点&#xff1a; HTTP/1.1HTTP/3HTTPSHTTPS和HTTP区别对称加密和⾮对称加密⾮对称加密 HTTP 基本概念 状态码&#xff1a; 1xx 中间状态&#xff0c;比如post的continue 20…

【设计模式】抽象工厂模式

抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 在抽象工厂模式中&#xff0c;接口是负责创建一个相关对象…

vim学习笔记(致敬vim作者)

vim cheat sheet 30. vim 删除大法 vim 删除某个字符之后改行的其他的字符&#xff1f;删除某行之后的其他行&#xff1f;删除某个字符之后的其他字符&#xff1f;【1】删除单个字符&#xff1f; 跳到要删除的字符位置 按下d键然后按下shift 4键 【2】删除某行之后的其他行…

【CheatSheet】Python、R、Julia数据科学编程极简入门

《Python、R、Julia数据科学编程极简入门》PDF版&#xff0c;是我和小伙伴一起整理的备忘清单&#xff0c;帮助大家10分钟快速入门数据科学编程。 另外&#xff0c;最近 TIOBE 公布了 2023 年 8 月的编程语言排行榜。 Julia 在本月榜单中实现历史性突破&#xff0c;成功跻身 …

构建之法 - 软件工程实践教学:一线教师的13问

福州大学单红老师的软工课程总结 2020春&#xff0c;不一样的学期不一样的软工实践 单红⽼师在总结中&#xff0c;提出了13条疑惑&#xff0c;《构建之法》的作者邹欣⽼师就单红⽼师提出的每⼀条疑惑&#xff0c;给出了⾃⼰的思考&#xff0c;与他进⾏探讨交流。欢迎你也来参与…

[保研/考研机试] KY3 约数的个数 清华大学复试上机题 C++实现

题目链接&#xff1a; KY3 约数的个数 https://www.nowcoder.com/share/jump/437195121691716950188 描述 输入n个整数,依次输出每个数的约数的个数 输入描述&#xff1a; 输入的第一行为N&#xff0c;即数组的个数(N<1000) 接下来的1行包括N个整数&#xff0c;其中每个…

pytest fixture 高级使用

一、fixture中调用fixture 举例&#xff1a; 输出&#xff1a; 说明&#xff1a;登录fixture 作为参数传递到登出方法中&#xff0c;登录方法的返回值就可以被登出方法使用 二、在fixture中多参数的传递&#xff08;通过被调用函数传参&#xff09; 举例&#xff1a; 输出&a…

目标检测YOLOv3基于DarkNet53模型测试-笔记

目标检测YOLOv3基于DarkNet53模型测试-笔记 预测和试测结果&#xff1a; 预测代码如下所示&#xff1a; testInsects.py #YOLOv3网模型测试-单图片文件测试并显示测试结果 import time import os import paddle import numpy as np import cv2 import random from PIL impor…

【24择校指南】北方工业大学计算机考研考情分析

北方工业大学(B-) 考研难度&#xff08;☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分数人数统计&#xff09;、院校概况、23专业目录、23复试详情、23各科目和各专业考情分析。 正文1720字&#xff0c;预计阅读&#xff1a;5分钟。 2023考情概况…

竞赛项目 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

实现跨域的几种方式

原理 前后端的分离导致了跨域的产生 跨域的三要素&#xff1a;协议 域名 端口 三者有一个不同即产生跨域 例如&#xff1a; http://www.csdn.com https://www.csdn.com 由于协议不同&#xff0c;端口不同而产生跨域 注&#xff1a;http的默认端口80&#xff0c;https的默…

Android应用开发(37)LTPO帧率测试基于Surfaceview(暂存)

Android应用开发学习笔记——目录索引 参考android官网&#xff1a; Frame rate | Android media | Android Developers多重刷新率 | Android 开源项目 | Android Open Source ProjectWindowManager.LayoutParams | Android Developers 目前市面上旗舰手机基本都是…

ad+硬件每日学习十个知识点(26)23.8.6 (DCDC的降压电路、升压电路、降压-升压电路,同步整流,选型考虑同步、隔离)

文章目录 1.DCDC的降压原理2.DCDC的升压原理3.DCDC的升压和降压原理4.什么是肖特基二极管造成的死区电压&#xff1f;5.MOS管有死区电压么&#xff1f;6.DCDC的同步整流&#xff08;用MOS管取代整流二极管&#xff0c;避免死区电压的影响&#xff09;7.DCDC选型——同步与非同步…