Matlab 7 遗传算法工具箱使用指南
本文介绍 Matlab 7.0 中提供的 Genetic Algorithm and Direct Search 工具箱的基本使用方法。遗传算法是一种模拟自然进化过程的优化算法,广泛应用于函数优化、机器学习等领域。以下通过具体示例说明如何编写适应度函数、使用 gatool 图形界面以及调用 ga 函数。
1. 编写适应度函数
首先,需要编写一个适应度函数(fitness function),该函数接受一个种群个体向量并返回其适应度值。例如,对于函数 f(x1,x2)=21.5+x1*sin(4*pi*x1)+x2*sin(20*pi*x2),定义域为 -3.0≤x1≤12.1,4.1≤x2≤5.8,由于 ga 函数默认寻找最小值,因此将目标函数取负:
function score = my_func1(pop)
% f(x1,x2)=21.5+x1*sin(4*pi*x1)+x2*sin(20*pi*x2)
% -3.0<=x1<=12.1; 4.1<=x2<=5.8
score = -21.5 - pop(1)*sin(4*pi*pop(1)) - pop(2)*sin(20*pi*pop(2));2. 使用 gatool 图形界面
在 Matlab 命令窗口输入 gatool 即可打开遗传算法工具箱图形界面。在界面中设置种群大小(PopulationSize)为 10000,并注意选择变异函数(Mutation function)。运行后得到最优解:f(x1*,x2*) = 38.84741978236206,其中 x1*=11.62378,x2*=5.72501。

3. 使用 ga 函数编程
若需要更灵活的控制,可直接调用 ga 函数。以下示例设置自定义参数,并使用均匀变异函数(mutationuniform):
opt1 = gaoptimset;
opt1.PopInitRange = [[-3.0 4.1];[12.1 5.8]];
opt1.PopulationSize = 1000;
opt1.MutationFcn=@mutationuniform;
[x, fval] = ga(@my_func1,2,opt1);运行结果:
x = 11.60992040806107 5.72602745388080
fval = -38.61619496300001注意,当使用高斯变异函数(Gaussian)时,需将 Scale 参数设为 0。
4. 另一个示例:优化函数 f(x)=sin(r)/r+1
对于函数 f(x)=sin(r)/r+1,其中 r=sqrt((x1-50)^2+(x2-50)^2)+exp(1),定义域为 [0,100]×[0,100]。分别编写求最大值和最小值的适应度函数:
function y = my_func2(x) % 求最大值
r=sqrt((x(1)-50)^2+(x(2)-50)^2)+exp(1);
y=-(sin(r)/r+1);
function y = my_func2a(x) % 求最小值
r=sqrt((x(1)-50)^2+(x(2)-50)^2)+exp(1);
y=(sin(r)/r+1);运行结果:最小值 f(x)=0.7827663723309104,最大值 f(x)=1.1283745483594003。

总结:Matlab 7 的遗传算法工具箱提供了便捷的优化工具,通过图形界面或编程方式均可实现复杂函数的优化。建议根据问题特点选择合适的变异函数和种群参数,以获得更好的优化效果。