资源下载地址:https://download.csdn.net/download/sheziqiong/86824636
资源下载地址:https://download.csdn.net/download/sheziqiong/86824636

免疫算法

免疫算法的总体介绍:

免疫算法的目的:免疫算法是一种具有对多峰值函数进行多峰值搜索和全局寻优的算法,多峰值函数:多峰值函数优化是一种典型的复杂优化问题,其主要特点是目标函数的局部最优解数量多,全局最优解难以确定.在工程实际中,往往不仅要求能够确定问题目标函数的全局最优解,而且要求搜索出所有局部最优解。传统数值优化的方法:最速下降法、共轭梯度法等等虽然收敛快、精度高,但难以找到所有的局部最优解。

基本概念

自体 指生物体自身的细胞

异体 指来自生物个体之外的细胞

抗原 指在病原体上表达的模式(主要)

抗体 指用于识别抗原的细胞(主要)

亲和力 指抗体和抗原之间的匹配程度

记忆细胞 指亲和力大于指定阈值的抗体

亲和性:匹配程度。

应用免疫算法求解实际问题时,常将抗原、抗体、抗原和抗体之间的亲和性分别对应于优化问题的目标函数、优化解、解与目标函数的匹配程度。

免疫算法的基本原理:

多样性和亲和性

多样性:算法中为了表明全体中的抗体的多样性,引入信息熵的概念。免疫系统的多样性可由以信息熵为参数的公式所表示,多样性,对抗体的克隆和变异有助于产生新的抗体。

亲和性:抗原和抗体之间、抗体和抗体之间的匹配程度可以用亲和性描述。抗原和抗体之间的亲和性:用于表明抗体对抗原的识别程度。

疫算法的基本步骤:

  • 抗原的识别阶段:输入目标函数和各种约束作为免疫算法的抗原
  • 初始抗体的产生阶段:在解空间中用随机方法产生抗体
  • 亲和力的计算:分别计算抗原和抗体 V 之间的亲和性及抗体 V 和抗体 W 之间的亲和性
  • 记忆单元的更新:将与抗原亲和性高的抗体加入到记忆单元,并用新加入的抗体取代与其亲和性最高的原有抗体(抗原的原有抗体,因为为了找到局部最优解)
  • 促进和抑制抗体的产生:计算每个抗体的期望值,抑制期望值低于阈值的抗体;可以知道与抗原间具有的亲和力越高,该抗体的克隆数目越高,其变异率也越低。与抗原亲和性高的抗体或低密度的抗体生存机率较大。由于高亲和性的抗体得到促进,而高密度的抗体受到抑制,体现了免疫系统的多样性。
  • 抗体的产生:通过交叉和变异产生进入下一代的抗体,重复步骤 3-6,直到收敛判断依据满足
  • 终止记忆细胞的迭代:在达到指定阈值的时候终止记忆细胞的生成和选取;

免疫算法一般包括 3 类:克隆选择算法、免疫网络算法、阴性选择算法。

克隆选择算法

克隆选择算法是一个迭代的过程。

算法步骤如下:

在随机空间中生成数量为 n 的抗体。计算抗体中解的值。

进入迭代过程,如满满足终止条件则终止,否则一直重复步骤 3-6。

对 n 个抗体进行克隆变异,即对每一个抗体进行克隆,每个抗体可能克隆出多个抗体,对克隆的抗体进行变异。

将变异后的抗体集合加入原抗体集合中,然后从集合中选取出最优的 n 个抗体。

然后生成一定数量的随机抗体,与上一步选取出的最优抗体放到一个集合中,在该集合中选取出最优的 n 个抗体。

判断终止条件。

在最优的 n 个抗体中选取出最优的抗体,输出。

使用克隆选择算法进行虚拟网络映射使得成本开销的例子:

首先介绍下主要函数的作用:

public ArrayList random_solution(Graph virtual, Graph physic):生成随机解,即将虚拟网络的各个节点映射到物理网络节点上。

public int object_function(int hop, int virtual_link_bandwidth):计算一条虚拟链路映射到一条物理链路后物理链路的成本。

public void evaluate(ArrayList pop, Graph physic, Graph virtual):计算解空间中的各个解(抗体)的值。

public double num_clones(int size, double clone_factor):计算每个解需要克隆出几个解

public void calculate_affinity(ArrayList pop):计算解空间中每个解的亲和度

public double calculate_mutation_rate(Po po, double mutate_factor):计算解的变异值

public ArrayList point_mutation(ArrayList solution, double m_rate,

Graph virtual, Graph physic):对一个解进行变异

public ArrayList clone_and_hypermutate(ArrayList pop, double clone_factor,

double mutate_factor, Graph virtual, Graph physic):对解空间中所有解进行克隆和变异

public ArrayList random_insertion(ArrayList pop, int num_rand, int pop_size

, Graph virtual, Graph physic):生成随机数量 num_rand 的解,与原始解空间 pop 合并,并选取出最优的 pop_size 个解

public Po search(Graph physic, Graph virtual, int max_gens, int pop_size,

double clone_factor, int num_rand, double mutate_factor):克隆选择算法的主体,不断克隆选择迭代,最终选取出最优解。

其算法步骤是这样的:

随机生成固定数量 pop_size 的解(抗体,即映射方案),并利用函数 evaluate 计算各个解的值(即虚拟网络映射到物理网络后,物理网络消耗的成本)

判断是否满足终止条件,本题我设置的终止条件为迭代 max_gens 次,不满足则重复步骤 3

在函数 clone_and_hypermutate 中对初始解空间中的解进行克隆变异,首先对于每一个解,使用 num_clones 计算该解需要克隆出几个解,用 calculate_affinity 计算该解的亲和度,基于亲和度和变异因子利用函数 calculate_mutation_rate 计算该解的变异值,然后基于变异值,利用函数 point_mutation 对该解的克隆解进行变异。所有解的克隆变异后的解放入变异解空间 clones 中。

计算变异解空间中的解的值。

合并变异解空间和原始解空间中的解,排序,选取前 pop_size 个解(最优 pop_size 的解)重新赋予原始解空间,此时原始解空间中只有这前 pop_size 个解。

利用函数 random_insertion 生成随机解,与原始解空间合并,并选取前 pop_size 个解(最优 pop_size 的解)重新赋予原始解空间。

满足迭代条件,输出原始解空间的第一个解,即最优解。

克隆选择算法难以找到全局的最优解,它利用克隆选择,在迭代多次后,在庞大的随机解中一步步走向优化目标(成本低),最终得到一个满足条件的近似最优解的较优解。

当然,如果迭代次数非常多,随机解空间十分庞大,有可能得到最优解。

资源下载地址:https://download.csdn.net/download/sheziqiong/86824636
资源下载地址:https://download.csdn.net/download/sheziqiong/86824636

基于Java实现的免疫算法-克隆选择算法相关推荐

  1. JAVA套料程序_Nest4J是一款基于Java作为开发语言的Nest算法包

    Nest4J Nest4J是一款基于Java作为开发语言的Nest算法包.可以看做一款能在服务端进行运行计算的Nest算法库. 基于SVGNest进行了Java化的改造. 同样这也作为了我本科的毕业设 ...

  2. java数据挖掘算法_[转载]干货,基于Java和C++的数据挖掘Apriori算法实现

    Apriori算法实现 Apriori算法的思想还是很容易理解的,实现起来虽然麻烦,但是还是比较容易的.下面是我使用Java语言实现的Apriori算法,实现了AprioriAlgorithm 类,包 ...

  3. 基于java与springboot结合商品推荐算法实现商品推荐网站+商品管理系统后台,mysql,vue

    面对海量的商品信息如何实现针对不同用户维度开展个性化商品推荐,实现用户线上选购商品,下订单,支付,物流配送等?本次毕设程序基于前后端分离开发模式,搭建系统网络商品推荐系统前台与系统后台商品管理系统,通 ...

  4. 基于Java语言的一次性动态口令算法TOTP

    import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.s ...

  5. 基于Java语言的面对对象进阶算法练习

    主要是对面向对象基础的进一步拓展,对private,static,this等关键字的熟练掌握. 文章目录 一,编写一个类Task,代表GTA5的主线任务. 1.问题 2.代码 3.效果截图 二,通过类 ...

  6. 桶排序算法(基于Java实现)

    title: 桶排序算法(基于Java实现) tags: 桶排序算法 桶排序算法的原理和代码实现 一.桶排序算法的原理 桶排序,顾名思义,会用到"桶",核心思想是将要排序的数据分到 ...

  7. 免疫优化算法 matlab,基于人工免疫克隆选择算法的调度优化MATLAB源码

    人工免疫克隆选择算法是一种比较新型的智能算法,其基本算法结构与遗传算法是类似的,以下源码是为网络节点分组调度问题而设计的算法. function [BestX,BestY,AllABfarm,LC1, ...

  8. 基数排序算法(基于Java实现)

    title: 基数排序算法(基于Java实现) tags: 基数算法 基数排序算法原理及代码实现: 一.基数排序算法的原理 基数排序属于"分配式排序",又称"桶子法&qu ...

  9. 选择排序算法(基于Java实现)

    title: 选择排序算法(基于Java实现) tags: 选择算法 选择排序算法原理及代码实现: 一.选择排序算法的原理 选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间.但是选择 ...

  10. 插入排序算法(基于Java实现)

    title: 插入排序算法(基于Java实现) tags: 插入算法 插入排序算法原理及代码实现: 一.插入排序算法的原理 首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间.初始已排序区间 ...

最新文章

  1. python 递归乘法
  2. Python OpenCV 图片拆分与拼接
  3. 【OpenCV3】OpenCV3.0 在WIN8+VS2012环境下的配置
  4. 特斯拉提升安全监控等级,推出“哨兵模式”
  5. 控制台输出红色字体异常提示err
  6. 不带头结点的单链表------C语言实现(带注释)
  7. C#的二进制序列化组件MessagePack介绍
  8. 软件工程复习提纲——第九章
  9. 2019斗鱼直播节开幕 超1500名人气主播齐聚武汉
  10. 递归法:递归实现排列型
  11. 查看linux内存和硬盘
  12. Python爬虫基础之BeautifulSoup
  13. appcan 开发步骤
  14. 职工科研项目管理系统的设计与实现附代码
  15. Solr分组聚合查询之Facet
  16. 用计算机数字唱歌,悬赏跪求计算器各种歌曲数字谱(最好带和音)
  17. 最大的计算机计数单位,计数单位最大只知道亿?也许更大的计数单位能让你笑出声。...
  18. Unity基本物体和临时对象
  19. 《CalliGAN: Style and Structure-aware Chinese Calligraphy Character Generator》论文笔记
  20. LINUX kernel clock系统,基于内核4.4

热门文章

  1. php卡盟主站_《卡盟源码秒卡购》运营级别卡盟系统源码支持API站对接站[带有SUP+商户+支持秒搭建主站]...
  2. 最近在校园内发现暴风一号病毒(俗称1kb病毒),普及一下查杀和修复的方法
  3. Nginx + Lua搭建文件上传下载服务
  4. 房地产“产权分割制”是什么大杀器?
  5. Cadence OrCad Allegro SPB 16.6 下载及安装破解指南
  6. 【NetBeans IDE 8.2链接MySQL数据库教程】
  7. 精美留言、评论框,带微博表情
  8. Python合成PDF文件
  9. android im 文件发送,极光IM- 基础功能 - 极光文档
  10. ORACLE 12C连接时报ORA28040和ORA01017的错误