标签:
最近接触到了遗传算法以及利用遗传算法求最优解,所以就把这些相关的内容整理记录一下。
遗传算法(英语:genetic algorithm (GA))是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。
遗传算法擅长解决的问题是全局最优化问题。
跟传统的爬山算法相比,遗传算法能够跳出局部最优而找到全局最优点。而且遗传算法允许使用非常复杂的适应度函数(或者叫做目标函数),并对变量的变化范围可以加以限制。
options = gaoptimset(); options.Generations=5000; %迭代次数 options.PopulationSize=30; %种群数目
假设要求目标函数f = (339-0.01*x1-0.003*x2)*x1 + (399-0.004*x1-0.01*x2)*x2 - (400000+195*x1+225*x2);
的最大值。
首先编写目标函数myfit.m
:
function f = myfit( x ) f = (339-0.01*x(1)-0.003*x(2))*x(1)... + (399-0.004*x(1)-0.01*x(2))*x(2)... - (400000+195*x(1)+225*x(2)); f = -f; %因为GA是寻找最小值,所以为了求这个函数的最大值,取f的相反数 end
调用GA函数:
结果显示: Optimization terminated: maximum number of generations exceeded.
说明迭代达到最大次数仍未求得最优解。因此下面通过options增大迭代次数:
options = gaoptimset(); options.Generations = 2000; %最大迭代数设为2000 %再次调用GA函数 [X,FVAL,EXITFLAG,OUTPUT] =ga(@myfit, 2 ,[], [],[],[],[],[],[],options);
结果显示: Optimization terminated: average change in the fitness value less than options.TolFun.
此时
这个结果与对目标函数 x1、x2 分别求偏导得到的结果(x1=4735, x2=7043, y=553641)是一致的,表明结果正确。
MATLAB还有许多其他求最优解的常用函数,如 fmincon()、fminsearch()、fminimax()等。
标签:
原文地址:http://www.cnblogs.com/xiaff/p/5345475.html