人工智能原理实验四:智能算法与机器学习

一、实验目的

本实验课程是计算机、智能、物联网等专业学生的一门专业课程,通过实验,帮助学生更好地掌握人工智能相关概念、技术、原理、应用等;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对智能程序、智能算法等有比较深入的认识。要掌握的知识点如下:

  1. 掌握人工智能中涉及的相关概念、算法;
  2. 熟悉人工智能中的知识表示方法;
  3. 掌握问题表示、求解及编程实现;
  4. 熟悉和掌握遗传算法、蚁群算法、决策树、贝叶斯等的基本概念和基本思想;
  5. 能够用选定的编程语言设计简单的算法系统;
  6. 通过实验培养学生利用智能算法和机器学习算法进行问题求解的基本技能。

二、基本要求

1、实验前,复习《人工智能》课程中的有关内容。

2、准备好实验数据。

3、程序可以组队完成(实验报告上要标明自己完成部分,切勿提交一样的报告),程序应加适当的注释。

4、完成实验报告,由小组完成报告要有明显区别,分析和总结应该按照自己完成的部分进行。

三、实验软件

推荐使用C或C++(Visual studio等平台)(不限制语言使用,如Java,matlab,Python等都可以)。

四、实验内容:

1.以N个节点的TSP(旅行商问题)问题为例,应用遗传算法进行求解,求出问题的最优解。

问题描述

    旅行商问题(Traveling Salesman Problem, TSP),又译为旅行推销员问题、货担郎问题,简称为TSP问题,是最基本的路线问题。假设有n个可直达的城市,一销售商从其中的某一城市出发,不重复地走完其余n-1个城市并回到原出发点,在所有可能的路径中求出路径长度最短的一条。

    TSP问题是组合数学中一个古老而又困难的问题,也是一个典型的组合优化问题,现已归入NP完备问题类。NP问题用穷举法不能在有效时间内求解,所以只能使用启发式搜索。遗传算法是求解此类问题比较实用、有效的方法之一。

下面给出30个城市的位置信息:

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

其路径长度为:424.869292

也可取前10个城市的坐标进行测试:

有人求得的最优路径为: 0 3 5 4 9 8 7 6 2 1 0

路径长度是166.541336

上述10个城市的求解中编号从0开始,把所有路径搜索完又返回到出发节点。

1.应用遗传算法求解30/10个节点的TSP(旅行商问题)问题,求问题的最优解。

2.使用蚁群优化算法或者粒群优化算法求解以上TSP问题。

3.利用贝叶斯算法和决策树算法进行数据分类操作

数据集:汽车评估数据集(见附录)

实验步骤:

仔细阅读并了解实验数据集;

使用任何一种熟悉的计算机语言(比如C,Java或者matlab)实现朴素贝叶斯算法和决策树算法;

利用朴素贝叶斯算法和决策树算法在训练数据的基础上学习分类器;

利用测试数据对学习的分类器进行性能评估;

统计分析实验结果并上交实验报告;

五、学生实验报告要求

实验报告需要包含以下几个部分

(1)求出问题最优解,若得不出最优解,请分析原因;

1.应用遗传算法求解30个节点的TSP(旅行商问题)问题,求问题的最优解。

2.使用蚁群优化算法或者粒群优化算法求解以上TSP问题。

(2)对实验中的几个算法控制参数进行仔细定义,并能通过实验选择参数的最佳值;

# 遗传算法参数
population_size = 50
num_generations = 1000
crossover_rate = 0.8
mutation_rate = 0.02
# 蚁群算法参数设置
num_ants = 10  # 蚂蚁数量,即蚁群规模
pheromone_decay = 0.5  # 信息素挥发系数,控制信息素的挥发速度,取值范围一般在(0, 1)之间
alpha = 1.0  # 信息素的重要程度参数,用于控制蚂蚁选择下一步路径时信息素的影响力
beta = 2.0  # 启发函数(即路径长度)的重要程度参数,用于控制蚂蚁选择下一步路径时路径长度的影响力
Q = 100.0  # 信息素增加强度,表示每次蚂蚁经过一条路径后释放的信息素量
num_iterations = 100  # 蚁群算法迭代次数,即蚂蚁搜索的总轮数

(3)要求界面显示每次迭代求出的局部最优解和最终求出的全局最优解。

1.应用遗传算法求解30个节点的TSP(旅行商问题)问题,求问题的最优解。

2.使用蚁群优化算法或者粒群优化算法求解以上TSP问题。

第一次运行结果:最终最佳路径: [11, 5, 6, 10, 9, 7, 8, 3, 2, 4, 30, 29, 28, 26, 27, 25, 24, 23, 22, 21, 17, 20, 18, 19, 14, 15, 13, 12, 16, 1], 距离: 524.0661832365629

第二次运行结果:最终最佳路径: [24, 23, 22, 21, 17, 20, 18, 19, 14, 15, 13, 12, 11, 5, 6, 10, 9, 7, 8, 3, 2, 4, 30, 29, 28, 26, 27, 25, 16, 1], 距离: 529.3772998688348

(4)测试种群规模对算法结果的影响。(运算速度,内存空间,准确率等)

(5)测试算法中重要参数(如遗传算法中的交叉概率、变异概率)对算法结果的影响(运算速度,内存空间,准确率等),以表格或者曲线图等形式表达。

较大的种群规模可能会增加算法的运行时间和内存开销,但通常能够更好地探索搜索空间。

五、实验结果讨论。

从实验结果来看,不同的种群规模对算法的性能和结果产生了影响。以下是对实验结果的一些讨论:

1.性能比较:随着种群规模的增加,算法的性能有所提高。这是因为较大的种群规模有助于更好地探索搜索空间,提高全局搜索的能力。然而,这也伴随着更多的计算开销。

2.最佳解决方案:在这个实验中,种群规模为50和100的情况下,最终的最佳解决方案是相同的。这可能是由于算法在较小规模下已经找到了局部最优解,增加种群规模没有进一步改善结果。

3.运行时间:随着种群规模的增加,运行时间也相应增加。较大的种群规模需要更多的计算资源,因此运行时间较长。在实际应用中,需要权衡运行时间和结果质量。

4. 结果稳定性:实验中显示,不同的种群规模下最终的最佳解决方案并不总是一致的。这表明在某些情况下,增加种群规模并不能保证一定能够找到更好的解决方案。这也反映了遗传算法在某些问题上可能受到初始条件和随机性的影响。

3.

朴素贝叶斯算法结果分析

准确率: 约为 68.5%。该指标表示模型正确分类的样本所占比例。在这个场景下,准确率较低,可能是因为朴素贝叶斯算法对于这个数据集的特征分布假设过于简单,或者数据集中的特征与类别的关系不符合朴素贝叶斯的假设。

精确率: 对于类别 0 和类别 2,精确率分别为 1.00 和 0.68。精确率表示在模型预测为某一类别时,实际为该类别的概率。在这里,类别 0 的精确率较高,说明模型在预测类别 0时的准确性较高。

召回率: 对于类别0、1和类别2,召回率分别为0.02、0.00和1.00。召回率表示实际为某一类别的样本中,模型成功预测为该类别的概率。在这里,类别2的召回率较高,说明模型成功捕捉了该类别的样本。

F1-score: 类别 2 的 F1-score 较高,表示在精确率和召回率之间取得了一种平衡。

决策树算法结果分析

准确率: 约为 96.8%。相对于朴素贝叶斯,决策树在这个数据集上表现得更好,准确率较高。精确率: 对于所有类别,精确率均较高。说明决策树模型在预测各个类别时的准确性都很高。召回率: 对于所有类别,召回率均较高。说明决策树模型能够成功捕捉各个类别的样本。

F1-score: 各个类别的 F1-score 均较高,表明模型在精确率和召回率之间取得了良好的平衡。

总体而言,决策树模型在这个数据集上的性能明显优于朴素贝叶斯模型。朴素贝叶斯在这里可能过于简化了特征之间的关系,而决策树能够更好地适应数据集的复杂性。

六、程序清单

1.

import numpy as np
import time

# 定义城市坐标
cities = {
    1: (87, 7), 2: (91, 38), 3: (83, 46), 4: (71, 44), 5: (64, 60),
    6: (68, 58), 7: (83, 69), 8: (87, 76), 9: (74, 78), 10: (71, 71),
    11: (58, 69), 12: (54, 62), 13: (51, 67), 14: (37, 84), 15: (41, 94),
    16: (2, 99), 17: (7, 64), 18: (22, 60), 19: (25, 62), 20: (18, 54),
    21: (4, 50), 22: (13, 40), 23: (18, 40), 24: (24, 42), 25: (25, 38),
    26: (41, 26), 27: (45, 21), 28: (44, 35), 29: (58, 35), 30: (62, 32)
}

# 城市数量
num_cities = len(cities)

# 遗传算法参数
# 不同的种群规模
population_sizes = [20, 50, 100, 200]
num_generations = 1000
crossover_rate = 0.8
mutation_rate = 0.02

# 计算两个城市之间的距离
def calculate_distance(city1, city2):
    return np.sqrt((city1[0] - city2[0])**2 + (city1[1] - city2[1])**2)

# 计算整个路径的总距离
def calculate_total_distance(tour):
    total_distance = 0
    for i in range(num_cities - 1):
        total_distance += calculate_distance(cities[tour[i]], cities[tour[i + 1]])
    total_distance += calculate_distance(cities[tour[-1]], cities[tour[0]])  # 返回起始城市
    return total_distance


for population_size in population_sizes:

    print(f"\n测试种群规模 {population_size}\n{'='*20}")

    # 初始化种群
    population = [np.random.permutation(num_cities) + 1 for _ in range(population_size)]  # 注意城市编号从1开始

    start_time = time.time()

    # 遗传算法主循环
    for generation in range(num_generations):
        # 计算种群中每个个体的适应度
        fitness = [1 / calculate_total_distance(individual) for individual in population]

        # 使用轮盘赌选择交叉的父母
        selected_indices = np.random.choice(range(population_size), size=population_size, p=fitness/np.sum(fitness))

        # 进行交叉操作生成新一代
        new_population = []
        for i in range(0, population_size, 2):
            parent1 = population[selected_indices[i]]
            parent2 = population[selected_indices[i + 1]]
            crossover_point = np.random.randint(1, num_cities - 1)
            child1 = np.concatenate((parent1[:crossover_point], np.setdiff1d(parent2, parent1[:crossover_point])))
            child2 = np.concatenate((parent2[:crossover_point], np.setdiff1d(parent1, parent2[:crossover_point])))
            new_population.extend([child1, child2])

        # 进行变异操作
        for i in range(population_size):
            if np.random.rand() < mutation_rate:
                mutation_indices = np.random.choice(num_cities, size=2, replace=False)
                new_population[i][mutation_indices[0]], new_population[i][mutation_indices[1]] = (
                    new_population[i][mutation_indices[1]], new_population[i][mutation_indices[0]])

        # 用新一代替换旧一代
        population = new_population

        # 显示每一代中的最佳解决方案
        best_solution_index = np.argmax(fitness)
        best_solution = population[best_solution_index]
        best_distance = calculate_total_distance(best_solution)
        # print(f"第 {generation + 1}/{num_generations} 代, 最短路径: {best_solution}, 距离: {best_distance}")

    end_time = time.time()

    # 显示最终的最佳解决方案
    final_best_solution_index = np.argmax(fitness)
    final_best_solution = population[final_best_solution_index]
    final_best_distance = calculate_total_distance(final_best_solution)
    print(f"最终最佳解决方案: {final_best_solution}, 距离: {final_best_distance}")
    print(f"运行时间: {end_time - start_time:.2f}秒\n")

2.

import numpy as np

# 定义城市坐标
cities = {
    1: (87, 7), 2: (91, 38), 3: (83, 46), 4: (71, 44), 5: (64, 60),
    6: (68, 58), 7: (83, 69), 8: (87, 76), 9: (74, 78), 10: (71, 71),
    11: (58, 69), 12: (54, 62), 13: (51, 67), 14: (37, 84), 15: (41, 94),
    16: (2, 99), 17: (7, 64), 18: (22, 60), 19: (25, 62), 20: (18, 54),
    21: (4, 50), 22: (13, 40), 23: (18, 40), 24: (24, 42), 25: (25, 38),
    26: (41, 26), 27: (45, 21), 28: (44, 35), 29: (58, 35), 30: (62, 32)
}
# 城市数量
num_cities = len(cities)
# 蚁群算法参数设置
num_ants = 10  # 蚂蚁数量,即蚁群规模
pheromone_decay = 0.5  # 信息素挥发系数,控制信息素的挥发速度,取值范围一般在(0, 1)之间
alpha = 1.0  # 信息素的重要程度参数,用于控制蚂蚁选择下一步路径时信息素的影响力
beta = 2.0  # 启发函数(即路径长度)的重要程度参数,用于控制蚂蚁选择下一步路径时路径长度的影响力
Q = 100.0  # 信息素增加强度,表示每次蚂蚁经过一条路径后释放的信息素量
num_iterations = 100  # 蚁群算法迭代次数,即蚂蚁搜索的总轮数

# 初始化信息素矩阵
pheromone_matrix = np.ones((num_cities, num_cities))
# 计算城市间距离矩阵
distance_matrix = np.zeros((num_cities, num_cities))
for i in range(1, num_cities + 1):
    for j in range(1, num_cities + 1):
        distance_matrix[i - 1, j - 1] = np.sqrt((cities[i][0] - cities[j][0])**2 + (cities[i][1] - cities[j][1])**2)
# 主循环
for iteration in range(num_iterations):
    ant_tours = []

    # 每只蚂蚁构建路径
    for ant in range(num_ants):
        visited_cities = []
        current_city = np.random.randint(1, num_cities + 1)
        visited_cities.append(current_city)
        # 构建路径
        while len(visited_cities) < num_cities:
            # 计算选择下一个城市的概率
            probabilities = []
            for city in range(1, num_cities + 1):
                if city not in visited_cities:
                    pheromone = pheromone_matrix[current_city - 1, city - 1]
                    distance = distance_matrix[current_city - 1, city - 1]
                    probability = (pheromone**alpha) * ((1.0 / distance)**beta)
                    probabilities.append((city, probability))
            # 选择下一个城市
            selected_city = max(probabilities, key=lambda x: x[1])[0]
            visited_cities.append(selected_city)
            current_city = selected_city
        ant_tours.append(visited_cities)
    # 更新信息素
    pheromone_matrix *= pheromone_decay
    for tour in ant_tours:
        for i in range(num_cities - 1):
            pheromone_matrix[tour[i] - 1, tour[i + 1] - 1] += Q / distance_matrix[tour[i] - 1, tour[i + 1] - 1]
        # 考虑最后一个城市到第一个城市的信息素更新
        pheromone_matrix[tour[-1] - 1, tour[0] - 1] += Q / distance_matrix[tour[-1] - 1, tour[0] - 1]

# 打印最终的路径
best_tour = max(ant_tours, key=lambda x: sum(distance_matrix[x[i] - 1, x[i + 1] - 1] for i in range(num_cities - 1)))
best_distance = sum(distance_matrix[best_tour[i] - 1, best_tour[i + 1] - 1] for i in range(num_cities - 1))
print(f"最终最佳路径: {best_tour}, 距离: {best_distance}")

3.

mport pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
from sklearn.preprocessing import LabelEncoder

# 1. 读取数据集
data = pd.read_csv('CarDatas.txt', header=None, delimiter=' ')
# 给数据集添加列名
data.columns = ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety', 'class']

# 2. 将文本数据转换为数值型数据
label_encoder = LabelEncoder()
data_encoded = data.apply(label_encoder.fit_transform)

# 3. 划分训练集和测试集
X = data_encoded.drop('class', axis=1)
y = data_encoded['class']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 4. 朴素贝叶斯算法
nb_classifier = MultinomialNB()
nb_classifier.fit(X_train, y_train)
nb_predictions = nb_classifier.predict(X_test)

# 5. 决策树算法
dt_classifier = DecisionTreeClassifier()
dt_classifier.fit(X_train, y_train)
dt_predictions = dt_classifier.predict(X_test)

# 6. 性能评估
print("朴素贝叶斯性能评估:")
print("准确率:", accuracy_score(y_test, nb_predictions))
print("分类报告:\n", classification_report(y_test, nb_predictions))

print("\n决策树性能评估:")
print("准确率:", accuracy_score(y_test, dt_predictions))
print("分类报告:\n", classification_report(y_test, dt_predictions))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【新界面】基于卷积神经网络的垃圾分类(Matlab)

基于CNN的垃圾识别与分类GUI【新界面】 有需要可直接联系我&#xff0c;基本都在在线&#xff0c;能秒回&#xff01;可加我看演示视频&#xff0c;不懂可以远程教学 1.此项目设计包括两份完整的源代码&#xff0c;有GUI界面的代码和无GUI界面系统的代码。 &#xff08;以下部…

网站访问的基础-HTTP超文本传输协议

BS架构 浏览器Browser⬅➡服务器Server 浏览器和服务器之间通过 IP 地址进行通信&#xff0c;实现数据的请求和传输。 例如&#xff0c;当用户在浏览器中访问一个网站时&#xff0c;浏览器会根据用户输入的网址&#xff08;通过 DNS 解析得到服务器 IP 地址&#xff09;向服…

【C++】递归填充矩阵的理论解析与实现

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;问题描述&#x1f4af;递归实现&#x1f4af;参数解析函数参数详解填充顺序分析递归终止条件 &#x1f4af;示例解析第一层递归第二层递归第三层递归最终输出 &#x1f4af…

Git 仓库托管教程

git远程仓库 常用的远程仓库-->托管服务&#xff1a;github、码云、gitlab等 github需要魔法上网&#xff0c;速度较慢因为在国外且仅仅支持Git&#xff0c;如果不是Git项目是不支持的&#xff1b;码云--gitee国内的代码托管平台&#xff0c;服务器在国内速度快一些&#…

[创业之路-190]:《华为战略管理法-DSTE实战体系》-2-华为DSTE战略管理体系概要

目录 一、DSTE战略管理体系与BLM的关系 1、DSTE战略管理体系概述 2、BLM模型概述 3、DSTE与BLM的关系 二、重新认识流程 1. 流程就是业务本身&#xff0c;流程是业务过程的可视化&#xff1a; 2. 流程是业务最佳路径的经验教训总结&#xff1a; 3. 流程是战略知识资产、…

多智能体架构 Insight-V:针对长链视觉推理瓶颈

多智能体架构 Insight-V&#xff1a;针对长链视觉推理瓶颈 https://arxiv.org/abs/2411.14432 推理智能体与总结智能体协作完成任务&#xff0c;实现复杂视觉任务中的高效推理与总结。其中写了一小段&#xff0c;用迭代 DPO 算法&#xff0c;在每一轮训练中&#xff0c;模型会…

ASP.NET |日常开发中连接Oracle数据库详解

ASP.NET &#xff5c;日常开发中连接Oracle数据库详解 前言一、安装和配置 Oracle 数据访问组件1.1 安装ODP.NET&#xff08;Oracle Data Provider for.NET&#xff09;&#xff1a;1.2 引用相关程序集&#xff1a; 二、配置连接字符串2.1 连接字符串的基本组成部分&#xff1a…

生成树协议STP工作步骤

第一步&#xff1a;选择根桥 优先级比较&#xff1a;首先比较优先级&#xff0c;优先级值越小的是根桥MAC地址比较&#xff1a;如果优先级相同&#xff0c;则比较MAC地址。MAC地址小的是根桥。 MAC地址比较的时候从左往右&#xff0c;一位一位去比 第二步&#xff1a;所有非根…

Redis是什么?Redis和MongoDB的区别在那里?

Redis介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。以下是关于Redis的详细介绍&#xff1a; 一、数据结构支持 字符串&#xff08;String&#xff09; 这是Redis最…

minio 分布式文件管理

一、minio 是什么&#xff1f; MinIO构建分布式文件系统&#xff0c;MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用&#xff0c;它兼容亚马逊 S3 云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数…

【射频IC学习笔记】4 D类功率放大器PA电路设计/loadpull仿真/输出功率及效率PAE计算

一、功率放大器设计指标及电路结构 1. 设计指标 功率放大器的指标要求如下图所示采用D类的开关类型功率放大器&#xff0c;理论上开关类型的PA能够做到100%的效率&#xff0c;但实际上会有一些偏差。像D类功放并不适合高功率射频信号的输出&#xff0c;因为其在射频功率上面的…

【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现二叉排序树的基本算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;二叉树的创建、查找和删除算法。具体如下&#xff1a; (1)由…

Unity UGUI图片循环列表插件

效果展示&#xff1a; 下载链接&#xff1a;https://gf.bilibili.com/item/detail/1111843026 概述&#xff1a; LoopListView2 是一个与 UGUI ScrollRect 相同的游戏对象的组件。它可以帮助 UGUI ScrollRect 以高效率和节省内存的方式支持任意数量的项目。 对于具有10,000个…

5G学习笔记之SNPN系列之ID和广播消息

目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN&#xff1a;Stand-alone Non-Public Network&#xff0c;独立的非公共网络&#xff0c;由NPN独立运营&#xff0c;不依赖与PLMN网络。 SNPN不支持的5GS特性&#xff1a; 与EPS交互 emergency services when the UE acce…

(后序遍历 简单)leetcode 101翻转二叉树

将根结点的左右结点看作 两个树的根结点&#xff0c;后序遍历&#xff08;从叶子结点从下往上遍历&#xff09; 两个树边遍历边比较。 左节点就左右根的后序遍历 右根结点就右左根的后序遍历来写 后序遍历&#xff08;从叶子结点从下往上遍历&#xff09; /*** Definition …

通过ajax的jsonp方式实现跨域访问,并处理响应

一、场景描述 现有一个项目A&#xff0c;需要请求项目B的某个接口&#xff0c;并根据B接口响应结果A处理后续逻辑。 二、具体实现 1、前端 前端项目A发送请求&#xff0c;这里通过jsonp的方式实现跨域访问。 $.ajax({ url:http://10.10.2.256:8280/ssoCheck, //请求的u…

Goby AI 2.0 自动化编写 EXP | Mitel MiCollab 企业协作平台 npm-pwg 任意文件读取漏洞(CVE-2024-41713)

漏洞名称&#xff1a;Mitel MiCollab 企业协作平台 npm-pwg 任意文件读取漏洞(CVE-2024-41713) English Name&#xff1a;Mitel MiCollab /npm-pwg File Read Vulnerability (CVE-2024-41713) CVSS core: 6.8 漏洞描述&#xff1a; Mitel MiCollab 是加拿大 Mitel 公司推出…

现代密码学总结(上篇)

现代密码学总结 &#xff08;v.1.0.0版本&#xff09;之后会更新内容 基本说明&#xff1a; ∙ \bullet ∙如果 A A A是随机算法&#xff0c; y ← A ( x ) y\leftarrow A(x) y←A(x)表示输入为 x x x ,通过均匀选择 的随机带运行 A A A,并且将输出赋给 y y y。 ∙ \bullet …

VMware:CentOS 7.* 连不上网络

1、修改网络适配 2、修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-e33# 修改 ONBOOTyes 3、重启网卡 service network restart 直接虚拟机中【ping 宿主机】&#xff0c;能PING通说明centOS和宿主机网络通了&#xff0c;只要宿主机有网&#xff0c;则 Ce…

Linux —— vim 编辑器

一、什么是vim vim是一个功能强大、高度可定制的文本编辑器。以下是对vim编辑器的具体介绍&#xff1a; 历史背景&#xff1a;vim最初由Bram Moolenaar在1991年开发&#xff0c;作为vi编辑器的增强版&#xff0c;增加了许多新的特性和改进。它继承了vi的基本编辑功能和键盘快捷…