【建模算法】基于蚁群算法求解TSP问题(Python实现)

26 篇文章 56 订阅
订阅专栏

【建模算法】基于蚁群算法(ACA)求解TSP问题(Python实现)

TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长,到目前为止还未找到一个多项式时间的有效算法。本文探讨了基于蚁群算法求解TSP问题的Python实现。

一、问题描述

​ 本案例以31个城市为例,假定31个城市的位置坐标如表1所列。寻找出一条最短的遍历31个城市的路径。

城市编号X坐标Y坐标城市编号X坐标Y坐标
11.3042.312173.9182.179
23.6391.315184.0612.37
34.1772.244193.782.212
43.7121.399203.6762.578
53.4881.535214.0292.838
63.3261.556224.2632.931
73.2381.229233.4291.908
84.1961.044243.5072.376
94.3120.79253.3942.643
104.3860.57263.4393.201
113.0071.97272.9353.24
122.5621.756283.143.55
132.7881.491292.5452.357
142.3811.676302.7782.826
151.3320.695312.372.975
163.7151.678

二、蚁群算法简介

2.1 蚁群算法基本原理

1、蚂蚁在行走过程中会依据信息素来选择道路,选择信息素较浓的路走,并且在行走的路径中会释放信息素,对于所有蚂蚁都没经过的路,则随机选择一条路走;
2、蚂蚁释放的信息素浓度与长度相关,通常与路径长度成反比;
3、信息素浓的路径会受到蚂蚁更大概率的选择,形成正向反馈,最短路径上的信息素浓度会越来越大,最终蚁群就都按这条最短路径走。

信息素计算公式、转移概率、信息素重要程度因子、启发函数重要程度因子、信息素挥发因子等详细介绍可参考" 蚁群算法详细讲解"和“ TSP解决之道——蚁群算法”

2.2 算法的两个关键步骤

1、选择:为蚂蚁选择下一个城市,信息素越多的路径被选中概率较大,可用轮盘赌算法实现;
2、信息素更新:一段时间后(蚂蚁走完一个城市或者走完整个路径后)重新计算信息素(计算方法:历史累计信息素-信息素挥发量+蚂蚁行走释放量),蚂蚁行走释放量的常见方法有三种:蚁周算法(ant-cycle,蚂蚁走完整个路径后,蚂蚁行走释放部分用Q/L计算,Q表示蚂蚁释放信息素的量,为常量,L表示路径总长度)、蚁密算法(ant-density,蚂蚁走完一个城市后,蚂蚁行走释放用Q表示)、蚁量算法(ant-quantity,蚂蚁走完一个城市后,蚂蚁行走释放用Q/dij表示,dij表示城市i和j之间的距离)。

三、蚁群算法设计

在本算法设计中,包含两层循环,外循环是迭代次数循环,内循环遍历每一只蚂蚁,其中信息素增量在每一只蚂蚁走完整体路径后对当前信息素更新,而信息素挥发只在每一代蚂蚁都走完后对当前信息素更新,流程如下:
在这里插入图片描述

四、求解结果

最优路线与最优值:
在这里插入图片描述
最优轨迹图:
在这里插入图片描述

五、Python源代码

#蚁群算法求解31座城市TSP问题完整代码:
import numpy as np
import pandas as pd
import math
import matplotlib.pyplot as plt
from time import perf_counter

class AntList(object):
    def __init__(self,distfunc,getEtatable,numant=5,numcity=10,alpha=1,rho=0.1,Q=1):
        """ 构造函数 """
        self.numant = numant        # 蚂蚁个数
        self.numcity = numcity        # 城市个数
        self.alpha = alpha            # 信息素重要程度因子
        self.rho = rho                # 信息素的挥发速度
        self.Q = Q                    # 品质因子
        self.distfunc=distfunc
        self.getEtatable=getEtatable

        self.bestantunit=None
        self.population=[]
        self.pathtable = np.zeros((self.numant,self.numcity)).astype(int)    # 路径记录表
        self.generation=0

    def Init_eta_phe(self):
        """
            函数名:Init_eta_phe(self)
            函数功能:    对启发函数和信息素进行初始化
        """
        self.etatable = self.getEtatable()            # 启发函数矩阵,表示蚂蚁从城市i转移到矩阵j的期望程度
        self.pheromonetable  = np.ones((self.numcity,self.numcity))            # 信息素矩阵

    def InitStartPosition(self):
        """
            函数名:InitStartPosition(self)
            函数功能:    初始化蚂蚁的起始位置
        """
        #  随机产生各个蚂蚁的起点城市
        if self.numant <= self.numcity:       # 城市数比蚂蚁数多
            self.pathtable[:,0] = np.random.permutation(range(0,self.numcity))[:self.numant]
        else:                               # 蚂蚁数比城市数多,需要补足
            self.pathtable[:self.numcity,0] = np.random.permutation(range(0,self.numcity))[:]
            self.pathtable[self.numcity:,0] = np.random.permutation(range(0,self.numcity))[:self.numant-self.numcity]

    def upDateInf(self):
        """
            函数名:upDateInf(self)
            函数功能:    对信息素进行更新
        """
        changepheromonetable = np.zeros((self.numcity,self.numcity))
        
        if self.population:
            for antunit in self.population:
                for i in range(self.numcity-1):
                    changepheromonetable[antunit.path[i]][antunit.path[i+1]] += self.Q/antunit.length
                changepheromonetable[antunit.path[self.numcity-1]][antunit.path[0]] += self.Q/antunit.length
            self.pheromonetable = (1-self.rho)*self.pheromonetable + changepheromonetable
        else:
            self.Init_eta_phe()

    def getNextCity(self,unvisited,visiting):
        """
            函数名:getNextCity(self,unvisited,visiting)
            函数功能:    根据信息素和启发函数矩阵,通过轮盘赌法随机选下一个城市
                输入    1     self:类自身
                输入 2    unvisited:未走过的城市列表
                输入 2    visited:已经走过的城市列表
                输出    1    k:下一个城市的编号
            其他说明:无
        """
        listunvisited = list(unvisited)
        probtrans = np.zeros(len(listunvisited))

        for k in range(len(listunvisited)):
            probtrans[k] = np.power(self.pheromonetable[visiting][listunvisited[k]],self.alpha)\
                *np.power(self.etatable[visiting][listunvisited[k]],self.alpha)

        cumsumprobtrans = (probtrans/sum(probtrans)).cumsum()
        cumsumprobtrans -= np.random.rand()

        k = listunvisited[np.where(cumsumprobtrans>0)[0][0]] # 下一个要访问的城市
        return k

    def GoOnePath(self,i):
        """
            函数名:distance(self, path)
            函数功能:    第i只蚂蚁从随机点出发找到一条路径
                输入    1     self:类自身
                输入 2    i:当代的第i只蚂蚁
                输出    1    antunit:一个蚂蚁单元类
            其他说明:无
        """
        visiting = self.pathtable[i,0]        # 当前所在的城市

        unvisited = set(range(self.numcity))# 未访问的城市
        unvisited.remove(visiting)            # 删除元素
        
        for j in range(1,self.numcity):        # 循环numcity-1次,访问剩余的numcity-1个城市
            # 每次用轮盘法选择下一个要访问的城市
            k=self.getNextCity(unvisited,visiting)
            
            self.pathtable[i,j] = k
            unvisited.remove(k)
            visiting = k
        
        antunit=AntUnit(self.pathtable[i],self.distfunc(self.pathtable[i]))
        if self.bestantunit:
            if self.bestantunit.length>antunit.length:
                self.bestantunit=antunit
        else:
            self.bestantunit=antunit
        
        return antunit

    def nextGeneration(self):
        """
            函数名:nextGeneration(self)
            函数功能:    产生下一代
        """
        self.upDateInf()
        newPopulation = []                        # 新种群

        for i in range(self.numant):
            newPopulation.append(self.GoOnePath(i))

        self.population = newPopulation
        self.generation += 1

class AntUnit(object):
    """
        类名:GAUnit
        类说明:    遗传算法个体类
    """
    def __init__(self, aPath = None,aLength = -1):
        """ 构造函数 """
        self.path = list(aPath)            # 个体的基因序列
        self.length = aLength              # 初始化适配值

class Node:
    """
        类名:Node
        类说明:    城市节点类
    """
    def __init__(self,CityNum):
        """
        函数名:GetData()
        函数功能:    从外界读取城市数据并处理
            输入    无
            输出    1 Position:各个城市的位置矩阵
                2 CityNum:城市数量
                3 Dist:城市间距离矩阵
        其他说明:无
        """
        self.visited=[False]*CityNum    #记录城市是否走过
        self.start=0                    #起点城市
        self.end=0                      #目标城市
        self.current=0                  #当前所处城市
        self.num=0                      #走过的城市数量
        self.pathsum=0                  #走过的总路程
        self.lb=0                       #当前结点的下界
        self.listc=[]                   #记录依次走过的城市

def GetData(datapath):
    """
    函数名:GetData()
    函数功能:    从外界读取城市数据并处理
        输入    无
        输出    1 Position:各个城市的位置矩阵
            2 CityNum:城市数量
            3 Dist:城市间距离矩阵
    其他说明:无
    """
    dataframe = pd.read_csv(datapath,sep=" ",header=None)
    Cities = dataframe.iloc[:,1:3]
    Position= np.array(Cities)                #从城市A到B的距离矩阵
    CityNum=Position.shape[0]                #CityNum:代表城市数量
    Dist = np.zeros((CityNum,CityNum))        #Dist(i,j):城市i与城市j间的距离

    #计算距离矩阵
    for i in range(CityNum):
        for j in range(CityNum):
            if i==j:
                Dist[i,j] = math.inf
            else:
                Dist[i,j] = math.sqrt(np.sum((Position[i,:]-Position[j,:])**2))
    return Position,CityNum,Dist

def ResultShow(Min_Path,BestPath,CityNum,string):
    """
        函数名:GetData()
        函数功能:    从外界读取城市数据并处理
            输入    无
            输出    1 Position:各个城市的位置矩阵
                2 CityNum:城市数量
                3 Dist:城市间距离矩阵
        其他说明:无
    """    
    print("基于"+string+"求得的最优路线:")
    for m in range(CityNum):
        print(str(BestPath[m])+"—>",end="")
    print(BestPath[CityNum])
    print("最优值:"+str(Min_Path))
    print()

def draw(BestPath,Position,title):
    """
        函数名:draw(BestPath,Position,title)
        函数功能:    通过最优路径将旅行商依次经过的城市在图表上绘制出来
            输入    1     BestPath:最优路径
                2    Position:各个城市的位置矩阵
                3    title:图表的标题
            输出    无
        其他说明:无
    """
    plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
    plt.rcParams['axes.unicode_minus'] = False
    plt.title(title)
    plt.plot(Position[BestPath, 0],Position[BestPath, 1], marker='>', mec='r', mfc='w',label=u'路线')
    plt.legend()  # 让图例生效
    for i,city in enumerate(Position): 
        plt.text(city[0], city[1], str(i))
    plt.xlabel('横坐标')
    plt.ylabel('纵坐标')
    plt.show()

def ant():
    """
        函数名:ant()
        函数功能:蚁群算法核心
    """
    numant = 25          # 蚂蚁个数
    numcity = CityNum   # 城市个数
    alpha = 1           # 信息素重要程度因子
    rho = 0.1           # 信息素的挥发速度
    Q = 1
    
    iters = 0
    itermax = 500
    
    etatable = 1.0/(Dist+np.diag([1e10]*numcity))       # 启发函数矩阵,表示蚂蚁从城市i转移到矩阵j的期望程度
    pheromonetable  = np.ones((numcity,numcity))        # 信息素矩阵
    pathtable = np.zeros((numant,numcity)).astype(int)  # 路径记录表
    
    lengthaver = np.zeros(itermax)          # 各代路径的平均长度
    lengthbest = np.zeros(itermax)          # 各代及其之前遇到的最佳路径长度
    pathbest = np.zeros((itermax,numcity))  # 各代及其之前遇到的最佳路径

    while iters < itermax:
        #  随机产生各个蚂蚁的起点城市
        if numant <= numcity:   # 城市数比蚂蚁数多
            pathtable[:,0] = np.random.permutation(range(0,numcity))[:numant]
        else:                   # 蚂蚁数比城市数多,需要补足
            pathtable[:numcity,0] = np.random.permutation(range(0,numcity))[:]
            pathtable[numcity:,0] = np.random.permutation(range(0,numcity))[:numant-numcity]
        
        length = np.zeros(numant)       # 计算各个蚂蚁的路径距离
        
        for i in range(numant): 
            visiting = pathtable[i,0]         # 当前所在的城市
            unvisited = set(range(numcity))   # 未访问的城市
            unvisited.remove(visiting)        # 删除元素
            
            for j in range(1,numcity):        # 循环numcity-1次,访问剩余的numcity-1个城市
                # 每次用轮盘法选择下一个要访问的城市
                listunvisited = list(unvisited)
                probtrans = np.zeros(len(listunvisited))
                
                for k in range(len(listunvisited)):
                    probtrans[k] = np.power(pheromonetable[visiting][listunvisited[k]],alpha)\
                        *np.power(etatable[visiting][listunvisited[k]],alpha)
                cumsumprobtrans = (probtrans/sum(probtrans)).cumsum()
                cumsumprobtrans -= np.random.rand()
                
                k = listunvisited[np.where(cumsumprobtrans>0)[0][0]] # 下一个要访问的城市
                pathtable[i,j] = k
                unvisited.remove(k)
                length[i] += Dist[visiting][k]
                visiting = k
            
            length[i] += Dist[visiting][pathtable[i,0]] # 蚂蚁的路径距离包括最后一个城市和第一个城市的距离
        
        
        # 包含所有蚂蚁的一个迭代结束后,统计本次迭代的若干统计参数
        lengthaver[iters] = length.mean()
        if iters == 0:
            lengthbest[iters] = length.min()
            pathbest[iters] = pathtable[length.argmin()].copy()      
        else:
            if length.min() > lengthbest[iters-1]:
                lengthbest[iters] = lengthbest[iters-1]
                pathbest[iters] = pathbest[iters-1].copy()
            else:
                lengthbest[iters] = length.min()
                pathbest[iters] = pathtable[length.argmin()].copy()    
        
        # 更新信息素
        changepheromonetable = np.zeros((numcity,numcity))
        for i in range(numant):
            for j in range(numcity-1):
                changepheromonetable[pathtable[i,j]][pathtable[i,j+1]] += Q/length[i]
            changepheromonetable[pathtable[i,j+1]][pathtable[i,0]] += Q/length[i]
        pheromonetable = (1-rho)*pheromonetable + changepheromonetable
        
        # 迭代次数指示器+1
        iters += 1 

    path_tmp=pathbest[-1]
    BestPath=[]
    for i in path_tmp:
        BestPath.append(int(i))
    BestPath.append(BestPath[0])
    
    return BestPath,lengthbest[-1]

#########程序入口#########################################
if __name__ == "__main__":
    Position,CityNum,Dist = GetData("data.txt")
    
    start=perf_counter()       #计时开始
    BestPath,Min_Path = ant()
    print("运行时间是: {:.5f}s".format(perf_counter()-start))            # 程序计时结束
    
    print()
    ResultShow(Min_Path,BestPath,CityNum,"蚁群算法")
    draw(BestPath,Position,"轨迹图")
蚁群算法求解TSP问题资源python实现
03-30
1、完整代码,可直接运行 2、擅长领域:路径规划、机器学习、数据爬虫、数据分析处理等 3、该资源有较为详尽的注解,非常方便大家阅读与理解。 资源内容: python版本蚁群算法求解TSP问题
python基于蚁群算法求旅行商问题(TSP)
04-26
采用了多线程和蚁群算法的思路,代码来自于其他博客,经过一定的修改
(重制版)TSP问题——ACO蚁群算法(代码+解释)
最新发布
m0_61546651的博客
04-10 790
路径构建伪随机比例选择规则与信息素更新
人工智能实验:蚁群算法求解TSP问题Python代码实现,附有详细实验报告地址)
hanmo22357的博客
10-22 2036
这是人工智能实验课的一次作业,项目文件中包含两个py文件,其中Main.py是算法的主体,而其他一些实现则放在AidFunctions.py文件中。代码注释比较详细,可以对照实验报告进行阅览。
Python蚁群算法解决TSP问题
Lov1_BYS的博客
08-08 742
利用蚁群算法解决TSP问题,附有代码
TSP问题——ACO(蚁群算法)解法(附源代码)
机器学习&数据挖掘
11-21 6057
TSP问题——ACO(蚁群算法)解法 1、蚁群算法简介   蚁群算法(Ant Colony Optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文“Ant system: optimization by a colony of cooperating agents”中提出,其灵感来源于蚂蚁在寻找食物过程中...
建模算法Python调用Gurobi求解TSP问题
baidu的专栏
05-18 8160
TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长,到目前为止还未找到一个多项式时间的有效算法。本文探讨了Python调用Gurobi优化器求解TSP问题
遗传算法解决tsp问题(基于python
m0_73473411的博客
02-10 8540
遗传算法解决tsp问题,附python源码
蚁群算法解决TSP问题
02-17
完整的蚁群算法解决旅行商问题的MATLAB程序,供大家学习使用
蚁群算法求解TSP问题-python实现
_2312
04-15 5586
蚁群算法求解TSP问题-python实现(附代码)
遗传算法解决TSP问题Python代码
03-20
遗传算法解决TSP问题Python代码,三个py文件,一个小DEMO
蚁群算法模型(美赛B题C问,可直接调用)
01-26
蚁群算法模型(美赛B题C问,可直接调用) 画图,比较,一键式操作,基本改改就能用来做C的路径规划了 感谢分享师兄~
蚁群算法蚁群算法求解TSP问题Python代码
07-20
当有很多蚂蚁觅食时,刚开始每个蚂蚁会随机选择一条路径,并在该路径中释放信息素,路径短的蚂蚁要比路径长的...蚁群算法具有分布计算、信息正反馈和启发式搜索的特征,本质上是进化算法中的一种启发式全局优化算法
蚁群算法求解TSP问题中的改进研究
01-28
针对蚁群算法求解大规模优化问题时存在的3个缺点:消耗时间长、蚂蚁在下次搜索时目标导向不强导致搜索随机性大、寻优路径上的信息素过度增强导致得到假的...因此,改进的蚁群算法求解TSP等组合优化问题时非常有效。
基于Matlab实现蚁群算法求解TSP问题(源码+数据).rar
09-22
1、资源内容:基于Matlab实现蚁群算法求解TSP问题(源码+数据).rar 2、适用人群:计算机,电子信息工程、数学等专业的学习者,作为自己程序部分功能的“参考资料”使用。 3、解压说明:本资源需要电脑端使用WinRAR...
蚁群算法解决TSP问题详细讲解(含python代码)
weixin_48241292的博客
10-28 3万+
蚁群算法解决TSP问题详细讲解(含python代码)(一)TSP问题(二)蚁群算法(1)蚁群算法简单介绍(2)蚁群算法解决TSP问题基本原理(3)蚁群算法的核心步骤3.1 路径构建3.2 信息素更新(三)代码分析(1)设置参数(2)距离矩阵(3)设置信息素矩阵和蚂蚁路径矩阵(4)当前城市选择下一城市(5)更新信息素(6)完整代码 (一)TSP问题 TSP问题:旅行商问题,即TSP问题(Traveling Salesman Problem),给定一组城市和每对城市之间的距离,商家从其中一个城市出发,要求每个
实验6 蚁群算法求解tsp问题
blaze_jack
01-31 1万+
传送门(所有的实验都使用python实现) 实验1 BP神经网络实验 实验2 som网实验 实验3 hopfield实现八皇后问题 实验4 模糊搜索算法预测薄冰厚度 实验5 遗传算法求解tsp问题 实验6 蚁群算法求解tsp问题 实验7 粒子群优化算法求解tsp问题 实验8 分布估计算法求解背包问题 实验9 模拟退火算法求解背包问题 实验10 禁忌搜索算法求解tsp问题 ...
遗传算法解决TSP旅行商问题(附:Python实现
热门推荐
Happy祥子的博客
11-07 4万+
前言 我先啰嗦一下:不是很喜欢写计算智能的算法,因为一个算法就要写好久。前前后后将近有两天的时间。 好啦,现在进入正题。 巡回旅行商问题(TSP)是一个组合优化方面的问题,已经成为测试组合优化新算法的标准问题。应用遗传算法解决 TSP 问题,首先对访问城市序列进行排列组合的方法编码,这保证了每个城市经过且只经过一次。接着生成初始种群,并计算适应度函数,即计算遍历所有城市的距离。然后用最优保存法确...
基于蚁群算法求解TSP问题的国内外现状
05-29
基于蚁群算法求解TSP问题是一个非常活跃的研究领域,国内外的研究者们在这方面做出了许多有意义的工作。 在国外,最早提出蚁群算法求解TSP问题的是比利时的研究者Dorigo等人,他们在1991年提出了蚁群算法并应用于TSP问题。此后,蚁群算法TSP问题求解领域得到广泛应用,包括变异蚁群算法、混合蚁群算法等。近年来,一些新的蚁群算法变种也被提出,如基于遗传算法蚁群算法的混合算法、基于蚁群算法的多目标优化等。 在国内,蚁群算法求解TSP问题的研究也已经有了较长的历史。早期的研究主要是对蚁群算法的原理和性能进行分析和研究,如对蚁群算法的信息素更新机制、启发式信息的设计等进行改进,以提高算法求解效率和准确度。随着研究的深入,越来越多的变种算法被提出,如基于模拟退火和蚁群算法的混合算法、基于蚁群算法的并行优化等。 总的来说,基于蚁群算法求解TSP问题是一个非常热门的研究领域,目前已经有了很多有意义的成果。未来,研究者们可以继续探索新的蚁群算法变种,以提高算法求解效率和准确度,同时也可以将蚁群算法应用于更广泛的实际问题中。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 【建模算法】基于遗传算法求解TSP问题(Python实现) 16410
  • 《R语言数据分析》作业答案 15189
  • 【建模算法】层次分析法(Python实现) 12617
  • 【建模算法】熵权法(Python实现) 11514
  • 分布形态的度量-偏度系数与峰度系数的探讨 9953

分类专栏

  • 其他 11篇
  • 数据分析 4篇
  • 深度学习 7篇
  • 数学建模 26篇
  • 数值方法 1篇

最新评论

  • 【建模算法】基于粒子群算法求解TSP问题(matlab求解)

    drvybybt: 请问代码可以由用户规定出发城市嘛

  • 【建模算法】基于粒子群算法求解TSP问题(Python实现)

    2301_77914535: 你好,作者大大,我想问一下如果城市是三维的,只需要在此代码下增加z轴信息就可以了吗,谢谢

  • 【LKH算法体验】用matlab调用迄今为止最强悍的求解旅行商(TSP)的算法-LKH算法

    ETEC: 请问找到解决方法了吗

  • 【LKH算法体验】用matlab调用迄今为止最强悍的求解旅行商(TSP)的算法-LKH算法

    X-Qiang: 运行出现:Cannot open PARAMETER_FILE: test.par 解决方案:将test.par文件,首行改为全路径,可以解决问题。如:PROBLEM_FILE = C:\LKH\TSPLIB\test.tsp 如果需要输出,相应的输出文件也要带路径:TOUR_FILE = C:\LKH\TSPLIB\a280.txt

  • 【建模算法】TOPSIS法(Python实现)

    weixin_74445941: 你好,我研究了一下你的参考论文和你的代码,你的代码其实漏掉了参考论文里面的一个条件,导致结果得到的和它的案例值不一样,论文中的价格这个特征是越小越好的,但是在你的代码中提现仍然为越大越好,我重新写了一下代码,虽然结果跟论文的很接近,但是还是有小数位的偏差

大家在看

  • SCI论文中缩写怎么使用,SCI伪代码命名规范 216
  • SoftMax 的困境:在稀疏性和多模态之间左右为难
  • Java数据结构与算法(最大子数组和动态规划) 171
  • OnlyOwner在Solidity中是一个修饰符,TypeError:
  • Java数据结构与算法(爬楼梯动态规划) 221

最新文章

  • 【C语言】编写C代码求100的阶乘进行高精度计算
  • 【基于Python的概率论与数理统计实验】实验1_抛硬币实验的模拟
  • 《R语言数据分析》期末试题
2023年2篇
2022年44篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

4617作文网女孩姓凌起甚么名字好秦氏取名起名大全大全女孩名字周易里的好名字的期货交易周五晚上有夜盘吗给赵姓起名字如何给女装店起名字梦琪的解释监理公司起名字靓字通过生辰八字算命周易企业取名起名大全周易取名网取名免费精灵宝可梦的破解五行命理算命网上最准的算命易之堂人在线算命免费测名周易起名馨蕊是什么意思起名网周易生辰八字取名起名字 免费 周易梦阅读理解沙发垫店铺起名安阳周易专修学院欧姓女小孩起名大全辽宁省周易协会猎名网公司起名李性女孩起名生辰八字起名字男孩子周易装修风水学姓名陆起名男孩周易起名免费测试淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男子给前妻转账 现任妻子起诉要回网友建议重庆地铁不准乘客携带菜筐月嫂回应掌掴婴儿是在赶虫子重庆警方辟谣“男子杀人焚尸”国产伟哥去年销售近13亿新的一天从800个哈欠开始男孩疑遭霸凌 家长讨说法被踢出群高中生被打伤下体休学 邯郸通报男子持台球杆殴打2名女店员被抓19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警两大学生合买彩票中奖一人不认账德国打算提及普京时仅用姓名山西省委原副书记商黎光被逮捕武汉大学樱花即将进入盛花期今日春分张家界的山上“长”满了韩国人?特朗普谈“凯特王妃P图照”王树国3次鞠躬告别西交大师生白宫:哈马斯三号人物被杀代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了房客欠租失踪 房东直发愁倪萍分享减重40斤方法“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火手机成瘾是影响睡眠质量重要因素考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼网友洛杉矶偶遇贾玲呼北高速交通事故已致14人死亡西双版纳热带植物园回应蜉蝣大爆发男孩8年未见母亲被告知被遗忘张立群任西安交通大学校长恒大被罚41.75亿到底怎么缴沈阳一轿车冲入人行道致3死2伤奥运男篮美国塞尔维亚同组周杰伦一审败诉网易国标起草人:淀粉肠是低配版火腿肠外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万杨倩无缘巴黎奥运男子被猫抓伤后确诊“猫抓病”春分“立蛋”成功率更高?记者:伊万改变了国足氛围奥巴马现身唐宁街 黑色着装引猜测

4617作文网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化