0


2022深圳杯C题思路解析

题目描述:

1.2 问题重述

在制定电动车调度方案时,必须考虑充、换电池的时间成本,从而提出了新

的车辆运输选址及调度问题。

1) 已知自动驾驶电动物料车在取料点 P 和卸货点 D 之间往复运送物料,

通过建立数学规划模型,在 P 点和 D 点之间确定一个换电站选址及调

度方案,以满足资源约束与电池运行方式为约束条件,实现极大化制

定时间段内运送物料量的目标。基于附录中的数据求解规划模型得到

换电站的位置,并求得 1000 小时内所运输的物料量,所使用车辆、

电池组数量和车辆及其电池组的具体调度方案。

2) 在基于问题 1 其他条件与任务不变的情况下,将建站条件更改为“在

P 点与 D 点之间每个方向分别确定一个换电站位置”。

3) 在考虑峰谷电价、购置电池组、建设充、换电站等成本的基础上,制

定被整每日最低运输量、3 年结算周期投资运行成本最低的建站及电

池组调度方案。根据附录所给的数据(缺考的数据自行补充),给出

具体算例。

4) 对多个取料点、单个卸货点,研究上述换电站选址及车辆-电池组调

度问题。

二、 问题分析

**基于动态规划的电动物料车换电站选址及调度方案 **

**摘要 **

在温室效应逐年加剧的状态下,环保的自动驾驶电动车是发展趋势。本文

通过建立数学规划模型,分析了自动驾驶物料电动车在取料点与卸货点之间循环

往复运送物料耗电情况,并在极大化指定时间段内运送物料量的情况下给出换电

站的选址及调度方案。该问题的研究对电动汽车的推广具有重要意义,并能有效

节省时间与资源,提高运输物料的效率。

本文首先对附录数据进行分析,可知车道上最多可跑 98 辆车,每隔 12 秒发

一次车,在看周期的情况下,载货状态跑一趟消耗 5%电量,空载状态跑一趟大

约消耗 3.33%电量。往返 9 次消耗 75%的电量。运输车换电均需花费 2 分钟,与

完成一次装卸货时间相同,换电站内900组电池组共可满足150辆车的换电需求。

针对问题一,首先将极大化制定时间段内运送物料量问题转化为保持路上拥

有在约束条件下最大的车辆数,尽可能减少因换电和装卸货所浪费的时间,即使

得到达 D 点的次数最多。因此,以换电站与 P 点之间的距离𝑋?为决策变量,以

资源约束与电池运行方式为约束条件,建立以指定时间段内到达 D 点次数最多为

目标的目标函数。通过 Python 使用模拟退火算法,求得最优解 X 的值为 5.5。

调度方案为:98 辆车陆续被派往运输,经过程 1 第 1 辆车到达 B 点换电,此时

再从 A 处陆续派出 10 辆车。第 1 辆车换电完毕后上路;经过程 2 第 1 辆车重新

到达 A 点,而第 99 辆车到达 B 点换电,此时 A 点再派 10 辆车,从派出的第 1

辆车重新开始循环。

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显示不出来 下面是求解方程的源码

from sympy  import symbols,solve
#求解不等式组
x=symbols('x')
f1=(5/6)*x*0.01+0.833-0.90
f2=(10-x)*0.01*(5/6)+0.833-0.9
print(solve([f1<=0,f2<=0]))
f3=4*x+200-222
#求解等式
print(solve(4*x+200-222,x))

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 
f2=0.833-0.9+0.01*y*0.5+0.1*(1/3)-0.01*x*(1/3)
 print(solve([f1,f2])) p
rint(linsolve([f1,f2],(x,y)))

3.4问类似

第一问部分源代码如下

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 
f2=(10-x)*0.01*(5/6)+0.833-0.9 
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 # 将初始解的⽬标函数置为当前值

如想了解更多可以私信


本文转载自: https://blog.csdn.net/jiebaoshayebuhui/article/details/126333033
版权归原作者 showswoller 所有, 如有侵权,请联系我们删除。

“2022深圳杯C题思路解析”的评论:

还没有评论