遗传算法之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.选 ...
随机推荐
- [手机取证] Apple Watch取证初探
转载文章请注明出处 1. 关于Apple Watch 苹果公司在2015年3月正式发布了智能手表Apple Watch,包括Apple Watch.Apple Watch Sport以及Apple W ...
- 【HOW】如何通过URL给Reporting Services报表传递参数
[本地模式Reporting Services] 参见官方文档:http://msdn.microsoft.com/en-us/library/ms154042.aspx 示例:http://serv ...
- 高斯模糊算法的 C++ 实现
2008 年在一个 PS 讨论群里,有网友不解 Photoshop 的高斯模糊中的半径是什么含义,因此当时我写了这篇文章: 对Photoshop高斯模糊滤镜的算法总结: 在那篇文章中,主要讲解了高斯模 ...
- delphi.thread.同步
注意:此文只是讲线程间的同步,其它同步不涉及. 线程同步是个好话题,因为写线程经常会遇到,所以就写写自己知道的东西. D里面,同步(特指线程同步)从线程的角度来分,有几种情况: 1:主线程与工作线程的 ...
- js模版解析
function JzRender(tpl, data) { // 模版解析 data是对象则返回字符串,是数组则返回字符串数组 if (data instanceof Array) { var s ...
- ReferenceError: $ is not defined (绝对路径和相对路径)
今天使用JQuery时,进入js文件后一直达不到想要的效果,在firebug上调试后发现报错提示"ReferenceError: $ is not defined",显然,这是JQ ...
- 解决WAMP搭建PHP环境后后局域网其他机器无法访问的问题
刚安装wamp以后本地访问localhost或者127.0.0.1可以访问,但是如果局域网内其他电脑访问则出现403错误.从网上找了很多,各种说法都有了,却没几个好用的.解决问题方法如下: 1,首先确 ...
- temp_web
使用vs2010创建.发布.部署.调用 WebService http://blog.sina.com.cn/s/blog_45eaa01a0102vp8z.html c#简易Http服务器 http ...
- linux系统下的软连接与硬链接
前几天在linux系统下安装mongoDB,然后运行脚本导入数据的时候遇到了链接库查询不到的情况,如图 1所示.当时是通过创建软连接的方式解决的这个问题.虽然,通过网上的教程解决了这个问题,但是对于软 ...
- c++ 打印堆栈代码
namespace google {namespace glog_internal_namespace_ {void DumpStackTraceToString(std::string* stack ...