遗传算法解非线性方程
- 格式:doc
- 大小:51.50 KB
- 文档页数:9
非线性方程组的求解摘要:非线性方程组求解是数学教学中,数值分析课程的一个重要组成部分,作为一门学科,其研究对象是非线性方程组。
求解非线性方程组主要有两种方法:一种是传统的数学方法,如牛顿法、梯度法、共轭方向法、混沌法、BFGS 法、单纯形法等。
传统数值方法的优点是计算精度高,缺点是对初始迭代值具有敏感性,同时传统数值方法还会遇到计算函数的导数和矩阵求逆的问题,对于某些导数不存在或是导数难求的方程,传统数值方法具有一定局限性。
另一种方法是进化算法,如遗传算法、粒子群算法、人工鱼群算法、差分进化算法等。
进化算法的优点是对函数本身没有要求,不需求导,计算速度快,但是精度不高。
关键字:非线性方程组、牛顿法、BFGS 法、记忆梯度法、Memetic 算法1: 三种牛顿法:Newton 法、简化Newton 法、修改的Newton 法【1-3】求解非线性方程组的Newton 法是一个最基本而且十分重要的方法, 目前使用的很多有效的迭代法都是以Newton 法为基础, 或由它派生而来。
n 个变量n 个方程的非线性方程组, 其一般形式如下:⎪⎪⎩⎪⎪⎨⎧===0),...,(...0),...,(0),...,(21212211n n n n x x x f x x x f x x x f (1)式(1)中,),...,(21n i x x x f ( i=1, ⋯, n) 是定义在n 维Euclid 空间Rn 中开域 D 上 的实值函数。
若用向量记号,令:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=n x x x ...X 21,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡====)(...)()(0),...,(...0),..,(0)...,()(2121212,211X f X f X f x x x f x x x f x x x f X F nn n n n则方程组(1)也可表示为:0)(=X F(2) 其中:X ∈R n ,F ∶R n →R 0, F(X) ∈R n , R n 为赋值空间。
使用遗传算法进行优化问题求解的技巧遗传算法是一种模拟自然进化过程的优化算法,被广泛应用于各种优化问题的求解中。
它通过模拟自然界中的遗传、交叉和变异等过程,不断演化出更优解的种群。
本文将介绍使用遗传算法进行优化问题求解的一些技巧。
一、问题建模在使用遗传算法求解优化问题之前,首先需要将问题进行合理的建模。
建模的关键是定义适应度函数,即评价解的好坏程度的函数。
适应度函数应该能够准确地反映出问题的目标和约束条件。
在建模时,还需要确定问题的变量范围、约束条件等。
二、编码与解码遗传算法对问题的解进行编码,将解表示为染色体或基因的形式。
编码的方式有很多种,常见的有二进制编码、实数编码和排列编码等。
编码的选择应根据问题的特点和求解的要求进行合理的选择。
解码是将编码后的染色体或基因解码成问题的实际解。
解码过程应与编码过程相逆,保证解码后的结果能够准确地表示问题的解。
三、种群初始化种群初始化是遗传算法的起点,它决定了算法的初始状态。
种群的初始化应该尽量保证多样性,避免陷入局部最优解。
常见的初始化方法有随机初始化和启发式初始化等。
在初始化时,还可以利用问题的特点进行有针对性的初始化,提高算法的效率。
四、选择操作选择操作是遗传算法中的关键步骤,它决定了哪些个体能够生存下来并参与后续的交叉和变异操作。
选择操作的目标是根据个体的适应度值,按照一定的概率选择优秀个体,并保留下来。
常见的选择方法有轮盘赌选择、锦标赛选择和排名选择等。
选择操作应该保证优秀个体有更高的生存概率,同时也应该给予较差个体一定的生存机会,以保持种群的多样性。
五、交叉操作交叉操作是遗传算法中的重要步骤,它模拟了自然界中的基因交叉过程。
交叉操作通过将两个个体的染色体或基因进行交叉,产生新的个体。
交叉操作的目标是将两个个体的优秀特征结合起来,产生更优解的个体。
常见的交叉操作有单点交叉、多点交叉和均匀交叉等。
在进行交叉操作时,应该根据问题的特点和求解的要求进行合理的选择。
非线性方程组的求解摘要:非线性方程组求解是数学教学中,数值分析课程的一个重要组成部分,作为一门学科,其研究对象是非线性方程组。
求解非线性方程组主要有两种方法:一种是传统的数学方法,如牛顿法、梯度法、共轭方向法、混沌法、BFGS 法、单纯形法等。
传统数值方法的优点是计算精度高,缺点是对初始迭代值具有敏感性,同时传统数值方法还会遇到计算函数的导数和矩阵求逆的问题,对于某些导数不存在或是导数难求的方程,传统数值方法具有一定局限性。
另一种方法是进化算法,如遗传算法、粒子群算法、人工鱼群算法、差分进化算法等。
进化算法的优点是对函数本身没有要求,不需求导,计算速度快,但是精度不高。
关键字:非线性方程组、牛顿法、BFGS 法、记忆梯度法、Memetic 算法1: 三种牛顿法:Newton 法、简化Newton 法、修改的Newton 法【1-3】 求解非线性方程组的Newton 法是一个最基本而且十分重要的方法, 目前使用的很多有效的迭代法都是以Newton 法为基础, 或由它派生而来。
n 个变量n 个方程的非线性方程组, 其一般形式如下:⎪⎪⎩⎪⎪⎨⎧===0),...,(...0),...,(0),...,(21212211n n n n x x x f x x x f x x x f (1)式(1)中,),...,(21n i x x x f ( i=1, ⋯, n) 是定义在n 维Euclid 空间Rn 中开域 D 上 的实值函数。
若用向量记号,令:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=n x x x ...X 21,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡====)(...)()(0),...,(...0),..,(0)...,()(2121212,211X f X f X f x x x f x x x f x x x f X F nn n n n则方程组(1)也可表示为:0)(=X F(2) 其中:X ∈R n ,F ∶R n →R 0, F(X) ∈R n , R n 为赋值空间。
第七章 遗传算法应用举例遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖于问题具体的领域。
随着对遗传算法技术的不断研究,人们对遗传算法的实际应用越来越重视,它已经广泛地应用于函数优化、组合优化、自动控制、机器人学、图象处理、人工生命、遗传编码、机器学习等科技领域。
遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等多方面的应用取得了成功。
本章通过一些例子,介绍如何利用第五章提供的遗传算法通用函数,编写MATLAB 程序,解决实际问题。
7.1 简单一元函数优化实例利用遗传算法计算下面函数的最大值:()sin(10) 2.0[1,2]f x x x x π=⋅+∈-,选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25。
下面为一元函数优化问题的MA TLAB 代码。
figure(1);fplot ('variable.*sin(10*pi*variable)+2.0',[-1,2]); %画出函数曲线% 定义遗传算法参数NIND= 40; % 个体数目(Number of individuals)MAXGEN = 25; % 最大遗传代数(Maximum number of generations)PRECI = 20; % 变量的二进制位数(Precision of variables)GGAP = 0.9; % 代沟(Generation gap)trace=zeros (2, MAXGEN); % 寻优结果的初始值FieldD = [20;-1;2;1;0;1;1]; % 区域描述器(Build field descriptor) Chrom = crtbp(NIND, PRECI); % 初始种群gen = 0; % 代计数器variable=bs2rv(Chrom,FieldD); % 计算初始种群的十进制转换 ObjV = variable.*sin (10*pi*variable)+2.0; % 计算目标函数值while gen < MAXGEN,FitnV = ranking (-ObjV); % 分配适应度值(Assign fitness values) SelCh = select ('sus', Chrom, FitnV , GGAP); % 选择SelCh = recombin ('xovsp',SelCh,0.7); % 重组SelCh = mut(SelCh); % 变异variable=bs2rv(SelCh,FieldD); % 子代个体的十进制转换ObjVSel =variable.*sin(10*pi*variable)+2.0; % 计算子代的目标函数值[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV ,ObjVSel); % 重插入子代的新种群 gen = gen+1; % 代计数器增加% 输出最优解及其序号,并在目标函数图象中标出,Y 为最优解,I 为种群的序号[Y,I]=max(ObjV),hold on;plot (variable (I),Y, 'bo');trace (1,gen)=max (ObjV); %遗传算法性能跟踪trace (2,gen)=sum (ObjV)/length (ObjV);endvariable=bs2rv (Chrom,FieldD); %最优个体的十进制转换hold on,grid;plot (variable',ObjV','b*');figure (2);plot (trace (1,:)');hold on;plot (trace (2,:)','-.');grid;legend ('解的变化','种群均值的变化')使用基于适应度的重插入确保四个最适应的个体总是被连续传播到下一代。
matlab中的遗传算法【原创版】目录一、引言二、遗传算法的基本原理1.种群概念2.适应度函数3.选择操作4.交叉操作5.变异操作三、MATLAB 中遗传算法的实现1.准备工作2.遗传算法的实现四、遗传算法的应用案例1.旅行商问题2.装载问题五、遗传算法的优缺点六、结论正文一、引言遗传算法(Genetic Algorithm,GA)是一种模拟自然界生物进化过程的优化算法,其主要思想是将进化过程中的自然选择、交叉和变异等遗传操作应用到问题的求解过程中,从而实现对问题的优化求解。
遗传算法在解决复杂问题、非线性问题以及大规模问题等方面具有较强的优势,因此在各个领域得到了广泛的应用。
本文将介绍遗传算法的基本原理以及在MATLAB 中的实现。
二、遗传算法的基本原理1.种群概念遗传算法以一个种群作为优化过程的载体。
种群中的个体代表问题的解,每个个体由一组参数表示。
在优化过程中,种群会不断进化,最终收敛到问题的最优解。
2.适应度函数适应度函数是遗传算法的核心部分,用于评价种群中个体的优劣。
适应度函数的取值范围为 [0, 1],其中 1 表示最优解,0 表示最劣解。
在遗传算法的优化过程中,适应度函数用于选择优秀的个体,从而指导种群的进化。
3.选择操作选择操作是基于适应度函数的一种选择策略,用于选择下一代的父代个体。
常见的选择方法有轮盘赌选择、锦标赛选择等。
4.交叉操作交叉操作是遗传算法中产生新个体的主要方式,通过将选中的优秀个体进行交叉操作,产生具有更好适应度的新个体。
常见的交叉方法有单点交叉、多点交叉、均匀交叉等。
5.变异操作变异操作是在遗传算法中引入随机性的一种方式,通过随机改变某些基因的值,使新个体在进化过程中具有一定的多样性。
变异操作的强度由变异概率控制。
三、MATLAB 中遗传算法的实现1.准备工作在 MATLAB 中实现遗传算法,首先需要定义适应度函数、选择操作、交叉操作和变异操作等。
此外,还需要设置遗传算法的参数,如迭代次数、种群大小、交叉概率、变异概率等。
电力系统中的能源优化算法使用方法电力系统是现代社会不可或缺的基础设施,它为我们提供了稳定可靠的电能供应。
然而,随着能源需求的增长和环境问题的日益突出,电力系统的能源利用率和效率成为了亟待解决的问题。
为此,能源优化算法逐渐成为电力系统优化的关键工具。
本文将介绍电力系统中常见的能源优化算法并介绍其使用方法。
一、能源优化算法简介能源优化算法是一种基于数学模型和计算机技术的方法,通过优化电力系统的能源配置和运行策略,以提高能源利用效率,减少能源成本,降低环境污染和碳排放。
常见的能源优化算法包括线性规划、整数规划、混合整数规划、动态规划、遗传算法、粒子群算法等。
二、线性规划线性规划是最基础和常用的能源优化算法之一。
其基本思想是在给定的线性约束条件下,通过线性目标函数的最小化或最大化求解出最优解。
在电力系统中,线性规划常用于电力系统的负荷调度问题。
首先,建立电力系统的数学模型,包括电力供给和负荷需求的线性关系、电力设备的运行约束条件等。
然后,将目标函数定义为最小化能源成本或最大化供电可靠性,并利用线性规划算法求解出最优的能源供给策略。
三、整数规划整数规划是在线性规划的基础上引入整数变量,将问题的解限制在取整数值的约束条件下的优化问题。
在电力系统中,整数规划常用于电力系统的容量扩充和投资决策问题。
例如,对于一个电网规划问题,我们需要确定在给定的负荷需求下,应该建设哪些发电厂、输电线路和变电站,并确定它们的容量和位置。
整数规划算法可以帮助我们在多个备选方案中找到最优的解决方案。
四、混合整数规划混合整数规划是在整数规划的基础上引入了部分连续变量的优化问题。
在电力系统中,混合整数规划常用于综合考虑电力系统的供需平衡、能源经济性和环境效益的多目标优化问题。
例如,我们可以将目标函数定义为最小化总成本和最大化供电可靠性的加权组合,并通过混合整数规划算法求解得到最优的能源配置方案。
五、动态规划动态规划是一种基于状态转移方程的优化方法,常用于求解具有重叠子问题特性的优化问题。
求解非线性方程组的几种方法及程序实现
求解非线性方程组一直是理论数学和应用数学研究的重点,并采用不同的方法得到准确的结果。
它们可以分为几种类型:
1. 用以绘图的方法解非线性方程组:该方法充分利用结合几何和数理的原理,给出非线性方程组的解,而不用对系数的解的表达式求解手段。
主要是利用可绘图的几何空间分析,它可以帮助理解问题本身,还可以很容易看出非线性方程组的解。
2. 用迭代法求解非线性方程组:这是一种常用的方法,它通过不断迭代收敛求解非线性方程组。
基本思想是通过构造一个迭代函数,其初始值和原始非线性方程组尽可能接近,然后不断迭代收敛求解非线性方程组。
3. 用强调法求解非线性方程系统:这是基于梯度的一种方法,它利用一个概念,即局部线性化,可以降低维数、转化为一个拐点,最后强化搜索全局解。
4. 用牛顿-拉夫逊方法求解非线性方程组:这是一种准确、快速的非线性方程组求解方法,主要利用牛顿迭代法搜索解的收敛性,加上一些拉夫逊的加速策略得到最终的结果。
5. 用幂法求解非线性方程组:幂法也称为指数序列,是一种重要的求解非线性方程组的方法,基本原理是利用指数的累加和误差的减少,从而最终得到非线性方程组的解。
6. 用逐步逼近法求解非线性方程组:逐步逼近法也称为分步变程法,是一种用于求解非线性方程组的简单方法,其基本思想是用不同的参数,在给定的范围内,逐步逼近目标解。
这些方法的程序实现略有不同,可以利用编程语言比如C、Fortran、Python等,编写程序完成求解。
可以采用函数求解、循环求解、行列式求解或者混合的算法等不同的方式实现,甚至可以用深度学习方法求解有些复杂的非线性方程组。
新方法:
1、拟牛顿法:拟牛顿法是一种基于牛顿法的迭代方法,它使用一个近似的牛顿步骤来求解非线性方程组。
它的优点是可以收敛到全局最优解,而且收敛速度快。
2、模拟退火法:模拟退火法是一种基于模拟退火的迭代方法,它使用一个模拟退火步骤来求解非线性方程组。
它的优点是可以收敛到全局最优解,而且收敛速度快。
3、遗传算法:遗传算法是一种基于遗传算法的迭代方法,它使用一个遗传算法步骤来求解非线性方程组。
它的优点是可以收敛到全局最优解,而且收敛速度快。
4、模糊逻辑算法:模糊逻辑算法是一种基于模糊逻辑的迭代方法,它使用一个模糊逻辑步骤来求解非线性方程组。
它的优点是可以收敛到全局最优解,而且收敛速度快。
河北工业大学硕士学位论文基于遗传算法的微分方程求解问题的研究姓名:王晓翠申请学位级别:硕士专业:计算机应用技术指导教师:武优西20071101河北工业大学硕士学位论文基于遗传算法的微分方程求解问题的研究摘要遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖于问题的具体领域,已经广泛应用于函数优化、组合优化、自动控制、机器学习等科技领域。
自然科学和工程技术中的许多问题被归结为微分方程这一数学形式,而微分方程通常难以解析求解。
本文提出了利用最小二乘原理将微分方程的求解问题转化为求函数最小值的最优化问题,然后利用遗传算法进行进化计算求解常微分和偏微分方程,仿真实验验证了该方法的可行性。
本论文首先分析了课题的研究背景及意义,总结了国内外的研究现状,指出了现阶段求解微分方程的几种方法,并在此基础上进一步确立了利用遗传算法来求解微分方程作为本论文的主要研究内容。
其次,阐述了遗传算法的基本实现机理,并对遗传算法的特点及应用进行了比较详细的叙述,同时简要介绍了MATLAB遗传算法工具箱。
再次,在详细论述了遗传算法理论的基础上,研究了遗传算法在求解微分方程中的应用。
分别介绍了常微分方程及偏微分方程求解问题转化为最优化问题的基本过程,针对常微分方程和偏微分方程分别提出了方程解析解的构造方法,利用遗传算法进行进化计算,并通过实例说明了遗传算法中各个参数的设置方法,最终求得方程的近似最优解。
最后通过具体实例分析了该方法的求解过程,对结果进行了相应的误差分析,验证了该方法的可行性。
最后对本课题的研究进行了总结和进一步展望。
关键词:遗传算法,最优化问题,常微分方程,偏微分方程,构造函数基于遗传算法微分方程求解问题的研究GENETIC ALGORITHM FOR SOLVING ORDINARY AND PARTIAL DIFFERENTIAL EQUATIONSABSTRACTGenetic algorithm brings up a common frame to solve complex system problems, such as non-linear, multi-model, multi-objective and so on. It does not depend on the specific areas of problems and has been applied to many technological areas like functional optimization, combination optimization, auto-control, machine learning. Many problems in natural science and engineering technology could be expressed in a form of differential equations, while it is often difficult to solve that. This article presented a method to transform the problem of solving differential equations to the problem of optimization according to least square principle and some examples were solved to prove it feasible.The paper firstly analyzes the background and meanings of the research work and summarizes the research present situations home and abroad. At the same time, several methods solving differential equations now have been pointed out. Based on above, to solve differential equations with genetic algorithm is established as the main research contents.Secondly, the basic of genetic algorithm is elaborated and its characteristics and applications is detailed, meanwhile it also introduces the tools of genetic algorithm in MATLAB.Thirdly, based on above, genetic algorithm applying to solve differential equations is researched. How to transform the solving problem to optimization problem and how to construct analytical solution is proposed. Also it gives a method to set some parameters through the process solving some examples and the feasibility of the method is illustrated by putting it into solving those examples.At last, the research work is summarized and expected.KEY WORDS: genetic algorithm, optimization problem, ordinary differential equation, partial differential equation, constructed function原创性声明本人郑重声明:所呈交的学位论文,是本人在导师指导下,进行研究工作所取得的成果。
遗传算法解非线性方程组的Matlab程序
程序用MATLAB语言编写。
之所以选择MATLB,是因为它简单,但又功能强大。
写1行MATLAB程序,相当于写10行C++程序。
在编写算法阶段,最好用MATLAB语言,算法验证以后,要进入工程阶段,再把它翻译成C++语言。
本程序的算法很简单,只具有示意性,不能用于实战。
非线性方程组的实例在函数(2)nonLinearSumError1(x)中,你可以用这个实例做样子构造你自己待解的非线性方程组。
%注意:标准遗传算法的一个重要概念是,染色体是可能解的2进制顺序号,由这个序号在可能解的集合(解空间)中找到可能解
%程序的流程如下:
%程序初始化,随机生成一组可能解(第一批染色体)
%1: 由可能解的序号寻找解本身(关键步骤)
%2:把解代入非线性方程计算误差,如果误差符合要求,停止计算
%3:选择最好解对应的最优染色体
%4:保留每次迭代产生的最好的染色体,以防最好染色体丢失
%5: 把保留的最好的染色体holdBestChromosome加入到染色体群中
%6: 为每一条染色体(即可能解的序号)定义一个概率(关键步骤)
%7:按照概率筛选染色体(关键步骤)
%8:染色体杂交(关键步骤)
%9:变异
%10:到1
%这是遗传算法的主程序,它需要调用的函数如下。
%由染色体(可能解的2进制)顺序号找到可能解:
%(1)x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionS um);
%把解代入非线性方程组计算误差函数:(2)functionError=nonLinearSumError1(x); %判定程是否得解函数:(3)[solution,isTrue]=isSolution(x,funtionError,solutionSumError);
%选择最优染色体函数:
%(4)[bestChromosome,leastFunctionError]=best_worstChromosome(fatherC hromosomeGroup,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,soluti onN);
%通过实验有如下结果:
%1。
染色体应当多一些
%2。
通过概率选择染色体,在迭代早期会有效选出优秀的染色体,使解的误差迅速降低,%但随着迭代的进行,概率选择也会导致某种染色体在基因池中迅速增加,使染色体趋同,%这就减少了物种的多样性,反而难以逼近解
%3。
不用概率选择,仅采用染色体杂交,采用保留优秀染色体,也可以得到解
%%%%%%%%%%%%%%%%%%%%%%%%程序开始运行
clear,clc;%清理内存,清屏
circleN=200;%迭代次数
format long
%%%%%%%%%%%%%%%构造可能解的空间,确定染色体的个数、长度solutionSum=4;leftBoundary=-10;rightBoundary=10;
distance=1;chromosomeSum=500;solutionSumError=0.1;
%solutionSum:非线性方程组的元数(待解变量的个数);leftBoundary:可能解的左边界;%rightBoundary:可能解的右边界;distance:可能解的间隔,也是解的精度
%chromosomeSum:染色体的个数;solveSumError:解的误差oneDimensionSet=leftBoundary:distance:rightBoundary;
%oneDimensionSet:可能解在一个数轴(维)上的集合
oneDimensionSetN=size(oneDimensionSet,2);%返回oneDimensionSet中的元素个数
solutionN=oneDimensionSetN^solutionSum;%解空间(解集合)中可能解的总数binSolutionN=dec2bin(solutionN);%把可能解的总数转换成二进制数chromosomeLength=size(binSolutionN,2);%由解空间中可能解的总数(二进制数)计算染色体的长度
%%%%%%%%%%%%%%%%程序初始化
%随机生成初始可能解的顺序号,+1是为了防止出现0顺序号
solutionSequence=fix(rand(chromosomeSum,1)*solutionN)+1;
for i=1:chromosomeSum%防止解的顺序号超出解的个数
if solutionSequence(i)>solutionN;
solutionSequence(i)=solutionN;
end
end
%染色体是解集合中的序号,它对应一个可能解
%把解的十进制序号转成二进制序号
fatherChromosomeGroup=dec2bin(solutionSequence,chromosomeLength); holdLeastFunctionError=Inf;%可能解的最小误差的初值
holdBestChromosome=0;%对应最小误差的染色体的初值%%%%%%%%%%%%%%%%%%开始计算
circle=0;
while circle<circleN%开始迭代求解
circle=circle+1;%记录迭代次数
%%%%%%%%%%%%%1:由可能解的序号寻找解本身(关键步骤)
x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionSum); %%%%%%%%%%%%%2:把解代入非线性方程计算误差
functionError=nonLinearSumError1(x);%把解代入方程计算误差
[solution,minError,isTrue]=isSolution(x,functionError,solutionSumError);
%isSolution函数根据误差functionError判定方程是否已经解开,isTrue=1,方程得解。
solution是方程的解
if isTrue==1
'方程得解'
solution
minError
circle
return%结束程序
end
%%%%%%%%%%%%%3:选择最好解对应的最优染色体[bestChromosome,leastFunctionError]=best_worstChromosome(fatherChrom osomeGroup,functionError);
%%%%%%%%%%%%%4:保留每次迭代产生的最好的染色体
%本次最好解与上次最好解进行比较,如果上次最好解优于本次最好解,保留上次最好解;%反之,保留本次最好解。
保留的最好染色体放在holdBestChromosome中[holdBestChromosome,holdLeastFunctionError]...
=compareBestChromosome(holdBestChromosome,holdLeastFunctionError,... bestChromosome,leastFunctionError);
%circle
%minError
%solution
%holdLeastFunctionError
%%%%%%%%%%%%%%5:把保留的最好的染色体holdBestChromosome加入到染色体群中
order=round(rand(1)*chromosomeSum);
if order==0
order=1;
end
fatherChromosomeGroup(order,:)=holdBestChromosome;。