算法学习
算法主要包括了:分枝定界法(BB),遗传算法(GA),差分遗传算法(DE),分布估计法(EDA),蚁群算法(ACO),粒子群算法(PSO),免疫算法(IA)
(1)c++工程并未使用mat2c++,正在将EDA算法使用完成,就目前的测试,函数可以正常使用,没有问题,可以考虑逐步替换 (2)mat2c++函数后续根据实际过程中遇到的函数,进行更新
除算法以外,我还尝试在c++中复现了matlab中的一些常用的函数和操作,在mat2c++文件夹中
对于每个算法都提供了matlab版本和c++版本,有些算法提供了不同的运用背景,由于本人c++算法不精,没有考虑一些显示的界面库,如果有需求,可以考虑采用OpenCV,将需要显示的结果转换为Mat的像素点,我就没有考虑这么多,因为感觉有点麻烦,下面简要介绍一下文件夹包含的文件和算法的介绍
在BB文件夹内工程主要是建立链表和二叉树
分枝定界法的思想就是始终围绕一颗搜索树进行,将原问题看作搜索树的根节点,分枝的含义就是将大的问题分割成小的问题,大的问题看作为父节点,小的问题看作为子节点,大问题可以看作父节点,那么从大的问题分割出来的小问题就是父节点的子节点了。分枝的过程是不断的给树增加子节点的过程。定界就是在分枝的过程中检查子问题的上下界,如果自问题不能产生一个比当前最优解还有优的问题的解,那么砍掉这一支。直到所有子问题都不能产生一个更优解时,算法结束。
ga-matlab主要包含TSP问题和求解最值问题
ga-c++主要采用了轮盘赌算法,算法也是为了求解最值问题
遗传算法可解决许多问题:寻路问题,8数码问题,囚犯问题,找圆心问题,TSP问题,生产调度问题、人工生命模拟等。
模拟自然选择和自然遗传过程中的繁殖、杂交和突变,利用遗传算法求解问题时,问题的每一个可能解都被编码成一个染色体,即个体,若干个个体构成了群体(所有可能解)。 模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换
在遗传算法开始时,总是随机的产生一些个体(即初始解),根据预定的目标函数对每一个个体进行评估,给出一个适应度值,基于此适应度值,选择一些个体用来产生下一代,选择操作体现了“适者生存”的原理
“好”的个体被用来产生下一代,“坏”的个体则被淘汰,然后选择出来的个体,经过交叉和变异算子进行再组合生成新的一代
这一代的个体由于继承了上一代的一些优良性状,因而在性能上要优于上一代,这样逐步朝着最优解的方向进化.因此,遗传算法可以看成是一个由可行解组成的群体初步进化的过程.
DE两个文件夹也是解决了最值的问题
DE算法与GA算法一样,也是模拟了一种生物进化的随机模型,通过反复迭代,是的那些适应环境的个体被保留了下来。相比于GA,DE保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和一对一的竞争生存策略,降低遗传操作的复杂性。同时,DE特有的记忆能力使其可以动态跟踪当前的搜索情况,以调整搜索策略,具有较强的全局收敛能力和鲁棒性,且不需要借助问题的特征信息,适于求解一些利用常规的数学规划方法无法求解的复杂环境中的优化问题。
DE算法主要用于求解连续变量的全局优化问题,其主要工作步骤与其他进化算法基本一致,只要包括变异、交叉、选择三种操作。算法的基本思想是从某一随机产生的初始种群开始,利用从种群中随机选取的两个个体的差向量作为第三个个体的随机变化源,将差向量加权后按照一定的规则与第三个个体求和而产生变异个体,该操作成为变异。然后,变异个体与某个预先决定的目标个体进行参数混合,生成实验个体,这一过程称为交叉。如果实验个体的适应度值由于目标个体的适应度值,则在下一代中饰演个体取代目标个体,否则,目标个体依旧保留,该操作称为选择。在每一代进化过程中,每一个体矢量作为目标个体一次,算法通过不断迭代计算,保留优良个体,淘汰劣质个体,引导搜索过程向全局最优解逼近。
DE-matlab解决TSP和0-1背包问题
DE-c++解决TSP问题
分布估计算法,本质上是一种基于概率模型的新型进化算法,遗传算法与统计学习相结合,是自然计算的友谊典型实现模式。他通过对当前找到的较优个体集合建立概率模型来引导算法下一步的搜索范围,并从所获得较优解的概率分布函数中臭氧产生出新的个体。概率模型用于描述取值域中优秀个体分布情况的一系列函数或其他数学工具(包括概率密度函数、条件概率、边缘概率等)。
遗传算法是对个体进行遗传操作(交叉、变异等),“微观“层面模拟生物的进化,分布算法是对于整个群体的分布建立一个概率模型,通过这个概率模型来描述进化的方向,是”宏观“层面的模拟
ACO-matlab解决路径规划和最值问题
ACO-c++解决最值问题
蚁群算法是模拟蚂蚁觅食的原理,设计出的一种群集智能算法。
蚂蚁在觅食的过程中会在其经过的路径上留下一种称为信息素的物质,并在觅食过程中感知环境中信息素以知道自己的行动方向,蚂蚁总是向信息素高的方向移动。大量蚂蚁组成的集体觅食行为就表现为对一种信息素的正反馈现象。
通往某一事物的路径越短,路径上的蚂蚁就越多,信息素就越多,妈耶选择的可能性就越高。
PSO属于一种群智能算法,通过模拟鸟群捕食行为设计。
1)假设区域内只有一块食物(也就是区域内的最优解),鸟群的任务就是找到这个食物源。
2)鸟群的任务就是找到这个食物源
3)鸟群在整个搜索的过程中,通过传递各自的信息,让其他鸟知道自己的位置,通过这样的协作判断自己是否为最优解
4)最优解信息传递给整个鸟群是的所有的鸟都能聚集在食物的周围,问题收敛
1、抗原识别。输入目标函数和各种约束作为免疫算法的抗原
2、初始抗体生成。随机生成初始抗体种群
3、亲和力计算。九三抗体的适应值
4、免疫处理。包括免疫选择、克隆、变异和抑制。
1、免疫选择:根据抗体亲和力选出亲和力较高的抗体
2、克隆:对选出的亲和力较高的抗体进行复制
3、变异:对克隆得到的抗体进行交叉、变异操作,使亲和力发送变化
4、抑制:对变异的抗体进行选择,保留亲和力较高的抗体
5、群体刷新。将免疫选择的抗体和免疫抑制后的抗体组合为一个集合。保留其中亲和度较高的抗体,使这些抗体进入新的种群。新的种群不足的部分随机产生,以增加多样性