ga遗传算法
⑴ 遗传算法的优缺点
优点:
1、遗传算法是以决策变量的编码作为运算对象,可以直接对集合、序列、矩阵、树、图等结构对象进行操作。这样的方式一方面有助于模拟生物的基因、染色体和遗传进化的过程,方便遗传操作算子的运用。
另一方面也使得遗传算法具有广泛的应用领域,如函数优化、生产调度、自动控制、图像处理、机器学习、数据挖掘等领域。
2、遗传算法直接以目标函数值作为搜索信息。它仅仅使用适应度函数值来度量个体的优良程度,不涉及目标函数值求导求微分的过程。因为在现实中很多目标函数是很难求导的,甚至是不存在导数的,所以这一点也使得遗传算法显示出高度的优越性。
3、遗传算法具有群体搜索的特性。它的搜索过程是从一个具有多个个体的初始群体P(0)开始的,一方面可以有效地避免搜索一些不必搜索的点。
另一方面由于传统的单点搜索方法在对多峰分布的搜索空间进行搜索时很容易陷入局部某个单峰的极值点,而遗传算法的群体搜索特性却可以避免这样的问题,因而可以体现出遗传算法的并行化和较好的全局搜索性。
4、遗传算法基于概率规则,而不是确定性规则。这使得搜索更为灵活,参数对其搜索效果的影响也尽可能的小。
5、遗传算法具有可扩展性,易于与其他技术混合使用。以上几点便是遗传算法作为优化算法所具备的优点。
缺点:
1、遗传算法在进行编码时容易出现不规范不准确的问题。
2、由于单一的遗传算法编码不能全面将优化问题的约束表示出来,因此需要考虑对不可行解采用阈值,进而增加了工作量和求解时间。
3、遗传算法效率通常低于其他传统的优化方法。
4、遗传算法容易出现过早收敛的问题。
(1)ga遗传算法扩展阅读
遗传算法的机理相对复杂,在Matlab中已经由封装好的工具箱命令,通过调用就能够十分方便的使用遗传算法。
函数ga:[x, fval,reason]= ga(@fitnessfun, nvars, options)x是最优解,fval是最优值,@fitnessness是目标函数,nvars是自变量个数,options是其他属性设置。系统默认求最小值,所以在求最大值时应在写函数文档时加负号。
为了设置options,需要用到下面这个函数:options=gaoptimset('PropertyName1', 'PropertyValue1', 'PropertyName2', 'PropertyValue2','PropertyName3', 'PropertyValue3', ...)通过这个函数就能够实现对部分遗传算法的参数的设置。
⑵ 求解:怎样使用MATLAB中的遗传算法计算器Optimization Tool中的GA——Genetic Algorithm,如图,重谢
比如通过MATLAB遗传算法的思想求解f(x)=x*sin(10pi*x)+2.0,-1<=x<=2的最大值问题,结果精确到3位小数。
首先在matlab命令窗口输入f=@(x)-(x*sin(10*pi*x)+2) 输出结果为
>> f=@(x)-(x*sin(10*pi*x)+2)
f =
@(x)-(x*sin(10*pi*x)+2)
接着输入gatool会打开遗传算法工具箱
显示51代之后算法终止,最小结果为-3.85027334719567,对应的x为1.851,由于自定义函数加了负号,所以原式的最大值为3.85027334719567,对应的x为1.851。
不过这是遗传算法得到的结果,每次运行的结果可能会有所不同,而且不一定是确切的最大值。
遗传算法适合应用在一些求最优解比较复杂的问题(常规的算法运算时间过长,甚至无法解决)。
⑶ 遗传算法 matlab自带ga函数
c=[246];%c为目标函数系数
fun_1=@(x)dot(c,x');%y为适应度函数值,求两向量的数量积
A=[10-1;-1-20;-100];%A为AX<=b的系数矩阵
b=[10;-1;0];%b为AX<=b的常数项
Aeq=[011];%AeqX=beq的系数矩阵
beq=12;%AeqX=beq的常数项
[x,y]=ga(fun_1,3,A,b,Aeq,beq)
⑷ 求遗传算法(GA)C语言代码
.----来个例子,大家好理解..--
基于遗传算法的人工生命模拟
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
#include<time.h>
#include<string.h>
#include "graph.c"
/* 宏定义 */
#define TL1 20 /* 植物性食物限制时间 */
#define TL2 5 /* 动物性食物限制时间 */
#define NEWFOODS 3 /* 植物性食物每代生成数目 */
#define MUTATION 0.05 /* 变异概率 */
#define G_LENGTH 32 /* 个体染色体长度 */
#define MAX_POP 100 /* 个体总数的最大值 */
#define MAX_FOOD 100 /* 食物总数的最大值 */
#define MAX_WX 60 /* 虚拟环境的长度最大值 */
#define MAX_WY 32 /* 虚拟环境的宽度最大值 */
#define SX1 330 /* 虚拟环境图左上角点x坐标 */
#define SY1 40 /* 虚拟环境图左上角点y坐标 */
#define GX 360 /* 个体数进化图形窗口的左上角点X坐标 */
#define GY 257 /* 个体数进化图形窗口的左上角点Y坐标 */
#define GXR 250 /* 个体数进化图形窗口的长度 */
#define GYR 100 /* 个体数进化图形窗口的宽度 */
#define GSTEP 2 /* 个体数进化图形窗口的X方向步长 */
#define R_LIFE 0.05 /* 初期产生生物数的环境比率 */
#define R_FOOD 0.02 /* 初期产生食物数的环境比率 */
#define SL_MIN 10 /* 个体寿命最小值 */
/* 全局变量 */
unsigned char gene[MAX_POP][G_LENGTH]; /* 遗传基因 */
unsigned char iflg[MAX_POP]; /* 个体死活状态标志变量 */
⑸ 遗传算法的优缺点
1、早熟。这是最大的缺点,即算法对新空间的探索能力是有限的,也容易收敛到局部最优解。
2、大量计算。涉及到大量个体的计算,当问题复杂时,计算时间是个问题。
3、处理规模小。目前对于维数较高的问题,还是很难处理和优化的。
4、难于处理非线性约束。对非线性约束的处理,大部分算法都是添加惩罚因子,这是一笔不小的开支。
5、稳定性差。因为算法属于随机类算法,需要多次运算,结果的可靠性差,不能稳定的得到解。
大致这些,lz可查阅相关专业书籍!
⑹ 求遗传算法(GA)处理离散的整数型变量的程序。
两种编码都有,可以自己选择。 你在MATLAB2008里输入 gaoptimset 会弹出遗传算法的所有的设置选项及默认项。其中,第一行就是个体的编码方式,第一行如下 PopulationType: [ 'bitstring' | 'custom' | ] 其中,bitstring就是二进制编码,而'doubleVector'即实数编码(MATLAB里实数是用double双精度浮点数表示的,精度很高。大括号{}表示是默认设置。 而中间的'custom'是表示用户自己构造个体的编码形式。
⑺ matlab中遗传算法ga(fitnessfcn,nvars,A,b,Aeq,beq)的目标函数内中变量的大小和参数是可变的怎么实现
真巧,我在用遗传算法优化。GA是一个封装文件,调用的话只需要在工作空间打上相应的参数就行了。例如[xv,fv]=ga(@fitness,0,30,50,100,0.9,0.04,0.01)回车即可运算。其中fitness是调用的另一个M文件函数
⑻ 模拟退火法(SA)和遗传算法(GA)的专业解释
n局部搜索,模拟退火,遗传算法,禁忌搜索的形象比喻:
为了找出地球上最高的山,一群有志气的兔子们开始想办法。
1.兔子朝着比现在高的地方跳去。他们找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是局部搜索,它不能保证局部最优值就是全局最优值。
2.兔子喝醉了。他随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,他渐渐清醒了并朝最高方向跳去。这就是模拟退火。
3.兔子们吃了失忆药片,并被发射到太空,然后随机落到了地球上的某些地方。他们不知道自己的使命是什么。但是,如果你过几年就杀死一部分海拔低的兔子,多产的兔子们自己就会找到珠穆朗玛峰。这就是遗传算法。
4.兔子们知道一个兔的力量是渺小的。他们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。他们制定了下一步去哪里寻找的策略。这就是禁忌搜索。
⑼ 遗传算法:matlab中ga函数参数options该怎么设置
options可以不写有默认设置。
options是一个结构体要用函数gaoptimset()设置。
options=gaoptimset()然后把options填到ga()里面。
gaoptimset('属性名1',数值1,'属性名2',数值2......)。
常用设置: