基于 Matlab 遗传算法的非线性方程组优化程序
clear,clc;%清理内存,清屏
circleN=200;%迭代次数
format long
solutionSum=4;leftBoundary=-10;rightBoundary=10;
distance=1;chromosomeSum=500;solutionSumError=0.1;
oneDimensionSet=leftBoundary:distance:rightBoundary;
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;
%把解的十进制序号转成二进制序号
fatherChromosomeGroup=dec2bin(solutionSequence,chromosomeLength);
holdLeastFunctionError=Inf;%可能解的最小误差的初值
holdBestChromosome=0;%对应最小误差的染色体的初值
while circle<circleN%开始迭代求解
x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionSum);
functionError=nonLinearSumError1(x);%把解代入方程计算误差
[solution,minError,isTrue]=isSolution(x,functionError,solutionSumError);
if isTrue==1
'方程得解'
solution