📄 ga.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 + -