简介

第二问的公式

\[\frac{x_{i}-f}{v_{i}} \geq T+\sum_{j=0(j !=i)}^{29} \frac{x_{j}-f}{r}

\]

T 路径上一周消耗的时间

f 最低电量

r 充电速度

v 每个sensor的消耗速度

x 每个sensor的电池电量

code

主要使用了模拟退火

main.py

#coding=utf-8

from solution import solution

from draw import draw

import time

import winsound

def main1():

solve = solution(salesNumber = 1)

# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了

myNodes = solve.readFromFile('B题附件2.xlsx')

start = time.clock()

xmin, x, y = solve.solutionForSubjectOne()

elapsed = (time.clock() - start)

drawObj = draw()

drawObj.drawY(x, y)

drawObj.drawRoute1(xmin, myNodes)

print("Time used:", elapsed)

def main2():

# 问题2 要赋值

xmin = [16, 27, 15, 12, 8, 11, 14, 6, 7, 9, 1, 2, 0, 17, 20, 19, 18, 25, 26, 29, 21, 23, 24, 28, 22, 4, 3, 5, 10, 13]

solve = solution(salesNumber=1)

# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了

myNodes = solve.readFromFile(

'XXX')

start = time.clock()

drawObj = draw()

solve.setScheme(minEnergy=15, moveSpeed=10, chargeRate=20)

re = solve.solutionForSubjectTwo(xmin)

elapsed = (time.clock() - start)

drawObj.drawRect2(re, myNodes, 15) # 15是最小电量

print("Time used:", elapsed)

def main3():

# 问题3解决方案

solve = solution(salesNumber=4)

solve.setScheme(minEnergy=15, moveSpeed=10, chargeRate=20)

solve.setCoef(consumeOneMeter = 0.001, consumeOneMa = 1)

# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了

myNodes = solve.readFromFile(

'XXX')

start = time.clock()

drawObj = draw()

xmin, ymin, drawX, drawY = solve.monituihuo()

elapsed = (time.clock() - start)

drawObj.drawY(drawX, drawY)

drawObj.drawRoute3(xmin, myNodes, ymin)

# 将 xmin 拆分为4 个

travelingSalesman = []

allDistance = []

for i in range(4):

tmp = [0]

allDistance.append(0)

travelingSalesman.append(tmp)

j = 0

for i in range(len(xmin)):

if (xmin[i] != 0):

travelingSalesman[j].append(xmin[i])

else:

j += 1

re = []

for i in range(4):

tmp = solve.solveFor3(travelingSalesman[i])

re.append(tmp)

# for i in range(4):

# print(re[i])

# print(travelingSalesman[i])

newRE = []

for i in range(30):

newRE.append(0)

for i in range(4):

for j in range(len(travelingSalesman[i])):

newRE[travelingSalesman[i][j]] = re[i][j]

drawObj.drawRect2(newRE, myNodes, 15) # 15是最小电量

for i in range(len(newRE)):

print(newRE[i])

# 对每一个节点进行绘图

# drawObj.drawRect3(re, travelingSalesman, myNodes)

# 根据得到的路径图 计算 传感器节点所需要的的电池电量

print("Time used:", elapsed)

def test():

solve = solution(salesNumber=4)

solve.setScheme(minEnergy=15, moveSpeed=10, chargeRate=20)

solve.setCoef(consumeOneMeter=0.001, consumeOneMa=1)

# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了

myNodes = solve.readFromFile('XXX')

start = time.clock()

drawObj = draw()

newRE = [

15.0,

16.75801,

17.53926,

16.46503,

16.79056,

16.17204,

16.46503,

17.08354,

16.49758,

16.46503,

16.79056,

16.46503,

17.40906,

17.11609,

16.46503,

16.23715,

16.46503,

16.79056,

17.44161,

16.79056,

16.46503,

16.13948,

16.79056,

17.44161,

16.13948,

16.79056,

16.39992,

16.17204,

17.08354,

16.75801

]

drawObj.drawRect2(newRE, myNodes, 15) # 15是最小电量

if __name__ == "__main__":

test()

winsound.Beep(300, 2000)

utils.py

#coding=utf-8

from math import radians, cos, sin, asin, sqrt

def haversine(lon1, lat1, lon2, lat2): # 经度1,纬度1,经度2,纬度2 (十进制度数)

"""

https://blog.csdn.net/vernice/article/details/46581361

Calculate the great circle distance between two points

on the earth (specified in decimal degrees)

"""

# 将十进制度数转化为弧度

lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

# haversine公式

dlon = lon2 - lon1

dlat = lat2 - lat1

a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2

c = 2 * asin(sqrt(a))

r = 6371 # 地球平均半径,单位为公里

return c * r * 1000

node.py

#coding=utf-8

class node:

def __init__(self):

self.name = ''

self.x = 0

self.y = 0

self.energyConsumptionRate = 0 # ma/s

self.batteryCapacity = 0 # ma 存储总值

self.lastAct = 0 # 默认为0 如果上次是减去数值那么就是 -1 如果上次是加上数值那么就是1

self.plusOrMinus = 0.01 # 默认是每次增加100

self.id = 0

self.curBatteryCap = 0

self.button = False

self.numberPlus = 0

def mySet(self, name, x, y, energyConsumptionRate, batteryCapacity, id):

self.name = name

self.x = x

self.y = y

self.energyConsumptionRate = energyConsumptionRate

self.batteryCapacity = batteryCapacity

self.curBatteryCap = batteryCapacity

self.oldBatteryCapacity = batteryCapacity

self.id = id

def getName(self):

return self.name

def reSet(self):

self.batteryCapacity = self.oldBatteryCapacity

self.curBatteryCap = self.oldBatteryCapacity

def getX(self):

return self.x

def getY(self):

return self.y

def pp(self):

print(self.name, self.id, '电池容量', self.batteryCapacity, '最初电量', self.oldBatteryCapacity, '加了', self.numberPlus, '次')

def getV(self):

return self.energyConsumptionRate

def plus(self):

self.numberPlus += 1

if(self.lastAct == -1):

self.batteryCapacity += self.plusOrMinus

self.lastAct = 1

# self.plusOrMinus = 1

elif(self.lastAct == 1):

self.batteryCapacity += self.plusOrMinus

self.lastAct = 1

elif(self.lastAct == 0):

self.batteryCapacity += self.plusOrMinus

self.lastAct = 1

def turnOn(self):

self.button = True

def consume(self, time, minEnergy):

self.curBatteryCap -= time * self.energyConsumptionRate

# 校验是否符合标准只要不符合标准返回一个 -1

if(not self.button):

return 0

if(self.curBatteryCap >= minEnergy):

return 1

else:

self.plus()

return -1

def charge(self, r): # r 充电速率

delt = self.batteryCapacity - self.curBatteryCap

time = delt / r

self.curBatteryCap = self.batteryCapacity

return time

def setCharge(self):

self.curBatteryCap = self.batteryCapacity

self.button = False

if __name__ == '__main__':

n = node()

draw.py

#coding=utf-8

import matplotlib.pyplot as plt

from utils import haversine

import numpy as np

import xlwt

plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

class draw:

def __init__(self):

pass

def drawRoute1(self, res, myNodes):

for i in range(len(myNodes)):

plt.figure(num=2)

plt.scatter(myNodes[i].getX(), myNodes[i].getY())

plt.annotate(myNodes[i].getName(), (myNodes[i].getX(), myNodes[i].getY()))

sumDistance = self.calcSumDistance(res, myNodes)

plt.xlabel('总路程 = ' + str(sumDistance))

self.cmdRoute(res)

plt.show()

def drawRoute3(self, res, myNodes, energy):

for i in range(len(myNodes)):

plt.figure(num=2)

plt.scatter(myNodes[i].getX(), myNodes[i].getY())

plt.annotate(myNodes[i].getName(), (myNodes[i].getX(), myNodes[i].getY()))

# 绘制线条

# 首先将一个单纯的解化成四个解

travelingSalesman = []

allDistance = []

for i in range(4):

tmp = [0]

allDistance.append(0)

travelingSalesman.append(tmp)

j = 0

for i in range(len(res)):

if (res[i] != 0):

travelingSalesman[j].append(res[i])

else:

j += 1

# 得到每一个旅行商行驶的距离

sumDistance = 0

for i in range(4):

for j in range(len(travelingSalesman[i])):

lastPoint = travelingSalesman[i][j]

if (j + 1 >= len(travelingSalesman[i])):

nextPoint = travelingSalesman[i][0]

else:

nextPoint = travelingSalesman[i][j + 1]

x1 = myNodes[lastPoint].getX()

y1 = myNodes[lastPoint].getY()

x2 = myNodes[nextPoint].getX()

y2 = myNodes[nextPoint].getY()

distance = haversine(x1, y1, x2, y2)

plt.plot([x1, x2], [y1, y2])

allDistance[i] += distance

sumDistance += distance

plt.xlabel('sumDistance=' + str(sumDistance) + 'energy=' + str(energy))

plt.show()

def calcSumDistance(self, res, myNodes):

sumDistance = 0

for i in range(len(res)):

lastPoint = res[i]

if (i + 1 >= len(res)):

nextPoint = res[0]

else:

nextPoint = res[i + 1]

x1 = myNodes[lastPoint].getX()

y1 = myNodes[lastPoint].getY()

x2 = myNodes[nextPoint].getX()

y2 = myNodes[nextPoint].getY()

plt.plot([x1, x2], [y1, y2])

sumDistance += haversine(x1, y1, x2, y2)

return sumDistance

def cmdRoute(self, result):

result2 = []

check = False

for i in range(len(result)):

if (result[i] == 0):

check = True

if (check):

result2.append(result[i])

for i in range(len(result)):

if (result[i] == 0):

check = False

if (check):

result2.append(result[i])

for i in range(len(result2)):

print(str(result2[i]) + ' -> ', end='')

print(str(result2[0])) # 一个循环

def drawY(self, drawX, drawY):

plt.figure(num=1)

plt.title('模拟退火求TSP问题收敛图')

plt.xlabel('次数')

plt.ylabel('y')

plt.plot(drawX, drawY)

plt.show()

def drawRect2(self, re, myNodes, minB):

plt.figure(num=3)

N = len(re) - 1

re = re[1:] # 去掉数据中心

index = np.arange(N)

width = 0.45

plt.bar(index, re, width, label="每个传感器的电池容量 单位(ma)", color="#90EE90")

plt.xlabel('传感器')

plt.ylabel('电池容量')

plt.title('电池容量分布图')

plt.ylim(13,18)

name = []

for i in range(1, len(myNodes)):

name.append(str(i))

plt.xticks(index, name)

plt.legend(loc="upper right")

plt.axhline(minB)

self.wr2(re, myNodes)

plt.show()

def wr2(self, re, myNodes):

# 将电池电量输入到excel文件

workbook = xlwt.Workbook(encoding='utf-8')

# 创建一个worksheet

worksheet = workbook.add_sheet('My Worksheet')

# 写入excel

# 参数对应 行, 列, 值

for i in range(len(re)):

worksheet.write(i, 0, myNodes[i+1].getName())

worksheet.write(i, 1, re[i])

# 保存

workbook.save('问题二电池电量.xls')

solution.py

#coding=utf-8

import xlrd

from node import node

from utils import haversine

import numpy as np

import math

import matplotlib.pyplot as plt

import random

class solution:

'''

暂时先不考虑约束吧

'''

def __init__(self, salesNumber):

self.minEnergy = 40

self.moveSpeed = 5 # 15000 / 3600

self.sumDistance = 0

self.myNodes = []

self.SalesManNum = salesNumber

self.minDistance = 0

self.chargeRate = 0.1 # r 0.5

self.consumeOneMeter = 0.0001

self.consumeOneMa = 1

def readFromFile(self, filename):

data = xlrd.open_workbook(filename)

table = data.sheet_by_name('Sheet1')

name = table.name

rowNum = table.nrows

colNum = table.ncols

print(name, rowNum, colNum)

for i in range(31):

if (i == 0):

continue

tmp = []

tmp.append(i)

for j in range(4):

tmp.append(table.cell(i, j).value)

if(i == 1):

tmp[4] = 0.000000001

tmp[4] = tmp[4] / 3600 # ma/s

minBatteryCapacity = self.minEnergy

n = node()

n.mySet(id = tmp[0], name = tmp[1], x = tmp[2], y = tmp[3], energyConsumptionRate = tmp[4], batteryCapacity = minBatteryCapacity ) # 每个电池的默认初始容量是100ma 容忍度是3

self.myNodes.append(n)

for i in range(len(self.myNodes)):

self.myNodes[i].pp()

return self.myNodes

def aimFunction1(self, res):

'''

res 是一个 节点序列带上 3 个 0 的序列 list

'''

# 得到每一个旅行商走过的道路

allDistance = 0

for i in range(len(res)):

lastPoint = res[i]

if (i + 1 >= len(res)):

nextPoint = res[0]

else:

nextPoint = res[i + 1]

x1 = self.myNodes[lastPoint].getX()

y1 = self.myNodes[lastPoint].getY()

x2 = self.myNodes[nextPoint].getX()

y2 = self.myNodes[nextPoint].getY()

distance = haversine(x1, y1, x2, y2)

allDistance += distance

return allDistance

def aimFunction5(self, res):

# 将res分解为4段res

result = []

tmp = [0]

for i in range(len(res)):

if(res[i] == 0):

result.append(tmp)

tmp = [0]

else:

tmp.append(res[i])

result.append(tmp)

# 计算每一个路程 消耗的时间 和 能量均衡的时候消耗的充电时间

subTime = []

subDistance = 0

for i in range(self.SalesManNum):

subTime.append(0)

for i in range(len(self.myNodes)):

self.myNodes[i].reSet()

# 从0开始的一个字符串

subTime[0]= self.solve(result[0])

subTime[1]= self.solve(result[1])

subTime[2]= self.solve(result[2])

subTime[3]= self.solve(result[3])

subTime.sort()

# 最大花瓣的时间最短 每条路径 所耗费时间 也尽可能短

return subTime[3] + subTime[0] + subTime[1] + subTime[2]

def solve(self, res):

# 计算此字符串总距离

# 新增定义行走

sumDistance = 0

for i in range(len(res)):

lastPoint = res[i]

if (i + 1 >= len(res)):

nextPoint = res[0]

else:

nextPoint = res[i + 1]

x1 = self.myNodes[lastPoint].getX()

y1 = self.myNodes[lastPoint].getY()

x2 = self.myNodes[nextPoint].getX()

y2 = self.myNodes[nextPoint].getY()

sumDistance += haversine(x1, y1, x2, y2)

T = sumDistance / self.moveSpeed

f = self.minEnergy

r = self.chargeRate

mA = []

mb = []

# 去除 DC 的影响

resul = []

for i in range(0, len(res)): # 默认res[0] = 0 的时候才能去除 影响

resul.append(res[i])

if len(resul) != 0:

for i in range(len(resul)):

tmp = []

for j in range(len(resul)):

if (i == j):

tmp.append(r / self.myNodes[resul[j]].getV())

else:

tmp.append(-1)

mA.append(tmp)

mb.append(T*r - (len(resul) - 1)*f + r / self.myNodes[resul[i]].getV() * f)

A = np.array(mA)

b = np.array(mb).T

re = np.linalg.solve(A,b) # 得到每一个的电池容量

allEnergy = sumDistance * self.consumeOneMeter

for i in range(len(resul)):

allEnergy += (re[i] - f) * self.consumeOneMa

return allEnergy

def solveFor3(self, res):

sumDistance = 0

for i in range(len(res)):

lastPoint = res[i]

if (i + 1 >= len(res)):

nextPoint = res[0]

else:

nextPoint = res[i + 1]

x1 = self.myNodes[lastPoint].getX()

y1 = self.myNodes[lastPoint].getY()

x2 = self.myNodes[nextPoint].getX()

y2 = self.myNodes[nextPoint].getY()

sumDistance += haversine(x1, y1, x2, y2)

T = sumDistance / self.moveSpeed

f = self.minEnergy

r = self.chargeRate

mA = []

mb = []

# 去除 DC 的影响 不去了

resul = []

for i in range(0, len(res)): # 默认res[0] = 0 的时候才能去除 影响

resul.append(res[i])

if len(resul) != 0:

for i in range(len(resul)):

tmp = []

for j in range(len(resul)):

if (i == j):

tmp.append(r / self.myNodes[resul[j]].getV())

else:

tmp.append(-1)

mA.append(tmp)

mb.append(T*r - (len(resul) - 1)*f + r / self.myNodes[resul[i]].getV() * f)

A = np.array(mA)

b = np.array(mb).T

re = np.linalg.solve(A,b) # 得到每一个的电池容量

return re # 对应res 的电池电量

def monituihuo(self): # 解决问题三

T = 100 # initiate temperature

oldT = 100

Tmin = 1e-8 # mininum value of temperature

# 初始化所有分布

x = self.initX()

k = 500

y = 1000000 # 初始y值

xmin = [] # 记录数据值

ymin = 1000000

# 温度衰减系数

a = 0.95

n = 500

drawX = [i for i in range(500)]

drawY = []

while n > 0 and T > 0:

n-=1

for i in range(k):

y = self.aimFunction5(x)

xNew = self.genNewResult(x)

yNew = self.aimFunction5(xNew)

if(yNew <= y):

x = xNew.copy()

y = yNew

if(yNew < ymin):

xmin = x.copy()

ymin = yNew

else:

# p = 1 / (1 + math.exp(-(yNew - y) / T))

p = math.exp(-(yNew - y) / (T))

r = np.random.uniform(low=0, high = 1)

if (r < p):

x = xNew.copy()

y = yNew

drawY.append(y)

T = T * a

print('直接输出', x, self.aimFunction5(x))

print('记录最小数值', xmin, ymin)

return xmin, ymin, drawX, drawY

def initX(self):

city_num = 29 # 不包括起始城市的序列

x = [i for i in range(1, city_num+1)]

random.shuffle(x)

if (self.SalesManNum == 1):

x.insert(random.randint(0, len(x)), 0)

elif(self.SalesManNum == 4):

x.insert(random.randint(0, len(x)), 0)

x.insert(random.randint(0, len(x)), 0)

x.insert(random.randint(0, len(x)), 0)

print('初始路线', x)

return x

def genNewResult(self, res):

'''

res 就是 X 的值 T 温度越高产生翻转的概率越大 oldT 原本最大温度

'''

r = res.copy()

x = np.random.uniform(low= 0 , high= 1)

if x >= 0 and x < 0.4: # 使用交换法生成新的路径

# print('交换')

c1 = random.randint(0, len(r)-1)

c2 = random.randint(0, len(r)-1)

tmp = r[c1]

r[c1] = r[c2]

r[c2] = tmp

elif x >= 0.4 and x < 0.7: # 使用移动序列产生新路径

# print('移动')

c1 = random.randint(0, len(r) - 1)

c2 = random.randint(0, len(r) - 1)

c3 = random.randint(0, len(r) - 1)

tmp = [c1, c2, c3]

tmp.sort()

c1 = tmp[0]

c2 = tmp[1]

c3 = tmp[2]

tmp1 = r[0:c1]

tmp2 = r[c1:c2]

tmp3 = r[c2:c3]

tmp4 = r[c3:]

r = tmp1 + tmp3 + tmp2 + tmp4

else:

# print('倒置')

c1 = random.randint(0, len(r) - 1)

c2 = random.randint(0, len(r) - 1)

if c1 > c2:

tmp = c1

c1 = c2

c2 = tmp

tmp1 = r[0:c1]

tmp2 = r[c1:c2]

tmp3 = r[c2:]

tmp2.reverse()

r = tmp1 + tmp2 + tmp3

return r

def solutionForSubjectOne(self):

T = 100 # initiate temperature

# 初始化所有分布

x = self.initX()

k = 500

y = 1000000 # 初始y值

xmin = [] # 记录数据值

ymin = 1000000

# 温度衰减系数

a = 0.95

# 绘图

drawX = [i for i in range(500)]

drawY = []

n = 500

while n > 0:

n-=1

for i in range(k):

y = self.aimFunction1(x)

# generate a new x in the neighboorhood of x by transform function ()

xNew = self.genNewResult(x)

yNew = self.aimFunction1(xNew)

if (yNew <= y):

x = xNew.copy()

y = yNew

if (yNew < ymin):

xmin = x.copy()

ymin = yNew

else:

p = math.exp(-(yNew - y) / T)

r = np.random.uniform(low=0, high=1)

if (r < p):

x = xNew.copy()

y = yNew

drawY.append(y)

T = T * a

print('直接输出', x, self.aimFunction1(x))

print('记录最小数值', xmin, ymin)

return xmin, drawX, drawY

def solutionForSubjectTwo(self, res):

# 计算此字符串总距离

# 新增定义行走

sumDistance = 0

for i in range(len(res)):

lastPoint = res[i]

if (i + 1 >= len(res)):

nextPoint = res[0]

else:

nextPoint = res[i + 1]

x1 = self.myNodes[lastPoint].getX()

y1 = self.myNodes[lastPoint].getY()

x2 = self.myNodes[nextPoint].getX()

y2 = self.myNodes[nextPoint].getY()

sumDistance += haversine(x1, y1, x2, y2)

T = sumDistance / self.moveSpeed

res.sort() # 当这个正序 生成的结果电量也是正序的

f = self.minEnergy

r = self.chargeRate

mA = []

mb = []

# 去除 DC 的影响

resul = []

for i in range(0, len(res)): # 默认res[0] = 0 的时候才能去除 不去除了

resul.append(res[i])

if len(resul) != 0:

for i in range(len(resul)):

tmp = []

for j in range(len(resul)):

if (i == j):

tmp.append(r / self.myNodes[resul[j]].getV())

else:

tmp.append(-1)

mA.append(tmp)

mb.append(T*r - (len(resul) - 1)*f + r / self.myNodes[resul[i]].getV() * f)

A = np.array(mA)

b = np.array(mb).T

re = np.linalg.solve(A,b) # 得到每一个的电池容量

return re

def setScheme(self, minEnergy = 15, moveSpeed = 10, chargeRate = 20):

self.minEnergy = minEnergy

self.moveSpeed = moveSpeed

self.chargeRate = chargeRate

def setCoef(self, consumeOneMeter = 0.0001, consumeOneMa = 1):

self.consumeOneMeter = consumeOneMeter

self.consumeOneMa = consumeOneMa

深圳杯数学建模2020c题_模拟退火解 深圳杯2020C题相关推荐

  1. 华为杯数学建模优秀论文_【优秀论文】2019数维杯国际大学生数学建模竞赛B题优秀论文...

    推荐入群 2020数维杯国际赛参赛群13 2020数维杯国际大学生数学建模竞赛于2020年11月26日08:00(周四)-11月30日08:00(周一)进行,报名正在火热进行中,扫码了解详情或可直接报 ...

  2. 华为杯数学建模优秀论文_数学建模经典例题(2011年国赛A题与优秀论文)

    数学建模经典例题 (更多往期经典例题可点击文章最后相关推荐哦) 试题中的附件1.2和3请点击"阅读原文"查看 相关推荐数学建模经典例题(2000年国赛A题与优秀论文)数学建模经典例 ...

  3. 华为杯数学建模优秀论文_数学建模经典例题(2016年国赛B题与优秀论文)

    数学建模经典例题 (更多往期经典例题可点击文章最后相关推荐哦) 相关推荐 数学建模经典例题(2000年国赛B题与解题思路) 数学建模经典例题(2001年国赛A题与优秀论文) 数学建模经典例题(2001 ...

  4. 华为杯数学建模优秀论文_数学建模经典例题(2013年国赛A题与优秀论文)

    数学建模经典例题 (更多往期经典例题可点击文章最后相关推荐哦) 相关推荐 数学建模经典例题(2000年国赛B题与解题思路) 数学建模经典例题(2001年国赛A题与优秀论文) 数学建模经典例题(2001 ...

  5. 2020年“深圳杯”数学建模挑战赛D题-公交车在高峰和平峰转换期间的调度 题解

    部分结果展示 2020年"深圳杯"数学建模挑战赛D题-公交车在高峰和平峰转换期间的调度 题解思路 原题地址 一.背景 公交车是为市民出行提供服务的"准公共"产品 ...

  6. 2022年深圳杯数学建模D题复杂水平井三维轨道设计解题全过程文档及程序

    2022年深圳杯数学建模 D题 复杂水平井三维轨道设计 原题再现:   在油气田开采过程中,井眼轨迹直接影响着整个钻井整体效率.对于复杂水平井,较差的井眼轨迹很可能会造成卡钻或施加钻压困难等重大事故的 ...

  7. Python小白的数学建模课-A2.2021年数维杯C题(运动会优化比赛模式探索)探讨

    关注收藏,国赛再会. 运动会优化比赛模式问题,是公平分配问题. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达人. 2021第六届数维杯大学生数学建模 赛题已于5月27日 ...

  8. 2021年数维杯数学建模A题外卖骑手的送餐危机求解全过程文档及程序

    2021年数维杯数学建模 A题 外卖骑手的送餐危机 原题再现:   外卖业务已经成为了大城市上班族每日生活中不可或缺的一部分.根据美团2020年6月发布的<2019中国即时配送行业发展报告> ...

  9. 【比赛总结】从编程位队长的角度看待第十三届华中杯数学建模比赛A题

    前言 有幸以编程位和队长的身份大一就参加了一次数学建模比赛,这次比赛是"华中杯",所以第一次打还是比较有新鲜感和有很多收获的,故记于此. 因为--在前期找指导老师的时候一说是大一的 ...

最新文章

  1. 滴滴联合比亚迪:首款定制网约车D1发布
  2. ASP.Net中自定义Http处理及应用之HttpHandler篇
  3. 类的大小,虚函数,继承
  4. java什么是稳定排序,这可能是你听说过最快的稳定排序算法
  5. mysql 过程 的函数的区别是什么意思_Mysql中存储过程和函数的区别是什么
  6. linux 几个文件夹作用,linux下每一个文件夹的作用.docx
  7. 跳转指令微型计算机,哪种类型的汇编程序跳转指令最有用?
  8. LeetCode - Combinations
  9. Dubbo面试 - dubbo的工作原理
  10. 机器学习集成模型学习——投票集成Voting(二)
  11. 张大奕网店关联公司被行政处罚:因以不合格产品冒充合格产品
  12. 【线程安全的List】CopyOnWriteArrayList的原理及使用
  13. Win7下使用toad连接oracle出现can't initialize OCI -1
  14. Python tkinter的text控件加滚动条
  15. java高性能反射框架_终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南可太强了...
  16. TCP三次握手四次挥手介绍
  17. 网易云音乐 linux x32,网易云音乐 for Mac
  18. hⅰgh怎么读音发音英语_英语发音规则---gh
  19. 《孤尽班T31-04-工程结构规约》
  20. java-net-php-python-23jspm在线学习设计计算机毕业设计程序

热门文章

  1. Matlab实现粒子群算法(附上完整仿真代码)
  2. C++多态与虚函数的实现
  3. 如何在Office中写英语音标
  4. linux sd卡启动盘制作工具,使用Etcher来创建可启动盘(可引导的USB盘或SD卡)的方法...
  5. 排序 js版(冒泡、快排、归并、选择、插入、希尔、堆)
  6. 张侃:网络优化需实现五大转变
  7. ewma 指数加权平均
  8. 5G工业互联网应用(1)——闭环控制
  9. OKR 与 KPI有何异同?各部门OKR实例【小bu】
  10. 自己登记软件著作权怎么申请