1.简介
遗传算法是现代优化算法之一,为方便使用Matlab提供了遗传算法工具箱,可以方便我们解决一般的优化问题。
![9a882412f5657ab842c903213ac04d13.png](https://img-blog.csdnimg.cn/img_convert/9a882412f5657ab842c903213ac04d13.png)
遗传算法工具箱的打开途径为:首先在App中找到Optimization工具箱
![1c0a7d65d03d6027fbbc7ca51f1d26f2.png](https://img-blog.csdnimg.cn/img_convert/1c0a7d65d03d6027fbbc7ca51f1d26f2.png)
然后在Solver中找到ga打开就行了,具体的显示界面如下
![fc40825387a89c765b6d23f1293ff5ac.png](https://img-blog.csdnimg.cn/img_convert/fc40825387a89c765b6d23f1293ff5ac.png)
我们主要用到的就是左边这一块了,在里面输入参数就行了
2.例题
下面我通过几个例题来介绍参数怎么输入
例1,求解f(x)的最小值
![cf248e807ca119fa987bfe53fd6d43f0.png](https://img-blog.csdnimg.cn/img_convert/cf248e807ca119fa987bfe53fd6d43f0.png)
首先我们要编写适应度函数,一般就是目标函数,保存为m函数文件
![467cc7ad09cfa03d7091fad95e3c7bee.png](https://img-blog.csdnimg.cn/img_convert/467cc7ad09cfa03d7091fad95e3c7bee.png)
接下来就是输入参数了
![d84cb8082f1685b125bab57a67a86874.png](https://img-blog.csdnimg.cn/img_convert/d84cb8082f1685b125bab57a67a86874.png)
在Fitness function(适应度函数)处输入@目标函数名(因为此处传递的是函数句柄所以一定要加@,不然会出错),Number of Variables是指待求变量的个数,接下来就是输入约束条件了,以为此处约束条件是xi是0到0.9pi之间的实数,所以只需要在Bound处输入就行了,然后点击Start按钮就会求出结果。
例2
![be81c77bf58082d1c5349d2a1f2e21e3.png](https://img-blog.csdnimg.cn/img_convert/be81c77bf58082d1c5349d2a1f2e21e3.png)
这个是求最大值,但遗传算法工具箱只能求最小值,所以我们编写适应度函数时在目标函数前加个负号就行了(当-z最小时,z也就最大了)。
目标函数为
![d8e820381ee19cf306aab837b0a519be.png](https://img-blog.csdnimg.cn/img_convert/d8e820381ee19cf306aab837b0a519be.png)
以为此处设计到了不等式约束,所以需要先在Matlab中定义不等式约束,它的不等式约束表示形式为
![c7808f95e6472c99b509b6d71c788b19.png](https://img-blog.csdnimg.cn/img_convert/c7808f95e6472c99b509b6d71c788b19.png)
![2150c1c4097237449ac848786f27a911.png](https://img-blog.csdnimg.cn/img_convert/2150c1c4097237449ac848786f27a911.png)
在工作区要有约束条件的矩阵变量,和例1不同的是只需要在约束处添加不等式约束就行了。这求的是最大值的相反数。
![5a8d93fc919f425f50b56ef94e98c3a8.png](https://img-blog.csdnimg.cn/img_convert/5a8d93fc919f425f50b56ef94e98c3a8.png)
例3
![6f01753e0d02c7ca521e462faaf895b3.png](https://img-blog.csdnimg.cn/img_convert/6f01753e0d02c7ca521e462faaf895b3.png)
这题和前面不一样的是涉及到了非线性约束,所以需要编写非线性约束条件。
适应度函数
![d820f15b4534bb285cda65946f38a54b.png](https://img-blog.csdnimg.cn/img_convert/d820f15b4534bb285cda65946f38a54b.png)
非线性约束m函数文件
![74a43d9c97d430974a95906521b11994.png](https://img-blog.csdnimg.cn/img_convert/74a43d9c97d430974a95906521b11994.png)
其中c代表
![187672f804712dfe6da3c10d11dcc4c4.png](https://img-blog.csdnimg.cn/img_convert/187672f804712dfe6da3c10d11dcc4c4.png)
ceq代表
![361f8bf7b9062e7948082bac1a2286f3.png](https://img-blog.csdnimg.cn/img_convert/361f8bf7b9062e7948082bac1a2286f3.png)
此题相对前面的需要在Constraints中的Nonlinear constraint function处输入非线性约束m文件函数
![e86e1ed7b94fb7ce850db371c1459ba0.png](https://img-blog.csdnimg.cn/img_convert/e86e1ed7b94fb7ce850db371c1459ba0.png)
以上例题还没有涉及到的参数由Aeq,beq这是线性等式约束的条件,以及Interger variable indices处的参数(这是指明那个参数是整数),具体的可参见最右边的版块
![78c9fedcd21266d2a90818bba14bb430.png](https://img-blog.csdnimg.cn/img_convert/78c9fedcd21266d2a90818bba14bb430.png)