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

server/2024/9/23 0:27:41/

目录

  • 一、采用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.ppmy.cn/server/118388.html

相关文章

【GBase 8c V5_3.0.0 分布式数据库常用几个SQL】

1.检查应用连接数 以管理员用户 gbase&#xff0c;登录数据库主节点。 接数据库&#xff0c;并执行如下 SQL 语句查看连接数。 SELECT count(*) FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;2.查看空闲连接 查看空闲(state 字段为”idle”)且长时间没有更…

React 前端应用结合 Nginx 部署指南及常见错误排查

在现代 Web 开发中&#xff0c;React 已成为构建用户界面的流行选择&#xff0c;而 Nginx 则是一个高性能的 Web 服务器&#xff0c;广泛用于静态文件的托管和负载均衡。在本篇博客中&#xff0c;我们将详细介绍如何将一个 React 应用部署到 Nginx 上&#xff0c;并探讨在部署过…

Git指令

git status git log //克隆 git clone URL //克隆指定分支 git clone -b 分支名 URL //切换本地分支 git checkout 分支名 //创建本地新分支 git branch 新分支名 //显示所有分支 git branch -a //删除本地分支 git branch -d 分支名 //删除远程分支 git push origin --delete …

前端开发深入了解性能优化

前置知识 图片预加载 图片预加载是指在用户访问网页时&#xff0c;提前加载一些图片资源&#xff0c;以便在用户需要查看这些图片时能够更快地显示 原理&#xff1a; 提前请求&#xff1a;在页面加载时&#xff0c;浏览器会发送请求获取图片资源。预加载通常使用 JavaScrip…

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

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

认知小文2《成功之路:习惯、学习与实践》

内容摘要&#xff1a; 在这个充满机遇的时代&#xff0c;成功不再是偶然&#xff0c;而是可以通过培养良好习惯、持续学习和实践来实现的目标。    一、肌肉记忆&#xff1a;技能的基石 成功往往需要像运动员一样&#xff0c;通过日复一日的练习来形成肌肉记忆。无论是健身…

Qt中样式表常用的属性名称定义

Qt中&#xff0c;用好样式表&#xff0c;不但可以做出意想不到的酷炫效果&#xff0c;有时候也能减轻开发量&#xff0c;可能由于你不了解某些样式使用&#xff0c;想破脑袋通过代码实现的效果&#xff0c;反倒不如别人用样式&#xff0c;一两句样式脚本就搞定。 Qt中&#xff…

Spire.PDF for .NET【页面设置】演示:为 PDF 添加背景颜色或背景图像

在 PDF 文档中&#xff0c;背景是指页面内容背后的整体视觉外观。背景可以是简单的纯色&#xff0c;也可以是您选择的图像。向 PDF 添加背景可以帮助您增加文档的视觉趣味&#xff0c;并提高可读性。在本文中&#xff0c;您将学习如何使用Spire.PDF for .NET以编程方式设置 PDF…