非线性规划研究一个n元实函数在一组等式或不等式的约束条件下的极值问题。
非线性规划函数: 函数fmincon是MatLab最优化工具箱中求解非线性规划问题的函数,它从一个预估值触发,搜索约束条件下非线性多元函数的最小值。 函数fmincon的约束条件为: 其中,x、b、beq、lb和ub是矢量,A和Aeq为矩阵;c(x)和ceq(x)返回矢量的函数;f(x)、c(x)和ceq(x)是非线性函数。 函数fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 其中lb和ub分别为x的下界和上界。当函数输入参数不包括A、b、Aeq、beq时,默认A=0、b=0,Aeq=[ ],beq=[ ] 遗传算法从随机产生的初始解开始搜索,通过一定的选择、交叉、变异操作逐步迭代以产生新的解。群体种的每个个体代表问题的一个解,成为染色体,染色体的好坏用适应度值来衡量,根据适应度的好快从上一代中选择一定数量的优秀个体,通过交叉、变异来形成下一代群体。经过若干代迭代之后,收敛于最好的染色体。(但不一定是问题的最优解) 非线性规划算法大多采用梯度下降的方法求解,局部搜索能力强,但是全局搜索能力差,遗传算法则是全局搜索能力强,局部搜索能力差,因此二者集合能够得到问题的最优解。 采用遗传算法和非线性规划的方式求解的例子: 其中x1、x2、x3、x4、x5是0~0.9*π之间的实数。 该函数的最小值为-2,最小值的位置为(π/2,π/2,π/2,π/2,π/2) 非线性规划遗传算法的流程图: N为一个固定值,当进化代数为N的倍数时采用非线性寻优的方法加快进化,非线性寻优利用当前染色体值采用函数fmincon寻找问题的局部最优值。 算法思路:
- 种群初始化
采用的编码方式有:位串编码、Grey编码、实数编码(浮点数编码)、多级参数编码、有序串编码、结构式编码等。
- 适应度函数
因为这个例子中求得是函数最小值所有,把函数值的倒数最为个体的适应度值。目标函数值越小的个体,适应度越大,个体越优。
- 选择操作
从旧群体中选择出优良个体组成新的种群,以繁殖到下一代,常用的选择算法有:轮盘赌算法、锦标赛算法等,常用的是轮盘赌算法。即基于适应度比例的选择策略 个体被选中的概率为:,Fi为个体的适应度值
- 交叉操作
从种群中随机选择两个个体,通过两个染色体的交换组合,把父串的优秀特征遗传给子串,从而产生新的优秀个体。由于采用实数编码,因此采用实数交叉法:第k个单色提的ak和第L个染色体的al在j位的交叉操作
- 变异操作
目的是维护种群的多样性,从种群中随机选择一个个体,选择个体中的一点进行变异以产生更优秀的个体。
- 非线性寻优
每进化一定代数后,以所得到的结果为初始值,采用fmincon进行局部寻优,并把局部寻优的结果作为染色体继续进化 实现: 计算目标值的函数文件
1 | function y = fun(x) |
选择函数
1 | %%选择操作 该函数对每一代种群中的染色体进行选择,以进行后面的交叉和变异 |
交叉操作函数:
1 | %%交叉操作 |
变异操作:
1 | %%变异操作 |
随机编码函数:
1 | function ret=Code(lenchrom,bound) |
主函数:
1 | %% 清空环境 |
结果: 根据数值分析也可以看出随着迭代次数的增加,最好适应度的值变化减小,直道不在变化