matlab 7 GA工具箱
2008-05-08 16:24
在 Matlab 7.0 中提供了 Genetic Algorithm and Direct Search 工具箱, 现在简单介绍下。转载时请保持作者信息完整。
1、首先编写fitness函数,函数内容见后面的引用。
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));
从ga函数说明可知 % X = GA(FITNESSFCN,NVARS) finds the minimum of FITNESSFCN using % GA. NVARS is the dimension (number of design variables) of the % FITNESSFCN. FITNESSFCN accepts a vector X of size 1-by-NAVRS, % and returns a scalar evaluated at X. % % X = GA(FITNESSFCN,NAVRS,OPTIONS) finds the minimum for % FITNESSFCN with the default optimization parameters replaced by values % in the structure OPTIONS. OPTIONS can be created with the GAOPTIMSET % function. ga 是寻找最小值的,所以将原函数取负。
从本站翻出来一个老贴。 [parse]lihuanc[/parse] 关于优化方面的: 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
[parse]zonly[/parse] 用遗传算法算了下,得到一个最优值为38.8503 x1*=11.6255 x2*=5.7250 但似乎仍不是全局最优解
[parse]easyworm[/parse] 呵呵,这个问题的局部极小较多,我用NLPSolver1.0(到偶的网站www.easyworm.com下载)算了一下: 初始值取X1=11.600000, X2=4.500000 最优目标值为37.650301 最优点处X1*=11.625545, X2*=4.525056 lingo 8.0的计算结果为37.45030 最优点处X1*=11.62554, X2*=4.325057
2、gatool 的用法 在matlab7命令行输入 gatool,见附图。
在 PopulationSize=10000; 请注意Mutation函数的选择。
f(x1*,x2*)=-my_func1(x1*,x2*)=38.84741978236206, where x1*=11.62378; x2*=5.72501
3、ga 函数的使用 因为要使用非原始设定,所以要采用 ga 的第2种调用方式,并且Mutation要采用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)
结果如下: >> opt1
opt1 =
PopulationType: 'doubleVector' PopInitRange: [2x2 double] PopulationSize: 1000 EliteCount: 2 CrossoverFraction: 0.80000000000000 MigrationDirection: 'forward' MigrationInterval: 20 MigrationFraction: 0.20000000000000 Generations: 100 TimeLimit: Inf FitnessLimit: -Inf StallGenLimit: 50 StallTimeLimit: 20 InitialPopulation: [] InitialScores: [] PlotInterval: 1 CreationFcn: @gacreationuniform FitnessScalingFcn: @fitscalingrank SelectionFcn: @selectionstochunif CrossoverFcn: @crossoverscattered MutationFcn: @mutationuniform HybridFcn: [] Display: 'final' PlotFcns: [] OutputFcns: [] Vectorized: 'off'
>> [x, fval] = ga(@my_func1,2,opt1) Optimization terminated: stall generations limit exceeded.
x =
11.60992040806107 5.72602745388080
fval =
-38.61619496300001
>>
 (缩略图,点击图片链接看原图) function y = my_func2(x) %fmax r=sqrt((x(1)-50)^2+(x(2)-50)^2)+exp(1); y=-(sin(r)/r+1);
function y = my_func2a(x) %fmin r=sqrt((x(1)-50)^2+(x(2)-50)^2)+exp(1); y=(sin(r)/r+1);
原贴见 http://bbs./post/view?bid=7&id=45307&sty=0&tpg=2&ppg=1&age=0#45307
请注意 Mutation 选择 Gaussian 函数时, Scale 要设成 0; 结果: minimize f(x) = 0.7827663723309104; maximize f(x) = 1.1283745483594003

|
|