SFLA跳蛙算法

SFLA=SCE+PSO

SCE: shuffled complex evolution algorithm(Duan 1992) = CRS(controlled radom search Price 1978)+Competive evolution(Holland 1975)+shuffling

SCE算法背后的理念是将全球搜索作为自然进化的过程。人口被划分为几个社区(综合体),每个社区都被允许独立发展。经过定义的进化数量后,复合体被迫混合,新的群落通过洗牌过程形成。这一策略有助于通过共享每个社区独立获得的信息和属性来改进解决方案。

一、framework

想想一群青蛙在沼泽中跳跃;沼泽在离散的地方有很多石头,青蛙可以跳过这些石头来找到最大数量的可用食物。青蛙被允许互相交流,这样他们就可以利用别人的信息来改进他们的模因。

在每个模因中,青蛙被其他青蛙的想法感染;因此他们经历了一个迷因进化。迷因进化提高了个体模因的质量,并提高了个体青蛙对目标的表现。

为了确保感染过程具有竞争性,需要有更好的模因(思想)的青蛙比那些思想贫乏的青蛙更能促进新思想的发展。用三角形概率分布选择青蛙为更好的想法提供了竞争优势。在进化过程中,青蛙可能会根据memeplex的信息或整个种群中最好的信息改变它们的模因。

模因型(s)的增量变化对应于跳跃的步长,新的模因对应于青蛙的新位置。
在一只青蛙改善了它的位置后,它又回到了社区。

在一定数量的模因演化时间循环之后,模因组被迫混合,并通过一个洗牌过程形成新的模因。这种洗牌提高了被沼泽不同地区的青蛙感染后的模因的质量。
青蛙的迁移(想法和/或设计的交叉受精)加速了搜索过程,以感染的形式分享他们的经验,并确保任何特定兴趣的文化进化都是没有区域偏见的。

二、steps

全局搜索

step 0  Initialize. 选择m和n。其中m是模因memeplexes的数量, n是 is 每个模因中青蛙的数量。在沼泽中总样本大小为F=mn。
step 1 生成一个虚拟人口。虚拟青蛙U(1), U(2), U(3), ..., U(F)

step 2 青蛙排序。对F型青蛙进行排序,以降低其性能值。储存在X队列中。记录下最好的青蛙的位置 PX =U(1) 。

step 3 分区青蛙into memeplexes。将数组X分割成 m个memeplexes Y1,Y2,…Ym,每一个都含有n个青蛙。

step 4 每个memplexes的内存演化。发展每个memeplex Yk,k = 1,…m 根据下面概述的青蛙跳跃算法。
step 5 重组模因。在每个memeplex中都有一个定义数量的memetic演化步骤,然后替换Y1…Ym 用X表示,X = {Yk,k = 1, .., m}。排序X以降低性能值。更新人口最佳青蛙的位置PX。

step 6 检查收敛。如果收敛条件满足,停止。否则,返回到步骤3。通常情况下,当至少一只青蛙携带着“最好的记忆模式”时,决定何时停止的决定是连续的时间循环。或者,可以定义一个最大的函数评估总数。

局部搜索:跳蛙算法

在全局搜索的第4步,每个memeplex的演化都独立地持续了N次。在memeplexes进化后,算法返回到对全局探索的重组。下面是对每个memeplex的局部搜索的详细信息。
step 0 设置im = 0,在这里我计算memeplex的数量,并将与memeplexes的总数m比较。
           设置iN为= 0,iN用于计算进化步骤的数目,将与在每个memeplex中完成的步骤的最大数字N进行比较。
step 1 im=im+1

step 2 iN=iN+1

Consideragroupoffrogsleapinginaswamp;theswamphasanumberofstonesatdiscrete locations on to which the frogs can leap to ?nd the stone that has the maximum amount of available food. The frogs are allowed to communicate with each other, so that they can improvetheirmemesusingothers’information

时间: 2024-10-13 10:20:39

SFLA跳蛙算法的相关文章

实验三 跳表算法设计与实现

一.实验名称:跳表算法设计与实现 二.实验目的: 掌握跳表的数据结构. 掌握跳表插入算法的思想和实现. 三.实验内容 完善下列程序,并回答问题. 1 #include <iostream.h> 2 #include<stdlib.h> 3 4 enum ResultCode{Underflow, Overflow, Success, Duplicate, RangeError, NotPresent}; 5 template <class T> 6 struct SNo

青蛙跳台阶算法

一.问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共需要多少种跳法. 思路:首先考虑n等于0.1.2时的特殊情况,f(0) = 0   f(1) = 1  f(2) = 2 其次,当n=3时,青蛙的第一跳有两种情况:跳1级台阶或者跳两级台阶,假如跳一级,那么 剩下的两级台阶就是f(2):假如跳两级,那么剩下的一级台阶就是f(1),因此f(3)=f(2)+f(1)  当n = 4时,f(4) = f(3) +f(2),以此类推...........可以联想到F

倒排索引优化 - 跳表

在前面一篇介绍 倒排索引 的文章中我们知道, 两个关键字的合并操作的时候复杂度是 θ(N), 如果在合并操作时遇到最极端的情况, 所扫描和比较的次数是两个列表集合的所有元素个数之和, 即是线性增长的, 这在数据量特别大的时候是很低效的. 我们还是看一下两个集合的合并操作代码示例: a = [1, 2, 3, 6, 9, 11, 45, 67] b = [4, 6, 13, 45, 69, 98] i = j = 0 result = [] while i < len(a) and j < le

排序算法时间和空间复杂度

跳表算法:http://blog.jobbole.com/111731/ 基数算法:http://blog.csdn.net/lemon_tree12138/article/details/51695211

poj 1553

题意:求1到2所有路径中最小蛙跳   蛙跳:在一条路径中所有蛙跳中的最大蛙跳 思路:dijska算法思想 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #include<iostre

C语言::验证花括号成对出现

题目要求 编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现. 注意:你不必担心注释内部.字符串常量内部和字符常量形式的花括号. 算法分析 我们先判断左花括号的数量是否相等. 如果左右花括号数量不等,肯定不成对! 如果左右花括号数量相等,一定就成对吗??? 好像也不一定. 我们来举例分析一下,左右花括号相等时可能会出现的情况: 1.{{{{{}}}}}(匹配) 2.{}{}{}{}{}(匹配) ... 3.}}}}}{{{{{(不匹配) 4.{{{{}}}}}{(

HDU 2586 How far away ? (初学LCA)

How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7739    Accepted Submission(s): 2769 Problem Description There are n houses in the village and some bidirectional roads connecting

AI相关 TensorFlow -卷积神经网络 踩坑日记之一

上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是google开源出来的人工智能库,由python语言写的 官网地址:http://www.tensorflow.org/   请用科学上网访问 中文地址:http://www.tensorfly.cn/ 当然还有其他AI库,不过大多数都是由python 写的 .net 的AI库叫 Accord.net

39 进程调度实验

一. 实验目的 1.用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 2.实验要求 3.设计一个有 N(N不小于5)个进程并发执行的进程调度模拟程序. 4.进程调度算法:“时间片轮转法”调度算法对N个进程进行调度. 二. 实验内容和要求 完成两个算法(简单时间片轮转法.多级反馈队列调度算法)的设计.编码和调试工作,完成实验报告. 1) 每个进程有一个进程控制块(PCB)表示.进程控制块包含如下信息:进程名.优先级.到达时间.需要运行时间.已用CPU时间.进程状态等等. 2