遗传算法之GAUL
遗传算法之GAUL简介
- 简介
GAUL(遗传算法工具库的简称)
GAUL is an open source programming library, released under the GNU General Public License. It is designed to assist in the development of code that requires evolutionary algorithms.
GAUL官网地址为:http://gaul.sourceforge.net/
目前发行版本为:devel-0.1849, examples-0.1849
GAUL是一个灵活的代码库,它旨在帮助我们在开发项目过程中,使用遗传或进化算法。它提供的数据结构和处理函数以及数据操作依赖于一系列串行和并行的遗传算法。附加的随机算法用与遗传算法进行比较,通过s-lang接口可以实现很多功能。
- 下载、编译
下载时有两个包,一个是开发版,一个是演示例子版,这里我们使用开发版本 gaul-devel-0.1849-0
编译执行以下命令:
./configure ; make
当你没有安装s-lang时需要执行:
./configure --enable-slang=no ; make
编译成功后则可以使用其工具库了,在tests目录下有实例,可以直接通过命令./test_xxx对其进行运行
- 示例程序
以下为GAUL官方提供的最简单的一个示例程序:
struggle.c
#include <gaul.h> boolean struggle_score(population *pop, entity *entity)
{
int k; /* Loop variable over all alleles. */ entity->fitness = 0.0; /* Loop over alleles in chromosome. */
for (k = ; k < pop->len_chromosomes; k++)
{
if ( ((char *)entity->chromosome[])[k] == target_text[k])
entity->fitness+=1.0;
/*
* Component to smooth function, which helps a lot in this case:
* Comment it out if you like.
*/
entity->fitness += (127.0-fabs(((char *)entity->chromosome[])[k]
-target_text[k]))/50.0;
} return TRUE;
} int main(int argc, char **argv)
{
population *pop=NULL; /* The population of solutions. */ random_seed(); /* Random seed requires any integer parameter. */
pop = ga_genesis_char(
, /* const int population_size */
, /* const int num_chromo */
strlen(target_text), /* const int len_chromo */
NULL, /* GAgeneration_hook generation_hook */
NULL, /* GAiteration_hook iteration_hook */
NULL, /* GAdata_destructor data_destructor */
NULL, /* GAdata_ref_incrementor data_ref_incrementor */
struggle_score, /* GAevaluate evaluate */
ga_seed_printable_random, /* GAseed seed */
NULL, /* GAadapt adapt */
ga_select_one_sus, /* GAselect_one select_one */
ga_select_two_sus, /* GAselect_two select_two */
ga_mutate_printable_singlepoint_drift, /* GAmutate mutate */
ga_crossover_char_allele_mixing, /* GAcrossover crossover */
NULL, /* GAreplace replace */
NULL /* void * userdata */
); ga_population_set_parameters(
pop, /* population *pop */
GA_SCHEME_DARWIN, /* const ga_class_type class */
GA_ELITISM_PARENTS_DIE, /* const ga_elitism_type elitism */
0.9, /* double crossover */
0.2, /* double mutation */
0.0 /* double migration */
);
ga_evolution(
pop, /* population *pop */
/* const int max_generations */
);
printf( "The final solution found was:\n", i);
printf( "%s\n", ga_chromosome_char_to_staticstring(pop, ga_get_entity_from_rank(pop,)));
printf( "Fitness score = %f\n", ga_get_entity_from_rank(pop,)->fitness); ga_extinction(pop); /* Deallocates all memory associated with
* the population and it's entities.
*/ exit(EXIT_SUCCESS);
}
好了,当你的程序中需要用到GAUL时,你就可以参照上面这个小实例进行哦。这块的知识后面再进行补充。。
遗传算法之GAUL的更多相关文章
- 用遗传算法GA改进CloudSim自带的资源调度策略(2)
遗传算法GA的核心代码实现: 最核心: private static ArrayList<int[]> GA(ArrayList<int[]> pop,int gmax,dou ...
- 用遗传算法GA改进CloudSim自带的资源调度策略
首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一 ...
- 遗传算法在JobShop中的应用研究(part 5:解码)
解码操作是整个遗传算法最重要的一步,在这步里面我们利用配置文件中的信息将染色体解码成一个有向无环图. 在介绍解码操作之前我们先来看一下配置文件,在part1绪论中我们已经介绍了一个车间调度问题的基本信 ...
- 遗传算法在JobShop中的应用研究(part4:变异)
下面,我们以车间调度为例来谈谈遗传算法中的另一个重要操作变异.变异操作通常发生在交叉操作之后,它的操作对象是交叉得到的新染色体.在本文中我们通过随机交换染色体的两个位置上的值来得到变异后的染色体,变异 ...
- 遗传算法的C语言实现(二)-----以求解TSP问题为例
上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...
- 遗传算法的C语言实现(一):以非线性函数求极值为例
以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得 ...
- 遗传算法,实数编码的交叉操作之SBX(模拟二进制交叉)
本文主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟二进制交叉. 首先,给出个人用python2.7实现的代码,具体模块已上传到: https://github.com/guojun007/sb ...
- 遗传算法的简单应用-巡回旅行商(TSP)问题的求解
上篇我们用遗传算法求解了方程,其中用到的编码方式是二进制的编码,实现起来相对简单很多, 就连交配和变异等操作也是比较简单,但是对于TSP问题,就稍微复杂一点,需要有一定的策略, 才能较好的实现. 这次 ...
- 转:遗传算法解决TSP问题
1.编码 这篇文章中遗传算法对TSP问题的解空间编码是十进制编码.如果有十个城市,编码可以如下: 0 1 2 3 4 5 6 7 8 9 这条编码代表着一条路径,先经过0,再经过1,依次下去. 2.选 ...
随机推荐
- a链接事件点击函数
<script> <!-- function ChangeStarCommunity(o){ var o = document.getElementById(o); if( docu ...
- IIS 发布添加网站错误:HTTP 错误 500.21 - Internal Server Error 解决方案
原因:在安装Framework v4.0之后,再启用IIS,导致Framework没有完全安装 解决:开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行 ...
- Delegate, Method as Parameter.
代理, 将方法作为另一方法的参数. 类似C里面的函数指针. using System; using System.Windows.Forms; using System.Threading; name ...
- jsonp与JAVA的配合使用
一.客户端 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...
- border:none;与border:0;的区别
border:none表示边框样式无,border:0表示边框宽度为0;当定义了border:none,即隐藏了边框的显示,实际就是边框宽度为0. 当定义边框时,必须定义边框的显示样式.因为边框默认样 ...
- <fmt:formatDate>标签的输出格式:
<fmt:formatDate>标签的输出格式: d 月中的某一天.一位数的日期没有前导零. dd 月中的某一天.一位数的日期有一个前导零. ddd 周中 ...
- QNDataSet打印预览自动关闭问题
问题:打印预览后,数据集自动关闭 解决: TQNDataSet = class(TFDMemTable) private protected procedure PSReset; override; ...
- VBS实现定时发送邮件
原理:建立CDO.Message对象,设置好参数后直接Send就可以了 代码如下: NameSpace = "http://schemas.microsoft.com/cdo/configu ...
- noSuchMethodException问题
上午遇到一个nosuchMethodException 折腾了一上午发现是jar包冲突引起的.首先发现单独运行没问题,和其他项目整合后就有问题,当时以为代码问题,其实早该想到是jar包冲突造成的... ...
- MongoDB服务重启及后台运行解决方法
1 在MongoDB 安装目录下 新建一个test文件夹 mkdir /test 2 切换到MongoDB的安装目录(可通过 find -name 'mongod'命令查找安装目录)下 执行: bin ...