人工免疫算法(AIS算法)求解实例---旅行商问题 (TSP)

目录

  • 一、采用AIS求解 TSP
  • 二、 旅行商问题
    • 2.1 实际例子:求解 6 个城市的 TSP
    • 2.2 ==**求解该问题的代码**==
    • 2.3 代码运行过程截屏
    • 2.4 代码运行结果截屏(后续和其他算法进行对比)
  • 三、 ==如何修改代码?==
    • 3.1 减少城市坐标,如下:
    • 3.2 增加城市坐标,如下:
  • 四、人工免疫算法(Artificial Immune System, AIS)原理
      • 4.1 AIS算法的核心概念
      • 4.2 AIS算法的工作流程
      • 4.3 AIS算法的优缺点
        • 4.3.1 优点
        • 4.3.2 缺点
      • 4.4 AIS算法的应用

一、采用AIS求解 TSP

求解代码在文中,后续会出其他算法求解TSP问题,你们参加数学建模竞赛只需要会改代码即可。

用来对比此专栏的
遗传算法(GA算法)求解实例—旅行商问题 (TSP)
粒子群算法(PSO算法)求解实例—旅行商问题 (TSP)
模拟退火算法(SA算法)求解实例—旅行商问题 (TSP)
蚁群算法(ACO算法)求解实例—旅行商问题 (TSP)
禁忌搜索算法(TS算法)求解实例—旅行商问题 (TSP)
差分进化算法(DE算法)求解实例—旅行商问题 (TSP)
注意每次运行算法得到的结果可能不太一样。

我知道大家对原理性的东西不感兴趣,我把原理性的东西放在后面,大家如果需要写数模论文可以拿去,但是记得需要改一改,要不然查重过不去。

二、 旅行商问题

2.1 实际例子:求解 6 个城市的 TSP

假设有 6 个城市,其坐标如下:

城市X 坐标Y 坐标
01020
13040
22010
34030
41010
55020

目标是找到一个经过所有城市且总距离最短的路径。

2.2 求解该问题的代码

import numpy as np
import random# 定义城市坐标
cities = np.array([[10, 20],[30, 40],[20, 10],[40, 30],[10, 10],[50, 20]
])# 计算两城市之间的欧几里得距离
def calculate_distance(city1, city2):return np.sqrt(np.sum((city1 - city2) ** 2))# 计算总旅行距离
def total_distance(path):distance = 0for i in range(len(path) - 1):distance += calculate_distance(cities[path[i]], cities[path[i + 1]])distance += calculate_distance(cities[path[-1]], cities[path[0]])  # 回到起点return distance# 克隆与变异操作
def clone_and_mutate(antibody, clone_rate, mutate_rate):clones = []num_clones = max(int(clone_rate * len(antibody)), 1)  # 确保至少有一个克隆for _ in range(num_clones):clone = antibody[:]if random.random() < mutate_rate:# 随机交换路径中的两个城市i, j = random.sample(range(len(clone)), 2)clone[i], clone[j] = clone[j], clone[i]clones.append(clone)return clones# 人工免疫算法求解 TSP
def ais_tsp(cities, population_size=50, clone_rate=0.1, mutate_rate=0.2, max_iter=100):# 初始化种群population = [random.sample(range(len(cities)), len(cities)) for _ in range(population_size)]best_solution = population[0]best_distance = total_distance(best_solution)for iteration in range(max_iter):# 计算适应度(亲和度)affinities = [1 / total_distance(antibody) for antibody in population]# 克隆与变异new_population = []for i in range(population_size):clones = clone_and_mutate(population[i], clone_rate, mutate_rate)new_population.extend(clones)# 检查新种群是否为空,若为空则使用原始种群if not new_population:new_population = population[:]# 选择新的候选解new_population.sort(key=total_distance)  # 根据总距离排序population = new_population[:population_size]  # 保留最好的候选解# 更新最佳解current_best_distance = total_distance(population[0])if current_best_distance < best_distance:best_solution = population[0]best_distance = current_best_distanceprint(f"Iteration {iteration + 1}: Best distance = {best_distance:.2f}")return best_solution, best_distance# 运行人工免疫算法
best_path, best_distance = ais_tsp(cities)
print("Best path:", best_path)
print("Best distance:", best_distance)

2.3 代码运行过程截屏

在这里插入图片描述

2.4 代码运行结果截屏(后续和其他算法进行对比)

在这里插入图片描述

三、 如何修改代码?

这一部分是重中之重,大家参加数学建模肯定是想跑出自己的结果,所以大家只需要把自己遇到的数学问题,抽象成TSP问题,然后修改代码的城市坐标,然后运行即可。

# 定义城市坐标
cities = np.array([[10, 20],[30, 40],[20, 10],[40, 30],[10, 10],[50, 20]
])

3.1 减少城市坐标,如下:

# 定义城市坐标
cities = np.array([[10, 20],[30, 40],[20, 10],[40, 30]
])

3.2 增加城市坐标,如下:

# 定义城市坐标
cities = np.array([[10, 20],[30, 40],[20, 10],[40, 30],[30, 40],[20, 10],[10, 10],[50, 20]
])

四、人工免疫算法(Artificial Immune System, AIS)原理

人工免疫算法(AIS)是一种受到生物免疫系统启发而发展的智能优化算法。生物免疫系统具有识别和消灭外部病原体(如病毒、细菌等)的能力,通过学习和记忆机制,能够快速识别并应对新入侵的病原体。AIS 模拟了这种免疫系统的特性和机制,用于解决复杂的优化和分类问题。

4.1 AIS算法的核心概念

  • 抗体(Antibody):在 AIS 中,抗体通常表示一个候选解。例如,在旅行商问题(TSP)中,一个抗体可以表示城市访问顺序(路径)。

  • 抗原(Antigen):抗原是需要被识别和优化的问题或目标。在优化问题中,抗原表示需要求解的目标(例如,TSP 中的最短路径)。

  • 亲和力(Affinity):亲和力表示抗体与抗原之间的匹配程度。在优化问题中,亲和力通常由目标函数值表示,亲和力越高(或越低,取决于优化目标),表示解的质量越好。

  • 克隆选择(Clonal Selection):克隆选择是 AIS 的核心机制之一,表示根据亲和力对抗体进行选择、克隆和变异。质量越高的抗体会被选择生成更多的克隆体,并通过变异产生新的候选解。

  • 亲和力成熟(Affinity Maturation):在克隆选择之后,通过对克隆体进行变异和选择,使抗体的亲和力进一步提高,从而产生更好的解。这类似于遗传算法中的“变异”操作。

  • 记忆集(Memory Set):记忆集存储当前找到的最优解,以防止算法丢失已找到的优秀解。

4.2 AIS算法的工作流程

  1. 初始化:随机生成一组抗体(候选解),形成初始种群。

  2. 计算亲和力:对每个抗体计算其亲和力(即适应度函数),用以衡量抗体的质量。

  3. 克隆选择:根据亲和力对抗体进行选择,选择质量较高的抗体进行克隆。克隆率通常与亲和力成正比,即亲和力越高的抗体被克隆的数量越多。

  4. 变异操作:对克隆体进行变异操作,产生新的候选解。变异的目的是引入多样性,以探索解空间中的更多区域。

  5. 亲和力成熟:对变异后的克隆体重新计算亲和力,选择质量更高的解更新种群。

  6. 记忆更新:将当前找到的最优解存入记忆集中,以防止丢失优秀解。

  7. 终止条件:重复步骤 2-6,直到满足终止条件(如达到最大迭代次数或找到满意的解)。

4.3 AIS算法的优缺点

4.3.1 优点
  1. 全局优化能力强
    通过克隆选择和亲和力成熟机制,AIS 能有效地进行全局搜索,避免陷入局部最优解。

  2. 自适应性好
    AIS 能自动调整种群结构,通过亲和力评价和选择机制,提高算法的搜索效率。

  3. 具有记忆能力
    AIS 可以记住并保存最优解,通过记忆集的机制防止解的退化,保持解的质量。

  4. 解决多样性问题
    通过变异操作引入多样性,保持种群多样性,避免早熟收敛,提高算法的搜索空间覆盖率。

  5. 适用于多种优化问题
    AIS 广泛应用于优化问题(如 TSP、背包问题)、模式识别与分类、数据挖掘与特征选择、网络安全等领域。

4.3.2 缺点
  1. 收敛速度较慢
    在大规模或复杂问题中,由于需要进行大量的克隆、变异和亲和力计算,收敛速度可能较慢。

  2. 参数设置敏感
    算法性能对参数的选择(如克隆率、变异率、种群大小等)敏感,参数不恰当可能导致局部最优或过早收敛,需要大量调参。

  3. 容易陷入局部最优解
    尽管变异操作引入了多样性,但在解空间复杂或具有大量局部最优解的情况下,算法仍有可能陷入局部最优。

  4. 计算复杂度高
    克隆、变异和亲和力计算的操作对计算资源要求较高,对于大规模问题或多维问题,计算复杂度显著增加。

  5. 对问题特征依赖较强
    AIS 的有效性在很大程度上取决于问题的特征,在某些问题上可能无法比其他优化算法取得更好效果。

  6. 缺乏理论分析
    相较于其他经典优化算法,AIS 算法的理论基础和收敛性分析较少,理论研究不够完善。

  7. 实现复杂度较高
    AIS 涉及多个复杂的过程(如克隆选择、亲和力成熟等),实现和调试较为复杂,需要更多的时间和精力。

4.4 AIS算法的应用

  • 优化问题(如 TSP、背包问题)
  • 模式识别与分类
  • 数据挖掘与特征选择
  • 网络安全(如入侵检测)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows环境本地部署Oracle 19c及卸载实操手册

前言: 一直在做其他测试,貌似都忘了Windows环境oracle 19c的部署,这是一个很早很早的安装记录了,放上来做个备录给到大家参考。 Oracle 19c‌:进一步增强了自动化功能,并提供了更好的性能和安全性。这个版本在自动化、性能和安全性方面进行了重大改进,以满足现代企业对数…

Serverless 安全新杀器:云安全中心护航容器安全

作者&#xff1a;胡志广(独鳌) 云安全中心对于 Serverless 容器用户的价值 从云计算发展之初&#xff0c;各大云厂商及传统安全厂商就开始围绕云计算的形态来做安全解决方案。传统安全与云计算安全的形态与做法开始发生变化&#xff0c;同时随着这 10 多年的发展&#xff0c;…

12种常见的华为杯数学建模竞赛matlab代码(建议收藏)

1.使用神经网络模型(向量量子化方法LVQ)解决分类/预测问题 clc;clear;​% 第一类蝗虫的触角和翅膀p1 [1.24, 1.27; 1.36, 1.74; 1.38, 1.64; 1.38, 1.82; 1.38, 1.90; 1.40, 1.70; 1.48, 1.82; 1.54, 1.82; 1.56, 2.08];​% 第二类蝗虫的触角和翅膀p2 [1.14, 1.82;…

小众语言ruby在苹果中的初步应用

前言 感觉Ruby在苹果系统中充当一种脚本语言来使用。 1、直接输入ruby没有反应 2、可显示结果的命令 ruby -e "puts Goodbye, cruel world!" 效果如下图&#xff1a; 说明苹果系统中ruby已经安装完毕&#xff0c;或者就是自带的。 3、编辑运行第一个ruby程序 输入…

阿里云盘bug,个人照片泄露 安当TDE透明加密完美保障数据安全

近期&#xff0c;阿里云盘出现了一个严重的隐私安全事件。用户在创建新相册时&#xff0c;系统意外地加载出了其他用户的照片&#xff0c;这些照片包括自拍、风景照、家人旅游照片等&#xff0c;引发了用户对隐私安全的担忧。阿里云盘官方对此事件迅速作出回应&#xff0c;确认…

ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge

目录 一、ADB 介绍 二、Windows 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 验证 ADB 安装 4. 配置环境变量 5. 验证全局 ADB 使用 三、macOS 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 配置环境变量 4. 验证 ADB 安装 四、Linux 系统安装 ADB 1. 使用包管理器安装…

MySQL高阶1890-2020年最后一次登录

目录 题目 准备数据 分析数据 题目 编写解决方案以获取在 2020 年登录过的所有用户的本年度 最后一次 登录时间。结果集 不 包含 2020 年没有登录过的用户。 返回的结果集可以按 任意顺序 排列。 准备数据 Create table If Not Exists Logins (user_id int, time_stamp …

钉钉 钉钉打卡 钉钉定位 2024 免费试用 保用

打卡助手定位 如图&#xff0c;表示开启成功&#xff0c;软件已定位到钉钉打卡位置。 测试显示&#xff0c;高德地图位置已成功修改。 开启助手定位后&#xff0c;观察效果&#xff0c;打卡按钮由无法打卡变为可打卡状态&#xff0c;照片还显示打卡地点。 伙伴们担心作弊行为会…

《程序猿之设计模式实战 · 观察者模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

摩尔-彭罗斯伪逆(pinv)

摩尔-彭罗斯伪逆是一种矩阵&#xff0c;可在不存在逆矩阵的情况下作为逆矩阵的部分替代。此矩阵常被用于求解没有唯一解或有许多解的线性方程组。 对于任何矩阵 A 来说&#xff0c;伪逆 B 都存在&#xff0c;是唯一的&#xff0c;并且具有与 A’ 相同的维度。如果 A 是方阵且非…

[Linux]自定义shell详解

自定义shell 前言1.命令行提示符&#xff0c;字符串的打印1.1命令行提示符2.命令行字符串 2.0对命令行字符串进行切割2.执行命令3.有趣的小问题完整代码 前言 写之前我们先看看一个完整的shell都包括了什么 $符号前面&#xff08;包括这个符号&#xff09;就是命令行提示符&a…

Mac 上哪个剪切板增强工具比较好用? 好用剪切板工具推荐

在日常文字编辑中&#xff0c;我们经常需要重复使用复制的内容。然而&#xff0c;新内容一旦复制&#xff0c;旧内容就会被覆盖。因此&#xff0c;选择一款易用高效的剪贴板工具成为了许多人的需求。本文整理了一些适用于 macOS 系统的优秀剪贴板增强工具&#xff0c;欢迎大家下…

OJ 旋转图像

题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例&#xff1a; 解题规律: 我们以题目中的示例二作为例子&a…

2024年全新deepfacelive如何对应使用直播伴侣-腾讯会议等第三方软件

# 2024年全新deepfacelive如何对应使用直播伴侣-腾讯会议等第三方软件 前提按照之前的步骤打开deepfacelive正确配置并且在窗口已经输出了换脸后的视频&#xff0c;不懂步骤可以移步 https://doc.youyacao.com/88/2225 ## 首先下载obs并配置 https://obsproject.com/ 通过…

Vue: 创建vue项目

目录 一.创建项目 二.项目添加 三.添加成功 一.创建项目 打开本机终端输入npm create vuelatest 二.项目添加 1. 项目名称&#xff1a; Project name: one_vue 2.是否添加TypeScript支持&#xff1a;Add TypeScript? Yes 3.是否添加JSX支持&#xff1a;Add JSX Suppor…

英飞凌 PSoC6 评估板 CAPSENSE 触摸滑条应用示例

PSoC™ 62 with CAPSENSE™ evaluation kit 开发板&#xff08;以下简称 PSoC 6 RTT 开发板&#xff09;是英飞凌&#xff08;Infineon&#xff09;联合 RT-Thread 发布一款面向物联网开发者的 32 位双核 MCU 开发套件&#xff0c;其默认内置 RT-Thread 物联网操作系统。本文主…

《网络协议 - HTTP传输协议及状态码解析》

文章目录 一、HTTP协议结构图二、HTTP状态码解读1xx: 信息响应类2xx: 成功响应类3xx: 重定向类4xx: 客户端错误类5xx: 服务器错误类 一、HTTP协议结构图 二、HTTP状态码解读 HTTP状态码&#xff08;英语&#xff1a;HTTP Status Code&#xff09;是用以表示网页服务器超文本传…

java通过org.eclipse.milo实现OPCUA客户端进行连接和订阅

前言 之前写过一篇关于MQTT的方式进行物理访问的文章&#xff1a;SpringBoot集成MQTT&#xff0c;WebSocket返回前端信息_springboot mqtt websocket-CSDN博客 最近又接触到OPCUA协议&#xff0c;想通过java试试看能不能实现。 软件 在使用java实现之前&#xff0c;想着有没…

品牌力是什么?如何评估企业品牌影响力?

品牌影响力&#xff0c;其实就是指品牌在消费者心智中所占据的位置&#xff0c;以及它对消费者购买决策和行为的影响力。如果一个企业的品牌影响力越强&#xff0c;它在消费者心中的印象就越深刻&#xff0c;能够更有效地驱动消费者的购买行为&#xff0c;形成品牌忠诚度&#…

2024.9.20营养小题【2】(动态分配二维数组)

这道题里边涉及到了动态分配二维数组的知识点&#xff0c;不刷这道题我也不知道这个知识点&#xff0c;算是一个比较进阶一点的知识点了。 参考&#xff1a;C语言程序设计_动态分配二维数组_哔哩哔哩_bilibili【C/C 数据结构 】二维数组结构解析 - 知乎 (zhihu.com)