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

本文详细解析了深圳杯2020年数学建模竞赛的题目,包括路线优化、传感器能量管理和多车辆调度问题,运用了数学建模、地理坐标计算、最优化算法和符号计算等技术。

深圳杯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

评论 76
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值