车辆路径问题

2023-11-10

#车辆路径问题
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
利用Python和Gurobi求解VRPSPDTW
考虑需求动态变化的共享单车调度问题研究


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档



提示:以下是本篇文章正文内容,下面案例可供参考

一、模型的建立

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、使用步骤

1.Gurobi代码

代码如下(示例):

import sys 
import math 
import os 
import json 
import random 
from itertools import permutations 
import gurobipy as gp 
from gurobipy import GRB 
import itertools 
import pandas as pd 
 
# 定义基本数据 
data = {} 
data['distance_matrix'] = [[0, 548, 776, 696, 582, 274, 502, 194, 308, 194], 
                            [548, 0, 684, 308, 194, 502, 730, 354, 696, 742], 
                            [776, 684, 0, 992, 878, 502, 274, 810, 468, 742], 
                            [696, 308, 992, 0, 114, 650, 878, 502, 844, 890], 
                            [582, 194, 878, 114, 0, 536, 764, 388, 730, 776], 
                            [274, 502, 502, 650, 536, 0, 228, 308, 194, 240], 
                            [502, 730, 274, 878, 764, 228, 0, 536, 194, 468], 
                            [194, 354, 810, 502, 388, 308, 536, 0, 342, 388], 
                            [308, 696, 468, 844, 730, 194, 194, 342, 0, 274], 
                            [194, 742, 742, 890, 776, 240, 468, 388, 274, 0],] 
data['depot'] = 0 
data['demands'] = [0, 5, -5, 10, -20, -10, -20, 40, -40, 5] 
data['vehicle_capacities'] = [15,] 
T = 3 
distList = data['distance_matrix'] 
Q = data['demands'] 
capacities = data['vehicle_capacities'] 
capacity = capacities[0] 
n = len(distList) 
dist = {(i, j): distList[i][j] for i in range(n) for j in range(n)} 
# 建立模型和添加变量 
m = gp.Model() 
x = m.addVars(dist.keys(), obj=dist, vtype=GRB.BINARY, name='e') u = m.addVars(n, ub=capacity, name='u') 
t = m.addVars(n, ub=T, name='t') 
# 添加约束条件 
# 装载量 
pairs = [(i, j) for i in range(n) for j in range(1, n) if i != j] 
for (i,j) in pairs: 
    if Q[j]>0: 
        m.addConstr(u[j]*x[i,j] == x[i,j]*((Q[j]/T)*t[j] + u[i])) 
    else: 
        m.addConstr(u[j]*x[i,j] == x[i,j]*(Q[j]-(Q[j]/T)*t[j] + u[i])) 
u[0].LB = 0 
u[0].UB = 0 
# 时间窗 
for (i,j) in pairs: 
    m.addConstr(t[j] >= (dist[i,j]/750)+t[i]-(1-x[i, j])*T) 
t[0].LB = 0 
t[0].UB = 0 
# 进出平衡 
m.addConstrs(x.sum(i, '*') == x.sum('*',i) for i in range(n)) 
# 不出现自己到自己的情况 
m.addConstrs(x[i,i] == 0 for i in range(n)) 
# 所有点最多被访问一次 
m.addConstrs(x.sum(i, '*') <= 1 for i in range(1, n)) 
m.addConstrs(x.sum('*', i) <= 1 for i in range(1, n)) 
AllNodesVisited={i: gp.quicksum(x[j,i] for j in range(n) if i!=j) for i in range(1,n)} # (2.2) 
m.addConstrs(AllNodesVisited[i]<=1 for i in range(1,n)) 
# 至少有1辆调度车进行调度 
m.addConstr(x.sum(0, '*') >= 1) 
m.addConstr(x.sum('*', 0) >= 1) 
# 设置目标函数 
total_satisfied = gp.quicksum((u[i]-u[j])*x[i,j] for j in [2,4,5,6,8] for i in range(n)) 
total_unzero = gp.quicksum(Q[i] for i in [2,4,5,6,8]) 
total_distri = gp.quicksum(u[i] for i in range(n)) 
total_time = gp.quicksum(t[i] for i in range(n)) 
totaldist = gp.quicksum(x[i,j]*dist[i,j] for i in range(n) for j in range(n)) 
m.setObjective(totaldist*0.01+(x.sum(0,'*')*40)+(-total_satisfied-total_unzero)*15,GRB.MINIMIZ
E) 
# 结果计算 
m.optimize()

2.遗传算法代码

代码如下(示例):

附录 C 
89 
distance.append(calDist(dataDict['NodeCoor'][eachRoute[j-1]],dataDict['NodeCoor'][eachRoute[j]])) 
        #distance_of_all_point.append(distance(y[len(y)-1],start_point_0)) 
        all_route_distance.append(distance) 
        for z in range(len(distance)): 
            route_time.append(distance[z]/dataDict['Velocity']) 
            arrive_time = list(np.cumsum(route_time)) 
        for m in range(len(arrive_time)): 
            if arrive_time[m] > dataDict['TimeWindow']: 
                arrive_time[m] = np.nan 
        all_arrive_time.append(arrive_time) 
        for p in range(len(arrive_time)-1): 
            if np.isnan(arrive_time[p]): 
                scheduling_requirements.append(np.nan) 
            else: 
                if 
dataDict['InitialValue'][eachRoute[p+1]]+dataDict['DemandRate'][eachRoute[p+1]]*arrive_time[p]>
0: 
                    if dataDict['DemandRate'][eachRoute[p+1]]>0: 
                        
scheduling_requirements.append(dataDict['InitialValue'][eachRoute[p+1]]+dataDict['DemandRate'][
eachRoute[p+1]]*arrive_time[p]) 
                    else: 
                        
scheduling_requirements.append(dataDict['InitialValue'][eachRoute[p+1]]+dataDict['DemandRate'][
eachRoute[p+1]]*arrive_time[p]+(1-arrive_time[p])*dataDict['DemandRate'][eachRoute[p+1]]) 
                else: 
                    
scheduling_requirements.append((1-arrive_time[p])*dataDict['DemandRate'][eachRoute[p+1]]) 
        for t in range(len(scheduling_requirements)): 
            if not np.isnan(scheduling_requirements[t]): 
                scheduling_requirements[t] = round(scheduling_requirements[t]) 
        #scheduling_requirements = [round(u) for u in scheduling_requirements] 
        all_route_scheduling_quantity.append(scheduling_requirements) 
    return all_route_distance,all_arrive_time,all_route_scheduling_quantity 
 
# 调度车离开各区域时的装载量 
def all_truck_loading_leave(routes,dataDict=dataDict): 
    all_truck_loading_leave = [] 
    arriveTime = quantityDistanceArriveTime(routes)[2] 
    for t in range(len(arriveTime)): 
        truck_loading = [] 
        if np.isnan(arriveTime[t][0]): 87 
        
import numpy as np 
import matplotlib.pyplot as plt 
from deap import base, tools, creator, algorithms 
import random 
import pandas as pd 
 
params = { 
    'font.family': 'serif', 
    'figure.dpi': 300, 
    'savefig.dpi': 300, 
    'font.size': 12, 
    'legend.fontsize': 'small' 
} 
plt.rcParams.update(params) 
from copy import deepcopy 
# 问题定义 
creator.create('FitnessMin', base.Fitness, weights=(-1.0,)) # 最小化问题 
# 给个体一个routes属性用来记录其表示的路线 
creator.create('Individual', list, fitness=creator.FitnessMin)  
# 用字典存储参数 
dataDict = {} 
# 节点坐标,节点0是配送中心的坐标 
dataDict['NodeCoor']=pd.read_excel('cluster_center_2hour.xlsx',sheet_name='Sheet1')['number'].toli
st() 
# 将配送中心的需求设置为0 
dataDict['Demand'] = pd.read_excel('cluster_center_2hour.xlsx',sheet_name='Sheet1')['需求'].tolist() 
dataDict['MaxLoad'] = 20 
#dataDict['ServiceTime'] = 1/150 
dataDict['DemandRate']=[x/2 for x in 
pd.read_excel('cluster_center_2hour.xlsx',sheet_name='Sheet1')['需求'].tolist()] 
dataDict['Velocity'] = 20 
dataDict['InitialValue'] = pd.read_excel('cluster_center_2hour.xlsx',sheet_name='Sheet1')['初始车辆
(round)'].tolist()  
dataDict['TimeWindow'] = 2 
dataDict['SetUpCost'] = 80 
dataDict['RunningCost'] = 2  
    for m in range(len(begin)): 
        real_number_of_dispatch = list(map(lambda x: x[0]-x[1], zip(leave[m], begin[m]))) 
        all_real_number_of_dispatch.append(real_number_of_dispatch) 
    return all_real_number_of_dispatch 
 
# 实际调入量的总数 
def all_real_number_of_dispatch_sum(routes): 
    a = all_real_number_of_dispatch(routes) 
    for i in a: 
        for z in range(len(i)): 
            if np.isnan(i[z]): 
                i[z] = 0 
            else: 
                if i[z] > 0: 
                    i[z] = 0 
    all_real_number_of_dispatch_sum = [sum(i) for i in a] 
    return all_real_number_of_dispatch_sum 
 
# 未满足的单车需求量 
def all_unsatisfied(routes): 
    allUnsatisfied = [] 
    a = all_real_number_of_dispatch(routes) 
     
    routesNum = [] 
    for _ in routes: 
        x = [] 
        for b in _: 
            if b != 0: 
                x.append(b) 
        routesNum.append(x) 
     
    routesDemand = [] 
    for c in routesNum: 
        y = [] 
        for d in c: 
            y.append(total_demand[d]) 
        routesDemand.append(y) 
     
    for i in range(len(a)): 
        for k in range(len(a[i])): 
            if np.isnan(a[i][k]): 
                a[i][k] = 0 
            truck_loading.append(np.nan) 
        else: 
            if arriveTime[t][0]<0: 
                truck_loading.append(0) 
            else: 
                if arriveTime[t][0]>dataDict['MaxLoad']: 
                    truck_loading.append(dataDict['MaxLoad']) 
                else: 
                    truck_loading.append(arriveTime[t][0]) 
        if len(arriveTime[t]) == 1: 
            all_truck_loading_leave.append(truck_loading) 
        else:   
            for i in range(len(arriveTime[t])-1): 
                if np.isnan(arriveTime[t][i+1]): 
                    truck_loading.append(np.nan) 
                else: 
                    if truck_loading[i]+arriveTime[t][i+1]<0: 
                        truck_loading.append(0) 
                    else: 
                        if truck_loading[i]+arriveTime[t][i+1]<dataDict['MaxLoad']: 
                            truck_loading.append(truck_loading[i]+arriveTime[t][i+1]) 
                        else: 
                            truck_loading.append(dataDict['MaxLoad']) 
            all_truck_loading_leave.append(truck_loading) 
    return all_truck_loading_leave 
 
# 调度车到达各区域时的装载量 
def all_truck_loading_begin(routes): 
    all_truck_loading_begin = [] 
    leave = all_truck_loading_leave(routes) 
    for r in leave: 
        v = r[:] 
        v.insert(0,0) 
        f = v[0:-1] 
        all_truck_loading_begin.append(f) 
    return all_truck_loading_begin 
 
# 实际各区域的调度量 
def all_real_number_of_dispatch(routes): 
    all_real_number_of_dispatch = [] 
    leave = all_truck_loading_leave(routes) 
    begin = all_truck_loading_begin(routes) 
    
dataDict['PenaltyCost'] = 4 
line = pd.read_csv('distance.csv')['line'].tolist() 
distance_km = pd.read_csv('distance.csv')['distance(km)'].tolist() 
distance_value = dict(zip(line,distance_km)) 
 
#生成个体 
def genInd(dataDict = dataDict): 
    n Customer = len(dataDict['NodeCoor']) - 1 # 顾客数量 
    perm = np.random.permutation(nCustomer) + 1 # 生成顾客的随机排列,注意顾客编号为1--n 
    permSlice = [] 
    a = random.sample([i+1 for i in range(len(perm)-1)],np.random.randint(1,len(perm))) 
    a.sort() 
    routePoint = [0]+a+[len(perm)] 
    for i,j in zip(routePoint[0::], routePoint[1::]): 
        permSlice.append(perm[i:j].tolist()) 
    # 将路线片段合并为染色体 
    ind = [0] 
    for eachRoute in permSlice: 
        ind = ind + eachRoute + [0] 
    return ind 
 
# 染色体解码 
def decodeInd(ind): 
    indCopy = np.array(deepcopy(ind))  
    idxList = list(range(len(indCopy))) 
    zeroIdx = np.asarray(idxList)[indCopy == 0] 
    routes = [] 
    for i,j in zip(zeroIdx[0::], zeroIdx[1::]): 
        routes.append(ind[i:j]+[0]) 
    return routes 
 
# 求得路径长度,到达区域时间和到达每个区域的调度需求 
def quantityDistanceArriveTime(routes,dataDict=dataDict): 
    all_route_scheduling_quantity = [] 
    all_route_distance = [] 
    all_arrive_time = [] 
    for eachRoute in routes: 
        distance = [] 
        route_time = [] 
        scheduling_requirements = [] 
        for j in range(1,len(eachRoute)): 
           
        totalDistance = 0 
        if np.nan in quantityDistanceArriveTime([eachRoute])[1][0]: 
            eachRoute = 
eachRoute[0:quantityDistanceArriveTime([eachRoute])[1][0].index(np.nan)+1]+[0] 
        else: 
            eachRoute = eachRoute 
        for i,j in zip(eachRoute[0::], eachRoute[1::]): 
            totalDistance += calDist(dataDict['NodeCoor'][i], dataDict['NodeCoor'][j])   
        AllDistance.append(totalDistance) 
    return sum(AllDistance),np.var(AllDistance) 
 
# 评价函数 
def evaluate(ind): 
    routes = decodeInd(ind) 
    totalDistanceCost = calRouteLen(routes)[0]*dataDict['RunningCost'] 
    totalSetUpCost = len(routes)*dataDict['SetUpCost'] 
    return (totalDistanceCost + 
loadPenalty(routes)*dataDict['PenaltyCost']+totalSetUpCost),#+calRouteLen(routes)[1]*5), 
 
# 交叉 
def genChild(ind1, ind2, nTrail=5,dataDict=dataDict): 
    routes1 = decodeInd(ind1)  
    numSubroute1 = len(routes1)  
    subroute1 = routes1[np.random.randint(0, numSubroute1)] 
    unvisited = set(ind1) - set(subroute1) 
    unvisitedPerm = [digit for digit in ind2 if digit in unvisited] 
    bestRoute = None 
    bestFit = np.inf 
    if numSubroute1 < 3: 
        breakSubroute = [] 
        breakSubroute.append([0]+unvisitedPerm+[0]) 
        breakSubroute.append(subroute1) 
        routesFit = 
cal RouteLen(breakSubroute)[0]*dataDict['RunningCost']+loadPenalty(breakSubroute)*dataDict['Pe
naltyCost']+len(breakSubroute)*dataDict['SetUpCost']#+calRouteLen(breakSubroute)[1]*5 
        if routesFit < bestFit: 
            bestRoute = breakSubroute 
            bestFit = routesFit 
    else: 
        for _ in range(nTrail): 
            breakPos = [0]+random.sample(range(1,len(unvisitedPerm)),numSubroute1-2) 
            breakPos.sort() 
             
        not_satisfied = list(map(lambda x: x[0]-x[1], zip(routesDemand[i], a[i]))) 
        for j in range(len(not_satisfied)): 
            if not_satisfied[j] > 0: 
                not_satisfied[j] = 0 
        cost = sum(not_satisfied) 
        allUnsatisfied.append(cost) 
    return allUnsatisfied 
 
# 各区域的总调度需求 
def total_demand(dataDict=dataDict): 
    totalDemand = [] 
    for i in range(len(dataDict['Demand'])): 
        totalDemand.append(dataDict['InitialValue'][i]+dataDict['Demand'][i]) 
    return totalDemand 
 
# 各需求点之间的距离 
def calDist(pos1, pos2): 
    num1 = dataDict['NodeCoor'].index(pos1) 
    num2 = dataDict['NodeCoor'].index(pos2) 
    distance = distance_value.get("({}, {})".format(num1,num2)) 
    return distance 
 
# 各区域未满足量 
def loadPenalty(routes): 
    penalty = 0 
    penalty = abs(sum(all_unsatisfied(routes))) 
    return penalty 
 
# 到达各区域的时间 
def calArriveTime(route, dataDict = dataDict): 
    arrivalTime = 0 
    arrivalTimeList = [] 
    for i in range(0, len(route)-2): 
        arrivalTime += calDist(dataDict['NodeCoor'][route[i]], 
dataDict['NodeCoor'][route[i+1]])/dataDict['Velocity'] 
        arrivalTimeList.append(arrivalTime) 
    return arrivalTime,arrivalTimeList 
 
# 路径总距离计算 
def calRouteLen(routes,dataDict=dataDict): 
    AllDistance = [] 
    for eachRoute in routes: 
            breakSubroute = [] 
            for u,v in zip(breakPos[0::], breakPos[1::]): 
                breakSubroute.append([0]+unvisitedPerm[u:v]+[0]) 
            breakSubroute.append([0]+unvisitedPerm[v:]+[0]) 
            breakSubroute.append(subroute1) 
            routesFit = 
calRouteLen(breakSubroute)[0]*dataDict['RunningCost']+loadPenalty(breakSubroute)*dataDict['Pe
naltyCost']+len(breakSubroute)*dataDict['SetUpCost']#+calRouteLen(breakSubroute)[1]*5 
            if routesFit < bestFit: 
                bestRoute = breakSubroute 
                bestFit = routesFit 
    child = [] 
    for eachRoute in bestRoute: 
        child += eachRoute[:-1] 
    return child+[0] 
def crossover(ind1, ind2): 
    ''交叉操作''' 
    ind1[:], ind2[:] = genChild(ind1, ind2), genChild(ind2, ind1) 
    return ind1, ind2 
 
# 变异 
def opt(route,dataDict=dataDict, k=2): 
    n Cities = len(route) 
    optimizedRoute = route  
    min Distance = 
calRouteLen([route])[0]*dataDict['RunningCost']+loadPenalty([route])*dataDict['PenaltyCost']  
    for i in range(1,nCities-2): 
        for j in range(i+k, nCities): 
            if j-i == 1: 
                continue 
            reversedRoute = route[:i]+route[i:j][::-1]+route[j:]  
            reversedRouteDist = 
calRouteLen([reversedRoute])[0]*dataDict['RunningCost']+loadPenalty([reversedRoute])*dataDict['
PenaltyCost'] 
            if  reversedRouteDist < minDistance: 
                min Distance = reversedRouteDist 
                optimizedRoute = reversedRoute 
    return optimizedRoute 
def mutate(ind): 
    routes = decodeInd(ind) 
    optimizedAssembly = [] 
    for eachRoute in routes: 附录 C 
95 
        optimizedRoute = opt(eachRoute) 
        optimizedAssembly.append(optimizedRoute) 
    child = [] 
    for eachRoute in optimizedAssembly: 
        child += eachRoute[:-1] 
    ind[:] = child+[0] 
    return ind, 
 
total_demand = total_demand() 
# 注册遗传算法操作 
toolbox = base.Toolbox() 
toolbox.register('individual', tools.initIterate, creator.Individual, genInd) 
toolbox.register('population', tools.initRepeat, list, toolbox.individual) 
toolbox.register('evaluate', evaluate) 
toolbox.register('select', tools.selTournament, tournsize=2) 
toolbox.register('mate', crossover) 
toolbox.register('mutate', mutate) 
# 生成初始族群 
toolbox.popSize = 200 
pop = toolbox.population(toolbox.popSize) 
# 记录迭代数据 
stats=tools.Statistics(key=lambda ind: ind.fitness.values) 
stats.register('min', np.min) 
stats.register('avg', np.mean) 
stats.register('std', np.std) 
hallOfFame = tools.HallOfFame(maxsize=1) 
# 遗传算法参数 
toolbox.ngen = 200 
toolbox.cxpb = 0.8 
toolbox.mutpb = 0.1 
 
# 算法主程序 
pop,logbook=algorithms.eaMuPlusLambda(pop, toolbox, mu=toolbox.popSize,  
                                      lambda_=toolbox.popSize,cxpb=toolbox.cxpb, 
mutpb=toolbox.mutpb, ngen=toolbox.ngen ,stats=stats, halloffame=hallOfFame, verbose=True) 
 
 
 
 
 
 
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

车辆路径问题 的相关文章

随机推荐

  • 微信小程序源码开发:app.js错误:typerror:typeof3 is not a function

    修改一下 babel runtime helpers typeof js function typeof2 o babel helpers typeof return typeof2 function typeof Symbol symbo
  • 技术人员的赚钱之道-7:“穷人”与“富人”定义的新认知

    1 自由的层次 思想自由 可以自由的表达自己的思想 人身自由 可以自由的行动 大多数工薪阶层其实并没有达到人身的自由 每个8个小时被限制在 公司 这个 圈子 内 时间自由 可以在任意时间内做自己想做的事情 大多数工薪阶层其实并没有达到时间的
  • GVIM的默认初试界面大小、启动位置设置

    打开GVIM安装目录下的 vimrc文件 在其中添加配置内容 winpos 100 100 设置初始界面位置 set lines 25 columns 85 设置初始界面大小 若要设置代码折叠功能 用空格键控制折叠开关 set folden
  • 微信小程序中修改data中某复杂对象的某个属性

    例如 data person name 小明 age 18 weight 188 date 2021 09 06 title 这是一个标题 在微信小程序中修改上述data中的 date 或 title属性 可以直接 使用如下操作 this
  • MethodHandle(方法句柄)

    MethodHandle 方法句柄 系列之一 MethodHandle和MethodType 阅读此文章的作者建议先了解java反射和动态代理 java7中为间接调用方法引入了新的api 其中最关键的是java lang invoke包 即
  • ELK简介以及安装部署

    ELK近实时日志分析搜索系统 ELK简介 ELK 是 Elasticsearch Logstash Kibana 三大开源框架的首字母大写简称 市面上也被称为Elastic Stack 其中 Elasticsearch 是一个基于Lucen
  • shell编程——Shell多重判断及优化

    多重判断语法elif else if 只能选1 if 条件1 then 命令 条件1成立执行 elif 条件2 then 命令 条件1不成立 条件2成立执行 elif 条件3 then 命令 条件1不成立 条件2不成立 条件3成立执行 el
  • Android——自定义LinearLayout自动换行,TextView垂直排列。

    自定义线性布局在xml中自定换行 比如你在项目中用到LinearLayout 设置水平排列android orientation horizontal 包裹button或者是TextView 但是不同分辨率的手机 不知道一行能放多少个But
  • 【开发规范】持续更新中......

    目录 一 编码规范 接口规范 命名规范 并发处理 常量定义 集合处理 控制语句 事务规范 其他规范 二 异常日志 日志规范 异常规范 三 工程规约 服务器规约 二方库规约 四 MySQL数据库规范 建表规范 索引规范 SQL语句 五 安全规
  • HBuilder云打包ios证书申请流程

    我们在hbuilderx打ios正式包的时候 需要私钥证书p12文件 和描述文件mobileprovision文件 但是生成这两个工具需要使用mac电脑 这对于我们使用windows电脑的同学们望而却步 幸好 我们中国有在线的生成ios证书
  • TypeScript声明全局类型

    背景 定义TS类型声明文件xxx d ts 文件中的类型 在外部文件使用时 理论上不需要引入文件 直接使用就行 而自定义的api d ts中的类型无法在外部使用 第一次api d ts定义方式 api d ts文件 export inter
  • 安装配置MySQL数据库服务器-多版本(简单详细,一学就会)

    目录 引言 一 5 6 51数据库服务器下载 二 8 1 0最新版数据库服务器下载 引言 个人认为MySQl数据库目前推荐的两个版本系列为5 6 51和8 系列 至于我们为什么要下载两个版本呢 是因为官方在数据库下载的结构上有所改变 5 系
  • VS2019 C++ 学习笔记三(列表框和组合框)

    一 新建一个工程 二 增加组合框和列表框 三 更改组合框和列表框的ID ID分别为 IDC COMBO COMM IDC LIST DEMO IDC EDIT INPUT 四 给列表框添加变量
  • Centos7挂载2T以下及2T以上硬盘

    一 挂载2T以下的硬盘 1 列出所有已挂载磁盘 df h 2 查看磁盘信息 从上图可以看到有一块600多g的硬盘没有挂载 dev sdb 3 硬盘分区 使用fdisk工具对磁盘分区 fdisk dev sdb 依次输入 n p 1 回车 回
  • Spring自动装配byName和byType的区别

    文章目录 前言 一 byName 二 byType 1 Class类型 2 Autowired 总结 前言 开发的时候一直用 Autowired和 Resource注解实现自动装配 但是一直不明白byType这个装配方式是什么 研究才明白这
  • 校园网如何用路由器开WiFi

    本文虽不是首创 但也可以说是全网最清楚有效的教程 本文主要针对非网络专业学生而写 因此写得会非常详细 第一步 首先准备一台电脑 一部手机 手机安装掌上大学 各个地域说法不一样 用你们能登上宽带账号的那个软件 手机的作用是登录账号 电脑的作用
  • 移植Qt5.6

    交叉编译工具 arm linux gcc 4 4 3内核 linux 4 12 0 使用移植linux 4 12到JZ2440里的linux 4 12 按照2 4 制作补丁内容获取内核 补丁下载地址 https pan baidu com
  • svn密码工具

    前言 忘记svn密码了 怎么办 下载工具运行 下载 官方地址http www leapbeyond com ric TSvnPD 教程 1 点击下载包 2 下载下来是这个 3 双击运行 到此结束
  • 【STM32】定时器中断原理及操作

    目录 时钟的选择及分频 定时器中断有关的寄存器 定时器中断有关的库函数 1 时钟使能函数 RCC APB1PeriphClockCmd 2 定时器初始化函数 TIM TimeBaseInit 3 定时器中断使能 选择函数 TIM ITCon
  • 车辆路径问题

    车辆路径问题 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 利用Python和Gurobi求解VRPSPDTW 考虑需求动态变化的共享单车调度问题研究 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文