2020年“深圳杯”数学建模挑战赛C题-无线可充电传感器网络充电路线规划

深圳杯2020——数学建模模拟赛——C题

依赖库

  • Google or-tools
  • xlrd
  • matplotlib
  • sys
  • numpy
  • math
  • sympy (符号计算)
  • geopy(经纬度换算)

计算公式

感谢大神指点,原方案的经纬度换算有问题,故换成geopy库来解决

正确版本

def compute_euclidean_distance_matrix(locations):
    distances = {}
    for fromCounter, fromNode in enumerate(locations):
        distances[fromCounter] = {}
        for toCounter, toNode in enumerate(locations):
            if fromCounter == toCounter:
                distances[fromCounter][toCounter] = 0
            else:
                distances[fromCounter][toCounter] = geodesic(fromNode, toNode).meters
    return distances

先前错误版本

  • 经度(东西方向)1M实际度:31544206M*cos(纬度)/360°=

    31544206 ⋅ cos ⁡ ( l a t i t u d e = 36 ) / 360 = 708883.29 m / l o n g t i t u d e 31544206\cdot\cos(latitude=36)/360 = 708883.29m/longtitude 31544206cos(latitude=36)/360=708883.29m/longtitude

  • 纬度(南北方向)1M实际度:40030173M360°=

    40030173 / 360 = 111194.92 m / l a t i t u d e 40030173/360 = 111194.92m/latitude 40030173/360=111194.92m/latitude

第一题

使用first solution strategy获得计算近似解

求得结果
在这里插入图片描述

Route:
 0 -> 2 -> 1 -> 9 -> 7 -> 6 -> 11 -> 14 -> 15 -> 27 -> 16 -> 13 -> 12 -> 8 -> 10 -> 5 -> 3 -> 28 -> 24 -> 23 -> 29 -> 26 -> 25 -> 18 -> 19 -> 20 -> 17 -> 21 -> 22 -> 4 -> 0
Distance: 12033m
使用guided local search获得最优解

求得结果
在这里插入图片描述

Route:
 0 -> 2 -> 1 -> 9 -> 7 -> 6 -> 14 -> 11 -> 8 -> 12 -> 15 -> 27 -> 16 -> 13 -> 10 -> 5 -> 3 -> 4 -> 22 -> 28 -> 24 -> 23 -> 21 -> 29 -> 26 -> 25 -> 18 -> 19 -> 20 -> 17 -> 0       
Distance: 11469m

第二问:数值解法(numerical)

要使传感器一直工作的最低要求:在移动电源走完一整个回路后,电池容量刚好达到最低要求为最优

假设初始条件:当到达该节点时,剩余电池容量刚好为最低要求

参数定义

  • x 1 , x 2 , ⋯   , x 30 x_1,x_2,\cdots,x_{30} x1,x2,,x30:假设每个节点的电池容量
  • c 1 , c 2 , ⋯   , c 30 c_1,c_2,\cdots,c_{30} c1,c2,,c30:每个节点的电池消耗速度
  • r ( m A / s ) r(mA/s) r(mA/s):电池充电速度
  • f f f:最低工作电量
  • v ( m / s ) v(m/s) v(m/s):移动充电器移动速度
  • d s t dst dst:总路程

等式

  • 时间总花费 t t o t = d s t / v + ∑ i = 1 30 ( x i − f ) / r i t_{tot}=dst/v+\sum_{i=1}^{30}{(x_i - f)/r_i} ttot=dst/v+i=130(xif)/ri
  • 电池容量推导 x i = t t o t ⋅ c i + f x_i=t_{tot}\cdot c_i+f xi=ttotci+f

约束条件

去掉数据中心节点的充电计算

x i = [ d s t / v + ∑ i = 2 30 ( x i − f ) / r i ] ⋅ c i + f x_{i} = [dst/v+\sum_{i=2}^{30}{(x_{i} - f)/r_i}]\cdot c_i+f xi=[dst/v+i=230(xif)/ri]ci+f

根据约束条件得出线性方程组

组合结果为一个29*29的矩阵:

[ x 2 ⋮ x 30 ] = [ d s t ⋅ c 2 v + f − f ⋅ c 2 r − ⋯ − f ⋅ c 30 r ⋮ d s t ⋅ c 30 v + f − f ⋅ c 2 r − ⋯ − f ⋅ c 30 r ] + [ x 2 ⋅ c 2 r + ⋯ + x 30 ⋅ c 30 r ⋮ x 2 ⋅ c 2 r + ⋯ + x 30 ⋅ c 30 r ] \left[ \begin{array}{l} \boldsymbol{x}_2\\ \vdots\\ \boldsymbol{x}_{30}\\ \end{array} \right] =\left[ \begin{array}{c} \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_2}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \vdots\\ \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_{30}}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \end{array} \right] +\left[ \begin{array}{c} \frac{\boldsymbol{x}_2\cdot \boldsymbol{c}_2}{\boldsymbol{r}}+\cdots +\frac{\boldsymbol{x}_{30}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \vdots\\ \frac{\boldsymbol{x}_2\cdot \boldsymbol{c}_2}{\boldsymbol{r}}+\cdots +\frac{\boldsymbol{x}_{30}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \end{array} \right] x2x30=vdstc2+frfc2rfc30vdstc30+frfc2rfc30+rx2c2++rx30c30rx2c2++rx30c30

化简:

[ x 2 ⋮ x 30 ] = [ d s t ⋅ c 2 v + f − f ⋅ c 2 r 2 − ⋯ − f ⋅ c 30 r 30 ⋮ d s t ⋅ c 30 v + f − f ⋅ c 2 r 2 − ⋯ − f ⋅ c 30 r 30 ] + [ x 2 ⋅ c 2 r 2 + ⋯ + x 30 ⋅ c 30 r 30 ⋮ x 2 ⋅ c 2 r 2 + ⋯ + x 30 ⋅ c 30 r 30 ] \left[ \begin{array}{l} \boldsymbol{x}_2\\ \vdots\\ \boldsymbol{x}_{30}\\ \end{array} \right] =\left[ \begin{array}{c} \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_2}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}_2}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}_{30}}\\ \vdots\\ \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_{30}}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}_2}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}_{30}}\\ \end{array} \right] +\left[ \begin{array}{c} \frac{\boldsymbol{x}_2\cdot \boldsymbol{c}_2}{\boldsymbol{r}_2}+\cdots +\frac{\boldsymbol{x}_{30}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}_{30}}\\ \vdots\\ \frac{\boldsymbol{x}_2\cdot \boldsymbol{c}_2}{\boldsymbol{r}_2}+\cdots +\frac{\boldsymbol{x}_{30}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}_{30}}\\ \end{array} \right] x2x30=vdstc2+fr2fc2r30fc30vdstc30+fr2fc2r30fc30+r2x2c2++r30x30c30r2x2c2++r30x30c30

转化成 A ⋅ X = b A\cdot X = b AX=b形式:

[ c 2 r − 1 ⋯ c 30 r ⋮ ⋱ ⋮ c 2 r ⋯ c 30 r − 1 ] ⋅ [ x 2 ⋮ x 30 ] = − [ d s t ⋅ c 2 v + f − f ⋅ c 2 r − ⋯ − f ⋅ c 30 r ⋮ d s t ⋅ c 30 v + f − f ⋅ c 2 r − ⋯ − f ⋅ c 30 r ] \left[ \begin{matrix} \frac{\boldsymbol{c}_2}{\boldsymbol{r}}-1& \cdots& \frac{\boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \vdots& \ddots& \vdots\\ \frac{\boldsymbol{c}_2}{\boldsymbol{r}}& \cdots& \frac{\boldsymbol{c}_{30}}{\boldsymbol{r}}-1\\ \end{matrix} \right] \cdot \left[ \begin{array}{l} \boldsymbol{x}_2\\ \vdots\\ \boldsymbol{x}_{30}\\ \end{array} \right] =-\left[ \begin{array}{c} \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_2}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \vdots\\ \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_{30}}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \end{array} \right] rc21rc2rc30rc301x2x30=vdstc2+frfc2rfc30vdstc30+frfc2rfc30

其中

A = [ c 2 r − 1 ⋯ c 30 r ⋮ ⋱ ⋮ c 2 r ⋯ c 30 r − 1 ] , b = − [ d s t ⋅ c 2 v + f − f ⋅ c 2 r − ⋯ − f ⋅ c 30 r ⋮ d s t ⋅ c 30 v + f − f ⋅ c 2 r − ⋯ − f ⋅ c 30 r ] \boldsymbol{A}=\left[ \begin{matrix} \frac{\boldsymbol{c}_2}{\boldsymbol{r}}-1& \cdots& \frac{\boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \vdots& \ddots& \vdots\\ \frac{\boldsymbol{c}_2}{\boldsymbol{r}}& \cdots& \frac{\boldsymbol{c}_{30}}{\boldsymbol{r}}-1\\ \end{matrix} \right] , \boldsymbol{b}=-\left[ \begin{array}{c} \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_2}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \vdots\\ \frac{\boldsymbol{dst}\cdot \boldsymbol{c}_{30}}{\boldsymbol{v}}+\boldsymbol{f}-\frac{\boldsymbol{f}\cdot \boldsymbol{c}_2}{\boldsymbol{r}}-\cdots -\frac{\boldsymbol{f}\cdot \boldsymbol{c}_{30}}{\boldsymbol{r}}\\ \end{array} \right] A=rc21rc2rc30rc301,b=vdstc2+frfc2rfc30vdstc30+frfc2rfc30

参数设置

  1. 速度 v = 50 m / s v=50m/s v=50m/s
  2. 充电速度 r = 200 m A / s r = 200mA/s r=200mA/s
  3. 最低工作值 f = 10 m A f=10mA f=10mA

数值解结果

nodesbattery capacity
05145.627
15692.659
24940.490
35168.420
44735.353
54940.490
65373.557
74963.283
84940.490
95168.420
104940.490
115601.487
125396.350
134940.490
144780.939
154940.490
165168.420
175624.280
185168.420
194940.490
204712.560
215168.420
225624.280
234712.560
245168.420
254894.904
264735.353
275373.557
285145.627

第二问:符号解法(symbolic)

代码已经实现,但是矩阵渲染太大导致计算机崩溃,故此可以得出利用符号解求解该问题并没有意义。

在这里插入图片描述

第三问

参数设置
  1. 速度: v = 50 m / s v=50m/s v=50m/s
  2. 每辆车最多运行时间: 100 s 100s 100s
  3. 每个节点的时间窗: [ 0 , 70 ] [0, 70] [0,70]
运行结果

在这里插入图片描述

Route for vehicle 0:
0 Time(0,0) -> 2 Time(4,4) -> 9 Time(10,10) -> 6 Time(16,16) -> 14 Time(25,25) -> 11 Time(30,30) -> 8 Time(36,36) -> 12 Time(40,40) -> 15 Time(45,45) -> 27 Time(57,57) -> 16 Time(67,67) -> 0 Time(86,86)
Time of the route: 86 seconds

Route for vehicle 1:
0 Time(0,0) -> 1 Time(5,5) -> 7 Time(12,12) -> 20 Time(21,21) -> 19 Time(28,28) -> 18 Time(36,36) -> 25 Time(46,46) -> 26 Time(57,57) -> 29 Time(69,69) -> 0 Time(91,91)
Time of the route: 91 seconds

Route for vehicle 2:
0 Time(0,0) -> 5 Time(7,7) -> 10 Time(11,11) -> 13 Time(16,16) -> 3 Time(30,30) -> 0 Time(40,40)
Time of the route: 40 seconds

Route for vehicle 3:
0 Time(0,0) -> 17 Time(8,8) -> 21 Time(18,18) -> 23 Time(25,25) -> 24 Time(33,33) -> 28 Time(41,41) -> 22 Time(49,49) -> 4 Time(56,56) -> 0 Time(64,64)
Time of the route: 64 seconds

Total time of all routes: 281min

结果有待优化

  • 64
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 76
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 76
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值