-
..
关于遗传算法的实验报告
一、实验目的:
< br>理解和掌握遗传算法的应用及意义,能用一门自己擅长的语言实现遗传算法的基本功
能,
在此基础上进一步理解和巩固对遗传算法的重要,
以便在
今后的学习和工作中能有效的
运用和借鉴!
需要指出的是遗传算
法并不是能保证所得到的就是最佳的答案但通过一定的方
法可以将误差控制在一定的范围
内!
二、实验原理和题目:
1.
遗传算法是一种基于空间搜索的算法,它通过自然选择、遗传、变
异等操作以及达尔
文的适者生存的理论,
模拟自然进化过程来寻
找所求问题的答案。
其求解过程是个最优化的
过程。一般遗传算
法的主要步骤如下:
(
1
)随机产生一个确定长度的特征字符串组成的初始种群。
(
2
)对该字符串种群迭代地执行下面的步骤
a
和步骤
b
,直到满足
停止准则为止:
a
p>
计算种群中每个个体字符串的适应值;
p>
b
应用复制、交叉和变异等遗传算子产生下一代种群。
(
3
)把在后代中表现的
最好的个体字符串指定为遗传算法的执行结果,即为问题的一
个解。
2.
通过编码、设置种群、设置适应
度函数、遗传操作、解码产生需要的解。
f(x)=x*sin(x)+1
,
x
?
[0,2
?
],
求解
f(x)
< br>的最大值和最小值。
三、实验条件
硬件:微型计算机。
语言:本实验选用的为
C++
语言。
四、实验内容:
建造针对
f(x)<
/p>
的遗传算法程序,然后进行运行求解。
五、实验步骤:
1.
确定基本功能:本实验是实现
f
(
x
)的最大值和最小值的求解。
p>
2.
对
p>
f(x)
进行编码:
用一个二进制矢量表示
一个染色体,
由染色体来代表变量
x
的
实数
值,这里精度取小数点后
6
位数,
变量
x
的域长为
2
?
,整个区间被分为
2
?
*1000000
个等长
的区间。由于
2
?
*1000000
在
23
位二进制数的表示范围呢,所以,编码长度为
23
位。
3.
设计适应度函数:由于要求
f<
/p>
(
x
)的最值,所以适应度函数可根据<
/p>
f
(
x
)做适当
的
改变。最大值:
f(x)=x*sin(x)+5
;最小值:
f(x)=1/
(
x*sin(x)+5
)
;
4.
针
对
f(x)
的设计并且实现遗传算法程序:遗传操作主要包括复
制、交叉和变异。复制
是直接将父代遗传给子代,
即根据个体的
适应度函数值所度量的优劣程度决定它在下一代是
被淘汰还是被遗传。交叉从能进入下一
代的个体中选出两个,将两者的部分码值进行交换。
变
异
是
根
据
变
异
概
率
选
出
一
个
个
体
,
随
机
对
其
某
位
编<
/p>
码
进
行
改
变
。
复
制
由
void
Selec
tion_operation(
bool
< br>flag);
实
现
;
交
叉
由
void
Crossover_operation();
实
< br>现
;变
异
由
void
Mution-
operation();
实现。
5.
设计初始种群:默认设置为
5
0
个随机产生的
23
位字节的染色体。
6.
调
试交叉和变异概率:在常用的交叉和变异概率范围内,结果随交叉和变异的概率
的改变而
改变,之间差异相对来说不太明显
7.
实验参数:实验中主要的参数有遗传代数、群体规模、
交叉概率、变异概率。
实验结果:
求最大值:
’
.
..
求最小值:
’
.
..
程序主要代码如下(后台代码)
:
class GA{
};
// Find the max and min value
void GA::Extreme_Value(bool flag){
if(flag)
Optimal_Max_Function_Vlaue=-100;
Optimal_Min_Function_Value=100;
double t=0.5;
double DecNum1=0;
/*string
p=*iter;*/
for(int
i=(*iter).length()-1;i>=0;--i){
else
for(vector
vector
vector
double Pc;
double Pm;
int Num_Iteration;
int
Num_Population;
double
Optimal_Max_X_Solution;
double
Optimal_Min_X_Solution;
double
Optimal_Max_Function_Vlaue;
double
Optimal_Min_Function_Value;
string
Optimal_Individual;
vector
//float fitness;
GA(){
}
void GA_Init();
void
Crossover_Operation();
void
Select_Operation();
void
Mutation_Operation();
void
Evaluation(bool);
void
LunPan_Operation(bool);
double
Function(double);
void
Extreme_Value(bool);
void
Display(bool,int);
void Display_M();
Pc=0.25;
Pm=0.01;
Num_Population=50;
Num_Iteration=100;
public:
’
.
-
-
-
-
-
-
-
-
-
上一篇:matlab函数大全最完整版
下一篇:按键精灵 常用脚本命令汇集