⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ga.m

📁 遗传算法的代码,可以仿照这个学习一下,希望有所帮助
💻 M
字号:
%-----------------------------------------------------------------------------------------------------
%                                          基本遗传算法程序
%                              华北电力大学 输配电系统研究所  邱  威                                      
%                                       编写时间:2008年9月16日
%                                       修改时间:2008年10月27日  
%                    该算法采用二进制编码,选择方法为最优保存策略,单点交叉,基本位变异,                   
%                 能解决多个变量的优化问题,但易陷入局部最优。测试函数为Rosenbrock函数。
%   参考文献:
%    [1]:刘国华,包宏,李文超.用MATLAB实现遗传算法程序.计算机应用研究,2001(8):80-82.
%    [2]:雷英杰,张善文,李续武,等.MATLAB遗传算法工具箱及应用.西安:西安电子科技大学出版社,2005.       
%-----------------------------------------------------------------------------------------------------

clc
format long

%--------------------控制参数设置-------------------
% 变量上下界及求解精度
min_var = [-2.048,-2.048];
max_var = [2.048,2.048];
scale_var = 1e-6;

% 种群数
popsize = 40;

% 进化代数
maxgen = 50000;

% 交叉概率
pc = 0.8;

%变异概率
pm = 0.03;

%-------------------产生初始种群并进行相应的操作-------------------
% 编码,初始化种群
[bin_gen,bits] = encoding(min_var,max_var,scale_var,popsize);

% 解码,求适应度函数
fitness = decoding('Rosenbrock',bin_gen,bits,min_var,max_var,popsize);

% 为最优保存策略做准备
[curbest_indiv,curbest_fitness] = findbest_indiv(fitness,bin_gen);  % 初始种群中的最优个体和最优适应度值
itbest_indiv = curbest_indiv;                                       % 迄今为止最好的个体
itbest_fitness = curbest_fitness;                                   % 迄今为止最好的适应度值
new_gen = bin_gen;                                                  % new_gen为参与遗传操作的种群

%--------------------开始进行迭代--------------------
for gen = 1:maxgen
    new_gen = selection(new_gen,fitness,popsize);                            % 选择操作
    new_gen = crossover(new_gen,pc);                                         % 交叉操作
    new_gen = mutation(new_gen,pm);                                          % 变异操作
    fitness = decoding('Rosenbrock',new_gen,bits,min_var,max_var,popsize);   % 解码,求适应度函数
    [new_gen,curbest_indiv,curbest_fitness(gen)] = elitist(new_gen,itbest_indiv,itbest_fitness,fitness,popsize); % 最优保存策略
    itbest_indiv = curbest_indiv;
    itbest_fitness = curbest_fitness(gen);
    fprintf(1,'gen: %d,  Best: %6.14f\n',gen,itbest_fitness);        % 输出每代的最优值
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -