什么是遗传算法?
遗传算法是基于生物进化过程中的自然选择机制而解决优化问题的一种算法。在解决的优化问题中既包含无约束优化问题又包含具有约束的优化问题。遗传算法不断的更新修改潜在解组成的种群。在算法迭代的每一步中,算法在当前种群中随机的选择一些个体作为父代,让后让这些父代产生一些子代。经过连续世代的运行,种群将向最优解的方向进化。你可以使用遗传算法解决各种传统方法不能解决的各种各样的优化问题。这些问题包括目标函数是离散的、不可微的、高度非线性的、随机的等问题。
在当前种群中, 遗传算法主要使用3种类型的规则来产生下一代:
1.选择:选择父代。
2.交叉:结合父代中的两个个体,产生下一代中的个体,这些个体是父代的孩子。
3.变异:随机的改变一些父代个体,让其成为下一代中的子个体。
执行遗传算法
执行遗传算法有两种方法:1命令行方式,2.图形界面方式
1.命令行方式
在命令行中输入下面格式的语句
[x fval] = ga(@fitnessfun, nvars, options)
其中:@fitnessfun是适应度函数的句柄(如果你还不知道句柄的概念,那么你需要补充一下Matlab的知识) ,
nvars是适应度函数中独立变量的个数,options是算法执行过程中,所有的可选项,当然你完全可以不
输入这个参数,因为遗传算法工具箱会给我们提供一些默认的选项,这些默认的选项针对于大多数问题都是
可行的,除非你要实现自己的一些特有的方法时才会需要修改这些选项。
返回值中:
x是算法在活着最优值时的点的坐标。
fval是适应度函数最后的结果。
2.图形界面方式
如果你想使用图形界面方式,可以在命令行窗口中输入:optimtool('ga'),或者在matlab的开始菜单中
选择最优化工具,具体的启动方式可以参考笔记四。这样你就会得到遗传算法的图形用户界面。
这个界面是不是很熟悉呢,呵呵,对了,这个在模式搜索中也见到过,只是在Solver一栏中这里选择的是'ga',
在图形界面的右边依然是算法一些可选项的控制面板,如果 你 想对遗传算法的运行参数进行调整的话,就可以
在该图形界面的右边寻找。
好了,下面还是继续进行吧!
在下面的图形中
填入适应度函数的句柄以及适应度函数中独立变量的个数。还记得我们在笔记二 中写过一个函数叫myTest,
下面我们依然使用这个函数来试验一下。在第一个输入框输入@myTest,在第二个输入栏中输入2,好了,
点击“Start”按钮,运发开始运行,结果如下:
遗传算法找到的最小值是-8.99999,得到该值的点是[-0.536,2.463],为了比较与验证结果,
我使用模式搜索的方法运行了同一个函数,起始点从[0 0]开始,下面就是模式搜索得到的结果
结果基本差不多,这里好像模式搜索更好一点。