【建模算法】Python调用Gurobi求解TSP问题

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

一、问题描述

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

城市编号 X坐标 Y坐标 城市编号 X坐标 Y坐标
1 1.304 2.312 17 3.918 2.179
2 3.639 1.315 18 4.061 2.37
3 4.177 2.244 19 3.78 2.212
4 3.712 1.399 20 3.676 2.578
5 3.488 1.535 21 4.029 2.838
6 3.326 1.556 22 4.263 2.931
7 3.238 1.229 23 3.429 1.908
8 4.196 1.044 24 3.507 2.376
9 4.312 0.79 25 3.394 2.643
10 4.386 0.57 26 3.439 3.201
11 3.007 1.97 27 2.935 3.24
12 2.562 1.756 28 3.14 3.55
13 2.788 1.491 29 2.545 2.357
14 2.381 1.676 30 2.778 2.826
15 1.332 0.695 31 2.37 2.975
16 3.715 1.678

二、Gurobi 求解器简介

Gurobi 是全球综合能力排名靠前的数学规划求解器。目前最新版本 9.5.1,可以求解的问题类型包括:

(1)线性约束和目标模型(连续变量、混合整数)

(2)二阶锥模型 (连续变量、混合整数)

(3)二次凸约束和目标模型(连续变量、混合整数)

(4)二次非凸(双线性、二次等式约束等)约束和目标模型(连续变量、混合整数)

(5)非线性模型(除式、高阶多项式、指数、对数、三角函数、范数等)(连续变量、混合整数)

对于以上模型,可以叠加的功能包括但不限于:

(1)约束和目标中带有 最大、最小、绝对值等数学函数,或者带有 AND、OR、INDICATOR 逻辑条件的模型 (连续变量、混合整数)

(2)多目标优化

(3)需要获得部分或者全部可行解或者最优解的模型

(4)不可行或者无界分析

(5)优化参数自动调优功能

(6)分布式计算或者多线程计算

更多Gurobi 功能参见 http://www.gurobi.cn/

三、TSP问题的数学模型

假设dijd_{ij}dij​为第i个城市与第j个城市之间的距离,num为城市数,xijx_{ij}xij​为第i个城市与第j个城市之间的决策变量,此为0-1变量,0代表第i个城市与第j个城市之间不相连、1代表第i个城市与第j个城市之间相连。

要建立的目标为经过所有城市距离最短,约束条件为每个城市只经过一次。可以建立如下模型:

min∑i=1num∑j=1numxijdijmin\displaystyle \sum^{num}_{i=1}\sum^{num}_{j=1}x_{ij}d_{ij}mini=1∑num​j=1∑num​xij​dij​

s.t.

∑i=1numxij=1\displaystyle \sum^{num}_{i=1}x_{ij}=1i=1∑num​xij​=1 j=1,2,…,num

∑j=1numxij=1\displaystyle \sum^{num}_{j=1}x_{ij}=1j=1∑num​xij​=1 i=1,2,…,num

ui−uj+num×xij≤n−1u_i-u_j+num \times x_{ij} \leq n-1ui​−uj​+num×xij​≤n−1 1<i≠j≤num1<i \neq j \leq num1<i​=j≤num

xijx_{ij}xij​为0或1,uiu_iui​为实数。约束条件前两个就是保证每个城市只去一次,最后一个约束条件即为防止子回路的出现。

四、python调用Gurobi优化器求解TSP问题的步骤

安装gurobi可以自行网上找教程,此处不再赘述。

  • 导入包
from gurobipy import *
import numpy as np
  • 创建模型
model=Model("question1")
  • 定义变量,计算矩阵

vtype=GRB.BINARY 二进制变量,0-1变量

vtype=GRB.CONTINUOUS 连续变量

vtype=GRB.INTEGER 整数变量

lb 是变量下限,ub是变量上限

在这个问题中,xijx_{ij}xij​为31__31的矩阵0-1变量,uiu_iui​为311的实数变量。

sdpvar实型变量,intvar 整型变量 binvar 0-1型变量

对于此问题的变量可以定义为:

#读取31座城市坐标
coord = []
with open("data.txt", "r") as lines:lines = lines.readlines()
for line in lines:xy = line.split()coord.append(xy)
coord = np.array(coord)
w, h = coord.shape
coordinates = np.zeros((w, h), float)
for i in range(w):for j in range(h):coordinates[i, j] = float(coord[i, j])# x点坐标
data_x=coordinates[:,0]
# y点坐标
data_y=coordinates[:,1]data_num=len(data_x)
distance_juzheng=np.zeros((data_num,data_num))for i in range(0,data_num):for j in range(0,data_num):if (i==j):distance_juzheng[i,j]=100000else:distance_juzheng[i,j]=np.sqrt(np.square((data_x[i]-data_x[j]))+np.square((data_y[i]-data_y[j])))#定义变量
x=model.addMVar((data_num,data_num),lb=0,ub=1,vtype=GRB.BINARY)  #lb变量下限, ub变量上限
u=model.addMVar((data_num),vtype=GRB.CONTINUOUS)  #lb变量下限, ub变量上限
  • 目标函数

    min∑i=1num∑j=1numxijdijmin\displaystyle \sum^{num}_{i=1}\sum^{num}_{j=1}x_{ij}d_{ij}mini=1∑num​j=1∑num​xij​dij​

#构造目标函数
objsum=[]
for i in range(0,data_num):  for j in range(0,data_num):  objsum=objsum+x[i,j]*distance_juzheng[i,j]model.setObjective(objsum,GRB.MINIMIZE)
  • 约束条件
#构造约束条件
for i in range(0,data_num):  constrsum=sum(x[i,:])model.addConstr(constrsum==1)for j in range(0,data_num):  constrsum1=sum(x[:,j])model.addConstr(constrsum1==1)for i in range(1,data_num):  for j in range(1,data_num): if(i!=j):model.addConstr((u[i]-u[j]+data_num*x[i,j])<=data_num-1)
  • 优化求解
model.optimize()

五、求解结果

最优路径:
1-> 15-> 14-> 12-> 13-> 7-> 10-> 9-> 8-> 2-> 4-> 16-> 5-> 6-> 11-> 23-> 19-> 17-> 3-> 18-> 22-> 21-> 20-> 24-> 25-> 26-> 28-> 27-> 30-> 31-> 29-> 1

轨迹图:

完整代码

#求解31座城市的TSP问题完整代码from gurobipy import *
import numpy as npmodel=Model("question1")#读取31座城市坐标
coord = []
with open("data.txt", "r") as lines:lines = lines.readlines()
for line in lines:xy = line.split()coord.append(xy)
coord = np.array(coord)
w, h = coord.shape
coordinates = np.zeros((w, h), float)
for i in range(w):for j in range(h):coordinates[i, j] = float(coord[i, j])# x点坐标
data_x=coordinates[:,0]
# y点坐标
data_y=coordinates[:,1]data_num=len(data_x)
distance_juzheng=np.zeros((data_num,data_num))for i in range(0,data_num):for j in range(0,data_num):if (i==j):distance_juzheng[i,j]=100000else:distance_juzheng[i,j]=np.sqrt(np.square((data_x[i]-data_x[j]))+np.square((data_y[i]-data_y[j])))#定义变量
x=model.addMVar((data_num,data_num),lb=0,ub=1,vtype=GRB.BINARY)  #lb变量下限, ub变量上限
u=model.addMVar((data_num),vtype=GRB.CONTINUOUS)  #lb变量下限, ub变量上限 #构造目标函数
objsum=[]
for i in range(0,data_num):  for j in range(0,data_num):  objsum=objsum+x[i,j]*distance_juzheng[i,j]model.setObjective(objsum,GRB.MINIMIZE)#构造约束条件
for i in range(0,data_num):  constrsum=sum(x[i,:])model.addConstr(constrsum==1)for j in range(0,data_num):  constrsum1=sum(x[:,j])model.addConstr(constrsum1==1)for i in range(1,data_num):  for j in range(1,data_num): if(i!=j):model.addConstr((u[i]-u[j]+data_num*x[i,j])<=data_num-1)model.optimize()
best=(x.X).astype(int)
print(f"最优目标值为:{model.ObjVal}")
print(f"最优分配为:{best}")

运行结果:

Gurobi Optimizer version 9.5.1 build v9.5.1rc2 (win64)
Thread count: 4 physical cores, 8 logical processors, using up to 8 threads
Optimize a model with 932 rows, 992 columns and 4532 nonzeros
Model fingerprint: 0xbe4e71f7
Variable types: 31 continuous, 961 integer (961 binary)
Coefficient statistics:Matrix range     [1e+00, 3e+01]Objective range  [1e-01, 1e+05]Bounds range     [1e+00, 1e+00]RHS range        [1e+00, 3e+01]
Presolve removed 0 rows and 1 columns
Presolve time: 0.02s
Presolved: 932 rows, 991 columns, 4532 nonzeros
Variable types: 30 continuous, 961 integer (961 binary)
Found heuristic solution: objective 2900002.5107Root relaxation: objective 1.242587e+01, 107 iterations, 0.00 seconds (0.00 work units)Nodes    |    Current Node    |     Objective Bounds      |     WorkExpl Unexpl |  Obj  Depth IntInf | Incumbent    BestBd   Gap | It/Node Time0     0   12.42587    0   45 2900002.51   12.42587   100%     -    0s
H    0     0                    2900002.4836   12.42587   100%     -    0s
H    0     0                    2800004.9958   12.42587   100%     -    0s0     0   13.38934    0   65 2800005.00   13.38934   100%     -    0s0     0   13.52139    0   61 2800005.00   13.52139   100%     -    0s0     0   13.52274    0   69 2800005.00   13.52274   100%     -    0s0     0   13.52282    0   68 2800005.00   13.52282   100%     -    0s0     0   14.53402    0   59 2800005.00   14.53402   100%     -    0s
H    0     0                    1800012.4470   14.53402   100%     -    0s0     0   14.64368    0   60 1800012.45   14.64368   100%     -    0s0     0   14.64368    0   60 1800012.45   14.64368   100%     -    0s0     0   14.64882    0   62 1800012.45   14.64882   100%     -    0s0     0   14.65151    0   61 1800012.45   14.65151   100%     -    0s
H    0     0                    1600012.0222   14.65151   100%     -    0s0     0   14.65956    0   59 1600012.02   14.65956   100%     -    0s
H    0     0                    1100028.0719   14.65956   100%     -    0s0     0   14.65956    0   59 1100028.07   14.65956   100%     -    0s0     0   14.65956    0   59 1100028.07   14.65956   100%     -    0s0     0   14.65956    0   51 1100028.07   14.65956   100%     -    0s
H    0     0                      16.2382171   14.65956  9.72%     -    0s0     0   14.66899    0   45   16.23822   14.66899  9.66%     -    0s0     0   14.66899    0   54   16.23822   14.66899  9.66%     -    0s0     0   14.66899    0   61   16.23822   14.66899  9.66%     -    0s0     0   14.66899    0   61   16.23822   14.66899  9.66%     -    0s0     0   14.66899    0   59   16.23822   14.66899  9.66%     -    0s0     0   14.66899    0   59   16.23822   14.66899  9.66%     -    0s0     0   14.66899    0   59   16.23822   14.66899  9.66%     -    0s
H    0     0                      15.7186599   14.66899  6.68%     -    0s0     0   14.66899    0   51   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   51   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   51   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   51   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   51   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   51   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   45   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   61   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   60   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   60   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   58   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   58   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   58   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   58   15.71866   14.66899  6.68%     -    0s0     0   14.66899    0   58   15.71866   14.66899  6.68%     -    0s0     2   14.66899    0   58   15.71866   14.66899  6.68%     -    0s
H 1628  1026                      15.7186599   14.73997  6.23%   8.5    2s
*12769  8050              57      15.6996836   14.84307  5.46%   8.4    4s13210  8619   14.91088   24   32   15.69968   14.84449  5.45%   8.3    5s
*24056 15401              39      15.6721259   14.87890  5.06%   8.1    6s
*24057 15251              38      15.6493581   14.87890  4.92%   8.1    6s
H29434 17104                      15.4330841   14.89825  3.47%   8.1    7s
*33812 17603              83      15.4105727   14.89825  3.32%   8.6    8s44242 20220   15.18573   46   72   15.41057   14.93102  3.11%   8.7   10s
H46430 19702                      15.3874549   14.93102  2.97%   9.0   11s58661 22557   15.07210   56   56   15.38745   14.95224  2.83%   9.0   15s
H58816 21525                      15.3825444   14.95224  2.80%   9.0   18s67759 24235   15.04976   95   41   15.38254   14.95224  2.80%   9.1   20s117683 32944     cutoff  105        15.38254   14.99875  2.49%   9.1   25s157428 47324   15.37361   77   28   15.38254   15.03425  2.26%   9.1   30s201865 61834     cutoff   67        15.38254   15.06842  2.04%   9.2   35s243220 72133   15.26096   66   29   15.38254   15.09487  1.87%   9.3   40s279757 78847   15.30388   69   12   15.38254   15.11361  1.75%   9.4   45s309860 83532     cutoff   85        15.38254   15.12884  1.65%   9.5   50s338190 86252   15.37650   76    6   15.38254   15.14324  1.56%   9.5   55s368798 88155     cutoff   95        15.38254   15.15807  1.46%   9.6   60s398096 88732   15.25925   71   21   15.38254   15.17184  1.37%   9.6   65s426981 87036 infeasible   78        15.38254   15.18432  1.29%   9.6   70s456017 84800     cutoff   73        15.38254   15.19700  1.21%   9.7   75s483613 82030 infeasible   80        15.38254   15.20841  1.13%   9.7   80s509368 77406   15.28221   72   10   15.38254   15.22011  1.06%   9.8   85s537451 71269     cutoff   79        15.38254   15.23224  0.98%   9.8   90s568470 62502     cutoff   96        15.38254   15.24598  0.89%   9.8   95s593492 55036   15.35594   77   17   15.38254   15.25763  0.81%   9.8  100s625294 43717   15.32996   88    6   15.38254   15.27493  0.70%   9.8  105s656274 30390   15.30927   76    6   15.38254   15.29557  0.57%   9.8  110s691398  9606   15.35426   81   18   15.38254   15.33712  0.30%   9.7  115sCutting planes:Learned: 33Gomory: 51Cover: 197MIR: 35Flow cover: 241Inf proof: 142Zero half: 24Explored 703817 nodes (6750483 simplex iterations) in 116.41 seconds (158.76 work units)
Thread count was 8 (of 8 available processors)Solution count 10: 15.3825 15.3875 15.4106 ... 1.10003e+06Optimal solution found (tolerance 1.00e-04)
Best objective 1.538254443339e+01, best bound 1.538254443339e+01, gap 0.0000%
最优目标值为:15.382544433386597
最优分配为:[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0][1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]]

输出最优路径:

#输出路径:
ans=np.where(best==1)
ans_x=ans[0]
ans_y=ans[1]
x=ans_x[0]
print("最优路径:")
print(x+1,end='')
for i in range(31):print('->',ans_y[x]+1,end='')x=ans_y[x]

结果:

最优路径:
1-> 15-> 14-> 12-> 13-> 7-> 10-> 9-> 8-> 2-> 4-> 16-> 5-> 6-> 11-> 23-> 19-> 17-> 3-> 18-> 22-> 21-> 20-> 24-> 25-> 26-> 28-> 27-> 30-> 31-> 29-> 1

与LKH算法得到的结果完全一致,参见:https://blog.csdn.net/baidu/article/details/124723962

【建模算法】Python调用Gurobi求解TSP问题相关推荐

  1. 【建模算法】基于遗传算法求解TSP问题(matlab求解)

    [建模算法]基于遗传算法求解TSP问题(matlab求解) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增 ...

  2. Python调用Gurobi求解简单线性规划问题

    前言 Gurobi是一款功能强大的商用求解器,支持Python.C.C++.Java等多种语言调用,相比于Cplex,Gurobi封装更高,更加方便,但是对于初学者而言会更难一些.Gurobi与Cpl ...

  3. 【运筹优化】Python调用OR-Tools求解TSP问题

    文章目录 一.安装or-tools 二.旅行商问题简介 三.调用or-tools求解TSP问题 1.引入相关包 2.定义数据Model 3.创建路由模型 4.创建距离回调 5.设置旅行费用 6.设置搜 ...

  4. 手把手教你用Python调用SCIP求解最优化模型

    手把手教你用Python调用SCIP求解最优化模型 一个简单的例子 Python调用SCIP求解最优化模型的一般步骤 创建模型对象 创建决策变量 设置目标函数 创建约束 创建一般约束 创建广义约束 求 ...

  5. Python调用Gurobi:Assignment Problem(指派问题)简单案例

    Python调用Gurobi:简单案例 Python调用Gurobi:Assignment Problem简单案例 1. Assignment Problem Model Python调用Gurobi ...

  6. 遗传-粒子群算法遗传-禁忌搜索算法求解TSP问题

    1. 前言 上一篇博文[五种常见启发式算法求解TSP问题-总结篇]中,总结了五种常见启发式算法在求解TSP问题上的效果,其中遗传算法的求解质量最差,而粒子群算法和禁忌搜索算法的求解效果最佳,因此本文计 ...

  7. python调用开源求解器scip求解运输问题

    运输问题 运输问题(transportation problem)一般是研究把某种商品从若干产地运至若干个销地而使总运费最小的一类问题.一种特殊的线性规划问题,由于其技术系数矩阵具有特殊的结构,可以使 ...

  8. 【MATLAB】禁忌算法(TS)求解TSP问题

    目录 1.TS概述 1.1 TS介绍 1.2 TS流程 1.3 TS流程特点 2.基于TS求解TSP问题 2.1 tsp.m 2.2 CalDist.m 2.3 drawTSP.m 2.4 tabu_ ...

  9. Python调用Gurobi基本操作

    接上篇学会了如何用python调用gurobipy之后,这篇总结一些学到的基本操作. tuplelist.tupledict.multidict.创建list. 1.tuplelist方法: tupl ...

  10. python调用开源求解器SCIP求解带时间窗车辆路径问题(VRPTW)

    文章目录 1. 问题定义 2. 数学模型 3. python调用SCIP实现代码 4. 结果 参考文献 1. 问题定义 带时间窗车辆路径问题(vehicle routing problem with ...

最新文章

  1. 不懂这几个问题就落后了:Python、Android开发者必读!
  2. 为什么输出流会有一个flsh_交流会| “流量”还是“留量”,如何成为电商风口上的赢家?...
  3. 助力军事内容持续产出,军武次位面完成B轮融资...
  4. tc35i pdu message format
  5. JDBC 学习笔记(一)—— JDBC 基础
  6. python 如何快速判断列表是否相同_Python-检查列表中的所有元素是否相同
  7. 关于磁盘爆满异常(Linux下已经删除文件继续占用空间问题)
  8. TensorFlow 基本使用
  9. 调用模块里的action_初级测试人员进阶必备Python编码模块,看过的都说好
  10. round()四舍五入方法的简单使用
  11. [转载] 使用python 中的numpy创建数组
  12. OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题
  13. CISP 考试教材《第 2 章 知识域:网络安全监管》知识整理
  14. 昔者,圣人之作易也,幽赞神明而生蓍
  15. 【高老师UML软件建模基础】20级云班课习题答案合集
  16. outlook2013升级_Microsoft Outlook 2013入门指南
  17. Arduino基础2
  18. 同你分享1个完整的聚类分析案例
  19. 大漠多账号循环登录任务自动切换模板大漠绑定后台绑定游戏
  20. 关于虚拟机的十个基本小技巧

热门文章

  1. 聚类有效性指标(CVI)
  2. Nagios如何配置告警短信?
  3. 软件测试工程师面试题之数据库
  4. 【Android】NDK封装日志库
  5. 三维动画在计算机上的应用,三维动画运用领域有哪些地方?
  6. 波士顿房价预测python_多元线性回归—波士顿房价预测(版本一)
  7. D2. Seating Arrangements (hard version)
  8. win2012+r2+php+mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程
  9. 微信开发之小程序分享设置图片标题
  10. 看得懂的三极管工作原理