1.简介
遗传算法是现代优化算法之一,为方便使用Matlab提供了遗传算法工具箱,可以方便我们解决一般的优化问题。
![46b5a9a3b5b708d9e4289d0d04fabf1a.png](https://i-blog.csdnimg.cn/blog_migrate/72951e23cc89becb5e6a4cf4d6566885.jpeg)
遗传算法工具箱的打开途径为:首先在App中找到Optimization工具箱
![ec62fcc492dbcafeee6de95918a4d31e.png](https://i-blog.csdnimg.cn/blog_migrate/ccfd1e0d6766ced372a16ff430a58afa.jpeg)
然后在Solver中找到ga打开就行了,具体的显示界面如下
![336f4dc5451f4ddc626226f79cb87dbb.png](https://i-blog.csdnimg.cn/blog_migrate/789c28d358572165cf9196793d73788e.jpeg)
我们主要用到的就是左边这一块了,在里面输入参数就行了
2.例题
下面我通过几个例题来介绍参数怎么输入
例1,求解f(x)的最小值
![73e893526d42d42a27bf4f19eac5d2a0.png](https://i-blog.csdnimg.cn/blog_migrate/8e71342bc72edac88adb8f86133e3d33.png)
首先我们要编写适应度函数,一般就是目标函数,保存为m函数文件
![4daeb3f1eaabfeb94d2439b37cd7c933.png](https://i-blog.csdnimg.cn/blog_migrate/52b72afc7818b74c07a0651d4e7b3aa4.png)
接下来就是输入参数了
![5b995d65d10473a6bc378eef2ceefe88.png](https://i-blog.csdnimg.cn/blog_migrate/0ad2c7ad09ec58def787cdfd53d24664.jpeg)
在Fitness function(适应度函数)处输入@目标函数名(因为此处传递的是函数句柄所以一定要加@,不然会出错),Number of Variables是指待求变量的个数,接下来就是输入约束条件了,以为此处约束条件是xi是0到0.9pi之间的实数,所以只需要在Bound处输入就行了,然后点击Start按钮就会求出结果。
例2
![f21d979b07b4dcd0ea45e3a98813bd3e.png](https://i-blog.csdnimg.cn/blog_migrate/f3ab0dfb77d4a3d9f271f5effe8ce9e4.png)
这个是求最大值,但遗传算法工具箱只能求最小值,所以我们编写适应度函数时在目标函数前加个负号就行了(当-z最小时,z也就最大了)。
目标函数为
![66cf32f9ff1481f6c75c72c22a88b6f5.png](https://i-blog.csdnimg.cn/blog_migrate/df910dd3d9a8bacc5aee3f03ca53ce97.png)
以为此处设计到了不等式约束,所以需要先在Matlab中定义不等式约束,它的不等式约束表示形式为
![71493447d322188334fbe8ea6ee882f9.png](https://i-blog.csdnimg.cn/blog_migrate/bbc2009a6f165421f91537500c56724b.png)
![ef613647b8ead98dce192491bbe67c24.png](https://i-blog.csdnimg.cn/blog_migrate/057cd52689382f3a0fc08ea147e060cb.png)
在工作区要有约束条件的矩阵变量,和例1不同的是只需要在约束处添加不等式约束就行了。这求的是最大值的相反数。
![afc0088e28bdd6d77adf59ed06221292.png](https://i-blog.csdnimg.cn/blog_migrate/b136a870ef601eaea60258af0baebddd.jpeg)
例3
![7152a4f28f929bc381bda8991baa98d7.png](https://i-blog.csdnimg.cn/blog_migrate/41f09ef84e688a362b02d797584efc35.png)
这题和前面不一样的是涉及到了非线性约束,所以需要编写非线性约束条件。
适应度函数
![222c6c6e78c5027679842be6c009dcd2.png](https://i-blog.csdnimg.cn/blog_migrate/51f0a566db6f878a24ec50ad1ecd3c48.png)
非线性约束m函数文件
![fa7d27b9ef87ab9f6f5628144bd9e870.png](https://i-blog.csdnimg.cn/blog_migrate/dc7f9832145263da9b41d4bab6003e25.png)
其中c代表
![65f7c6bc4bc891cb5aab9b6ddb2ea662.png](https://i-blog.csdnimg.cn/blog_migrate/8f6d57929d674df35b349c17fefbdf4a.png)
ceq代表
![c035f8109317efb066c18e18aab32b4c.png](https://i-blog.csdnimg.cn/blog_migrate/506cd4caf413138ad78df34f7ba35a91.png)
此题相对前面的需要在Constraints中的Nonlinear constraint function处输入非线性约束m文件函数
![59933a50eac294076b8e3425eaf549da.png](https://i-blog.csdnimg.cn/blog_migrate/1bc08c48a4e0994704778d9b86afb54b.jpeg)
以上例题还没有涉及到的参数由Aeq,beq这是线性等式约束的条件,以及Interger variable indices处的参数(这是指明那个参数是整数),具体的可参见最右边的版块
![a934003e6c65f20455806c1c1444bf5b.png](https://i-blog.csdnimg.cn/blog_migrate/f7556d0da20de792f257ac15e9f35171.png)