程序用 MATLAB 语言编写。之所以选择 MATLB,是因为它简单,但又功能强大。写 1 行 MATLAB 程序,相当于写 10 行 C++程序。
在编写算法阶段,最好用 MATLAB 语言,算法验证以后,要进入工程阶段,再把它翻译成 C++语言。
本程序的算法很简单,只具有示意性,不能用于实战。
非线性方程组的实例在函数(2)nonLinearSumError1(x)中,你可以用这个实例做样子构造你自己待解的非线性方程组。
%注意:标准遗传算法的一个重要概念是,染色体是可能解的 2 进制顺序号,由这个序号在可能解的集合(解空间)中找到可能解
%程序初始化,随机生成一组可能解(第一批染色体)
%1: 由可能解的序号寻找解本身(关键步骤)
%2:把解代入非线性方程计算误差,如果误差符合要求,停止计算
%3:选择最好解对应的最优染色体
%4:保留每次迭代产生的最好的染色体,以防最好染色体丢失
%5: 把保留的最好的染色体 holdBestChromosome 加入到染色体群中
%6: 为每一条染色体(即可能解的序号)定义一个概率(关键步骤)
%7:按照概率筛选染色体(关键步骤)
%由染色体(可能解的 2 进制)顺序号找到可能解:
%(1)x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionSum);
%把解代入非线性方程组计算误差函数:(2)functionError=nonLinearSumError1(x);
%判定程是否得解函数:(3)[solution,isTrue]=isSolution(x,funtionError,solutionSumError);
%选择最优染色体函数:
%(4)[bestChromosome,leastFunctionError]=best_worstChromosome(fatherChromosomeGroup,functionError);
%误差比较函数:从两个染色体中,选出误差较小的染色体
%(5)[holdBestChromosome,holdLeastFunctionError]...
% =compareBestChromosome(holdBestChromosome,holdLeastFunctionError,...
% bestChromosome,leastFuntionError)
%为染色体定义概率函数,好的染色体概率高,坏染色体概率低
%(6)p=chromosomeProbability(functionError);
%(7)slecteChromosomeGroup=selecteChromome(fatherChromosomeGroup,p);
%父代染色体杂交产生子代染色体函数
%(8)sonChrmosomeGroup=crossChromosome(slecteChromosomeGroup,2);
%防止染色体超出解空间的函数
%(9)chromosomeGroup=checkSequence(chromosomeGroup,solutionSum)
%变异函数
%(10)fatherChromosomeGroup=varianceCh(sonChromosomeGroup,0.8,solutionN);
%通过实验有如下结果:
评论0
最新资源