Matlab提供遗传算法工具箱(Matlab2010版本之后),方便解决简单的优化问题,官方提示后续可能取消该功能。个人不建议使用工具箱求解数学规划问题,参数设置零散复杂,容易错漏,但可学习作为Demo问题的演示工具。
打开GA工具箱
- 方式一:命令行输入
>> optimtool
- 方式二:菜单栏
APP
→Optimization
工具箱→Solver
中选择ga
GUI界面使用说明
按从上到下,从左到右的顺序对Matlab自带的遗传算法工具箱GUI界面进行介绍和使用注意事项说明。
Problem Setup and Results 设置与结果
Solver 求解程序
选择要使用的求解程序(遗传算法,遗传算法多目标等)。Problem 问题
- Fitness function: 适应度函数,求最小,这里的使用度函数要自己编写,书写格式是“@函数名”。
- Number of variables: 变量数,必须是整数,即使用这个GUI界面的适应度函数的变量必须是[1×n]的向量,而不能是[m×n]的矩阵。
示例用法
-
求解f(x)的最小值
-
编写适应度函数
适应度函数一般就是目标函数,保存为m函数文件。
-
参数设置
在Fitness function(适应度函数)处输入@目标函数名(因为此处传递的是函数句柄所以一定要加@),Number of Variables是指待求变量的个数,此处约束条件是xi是0到0.9pi之间的实数,在Bound处输入,然后点击Start按钮求出结果。
-
含约束条件的数学规划问题参数设置
-
含非线性约束条件的数学规划问题参数设置
- Constraints 约束
- Linear inequalities: 线性不等式,A*x<=b形式,其中A是矩阵,b是向量。
- Linear equalities: 线性等式,A*x=b形式,其中A是矩阵,beq是向量。
- Bounds: 定义域,Lower: 下限,Upper: 上限,列向量形式,每一个位置对应一个变量。
- Nonlinear constraint function: 非线性约束,用户定义,非线性等式必须写成c=0形式,不等式必须写成c<=0形式。
- Integer variable indices: 整型变量标记约束,使用该项时Aeq和beq必须为空,所有非线性约束函数必须返回一个空值,种群类型必须是实数编码。举例,若是想让第一个、第三个、第五个变量保持是整数的话,则直接在此处填写[1 3 5]。
- Run solver and view results 求解与结果展示
- Use random states from previous run: 使用前次的状态运行,完全重复前次运行的过程和结果。
Options 选项
population 种群
- Population type 编码类型
- Double vector 实数编码。采用双精度,整数规划的种群类型必须是实数编码。
- Bit string 二进制编码
- Custom 自定义
- Population size 种群大小
- Creation function 生成函数,产生初始种群
- Initial population 初始种群,不指定则使用creation function生成,可以指定少于种群数量的种群,由creation function完成剩余的。
- Initial scores 初始值,如果不指定,则由计算机计算适应度函数作为初始值,对于整型约束不可用,使用向量表示。
- Initial range 初始范围,使用向量矩阵表示,第一行表示范围的下限,第二行表示上限。
Fitness scaling 适应度尺度
- Rank 等级,将适应度排序,然后编号;
- Proportional 按比例;
- Top 按比例选取种群中最高适应度的个体,这些个体有等比例的机会繁衍,其余的个体被淘汰;
- Shift linear 线性转换;
- Custom 用户定义;
Selection 依据适应值选择
- Stochastic uniform:随机均匀分布;
- Remainder: 残余,取适应值的整数部分进行轮盘赌选择;
- Uniform:均匀分布,不是一个好方法,但是可以用来做测试;
- Roulette:轮盘赌算法;
- Tournament:联赛选择算法;
- Custom:自定义;
Reproduction 复制,决定如何产生子代
- Elite count:精英数,直接传到下一代的个体数;
- Crossover fraction:杂交概率;
Mutation (Mutation function) 突变
- Use constraint dependent 默认,与约束有关,无约束时使用gaussian,有约束时使用adaptive feasible;
- Gaussian :利用高斯分布来选取;
- Uniform:均匀;
- Adaptive feasible:自适应;
- Custom:自定义;
Crossover 杂交
- Scattered:随机生成遗传二进制向量,按0-1杂交;
- Single point:单点杂交,生成一个数字,该数字代表的位置开始两父代基因交换;
- Two point:两点交换;
- Intermediate:媒介,加权平均;
- Heuristic:启发式算法;
- Arithmetic:算术平均;
- Custom:自定义;
Migration 迁移
- Direction方向:forward n->n 1 ;both 双向;
- Fraction:指定迁移率,以较小数量种群为标准;
- Interval:发生迁移的间隔;
Constraint parameters 约束参数
对应于非线性约束求解器
- Initial penalty: 初始罚函数大于等于1;
- Penalty factor:处罚因子 大于等于1;
Hybrid function 混合函数
指定另外一个最小值函数,在遗传算法结束之后计算,在整数值限制的时候不可用。
- None
- Fminsearch 只用于无约束;
- Patternsearch 约束与无约束;
- Fminunc 无约束;
- Fmincon 有约束;
Stopping criteria 停止标准
- Generations 到达代数;
- Time limit 时间限制;
- Fitness limit 适应值限制;
- Stall generations迟滞代数,经过多代适应值没有明显提升;
- Stall time limit 迟滞时间限制,经过限定时间适应值没有明显提升;
- Function tolerance 在迟滞代数内适应度函数值的改变量小于这个值,则停止;
- Constraint tolerance 约束容忍值;
Plot function 绘图函数
- Plot interval 绘图间隔;
- Best fitness 最佳适应度值;
- Best individual 最佳个体;
- Distance 个体间平均距离;
- Expectation 期望;
- Genealogy 家系;
- Range 适应度值最小最大平均值;
- Score diversity 每一代分数的柱状图;
- Scores 每一代个体的分数;
- Selection 描绘对每一代贡献的父代;
- Stopping 停止标准的水平;
- Max constraint 非线性约束中超出范围的最大值;
- Custom function 自定义;
Output function 输出函数
- Custom function: 自定义;
Display to command window
- Off 不输出;
- Final 只输出最终值;
- Iterative 每一次迭代都输出;
- Diagnose 诊断,每一次迭代都输出,并且诊断问题信息和选项中相对于默认值的改变值;
Evaluate fitness and constraint functions 评价适应度和约束函数
- In serial 分别独立评价;
- Vectorized 用同一个函数调用;
- In parallel 并行处理;
Matlab遗传算法工具箱使用简介
Matlab自带遗传算法工具箱的介绍和使用注意事项
超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解