遗传算法Matlab程序
完整的遗传算法函数Matlab程序
完整的遗传算法函数Matlab程序
遗传算法是一种模拟自然进化过程的算法,通过遗传代数操作来搜索最优解。它是一种优化算法,可以用于解决复杂问题,例如函数优化、组合优化、机器学习等。在Matlab 中,遗传算法可以通过使用内置函数进行实现,也可以编写自己的遗传算法函数。以下是一个完整的遗传算法函数Matlab程序的示例:
function [x_best, f_best] = GA(fit_func, nvars)
% fit_func: 适应度函数句柄
% nvars: 变量个数
% 遗传算法参数设置
pop_size = 100; % 种群大小
prob_crossover = 0.8; % 交叉概率
prob_mutation = 0.02; % 变异概率
max_gen = 1000; % 最大迭代次数
% 初始化种群
pop = rand(pop_size, nvars);
for i = 1:max_gen
% 计算适应度
for j = 1:pop_size
fitness(j) = feval(fit_func, pop(j,:));
end
% 找到最优个体
[f_best, best_idx] = max(fitness);
x_best = pop(best_idx,:);
% 交叉操作
for j = 1:2:pop_size
if rand < prob_crossover
% 随机选择父代
idx_parent1 = randi(pop_size);
idx_parent2 = randi(pop_size);
使用Matlab进行遗传算法优化问题求解的方法
使用Matlab进行遗传算法优化问题求解的方
法
引言
在现代科技发展的背景下,优化算法成为解决各种问题的重要工具之一。遗传
算法作为一种生物启发式算法,具有全局寻优能力和适应性强的特点,在许多领域中被广泛应用。本文将介绍如何使用Matlab进行遗传算法优化问题求解,包括问
题建模、遗传算子设计、遗传算法编码、适应度评价和求解过程控制等方面。
一、问题建模
在使用遗传算法求解优化问题之前,我们首先需要将问题定义为数学模型。这
包括确定问题的目标函数和约束条件。例如,假设我们要最小化一个多变量函数
f(x),其中x=(x1,x2,...,xn),同时还有一些约束条件g(x)<=0和h(x)=0。在Matlab中,我们可通过定义一个函数来表示目标函数和约束条件。具体实现时,我们需要在目标函数和约束函数中设置输入参数,通过调整这些参数进行优化。
二、遗传算子设计
遗传算法的核心是遗传算子的设计,包括选择(Selection)、交叉(Crossover)、变异(Mutation)和替代(Replacement)等。选择操作通过一定的策略从种群中选择出适应度较高的个体,作为进行交叉和变异的父代个体。交叉操作通过将两个父代个体的基因片段进行交换,产生新的子代个体。变异操作通过改变个体某些基因的值,引入新的基因信息。替代操作通过选择适应度较低的个体将其替换为新产生的子代个体。
三、遗传算法编码
在遗传算法中,个体的编码方式决定了问题的解空间。常见的编码方式有二进
制编码和实数编码等。当问题的变量是二进制形式时,采用二进制编码。当问题的变量是实数形式时,采用实数编码。在Matlab中,我们可以使用矩阵或向量来表
matlab遗传算法学习和全局化算法
1 遗传算法步骤
1 根据具体问题选择编码方式,随机产生初始种群,个体数目一定,每个个体表现为染色体的基因编码
2 选择合适的适应度函数,计算并评价群体中各个体的适应。
3 选择(selection)。根据各个个体的适应度,按照一定的规则或方法,从当前群体中选择出一些优良的个体遗传到下一代群体
4 交叉(crossover)。将选择过后的群体内的各个个体随机搭配成对,对每一对个体,以一定概率(交叉概率)交换它们中的部分基因。
5 变异(mutation)。对交叉过后的群体中的每一个个体,以某个概率(称为变异概率)改n 变某一个或某一些基因位上的基因值为其他的等位基因
6 终止条件判断。若满足终止条件,则以进化过程中得到的具有最大适应度的个体作为最优解输出,终止运算。否则,迭代执行Step2 至Step5。
适应度是评价群体中染色体个体好坏的标准,是算法进化的驱动力,是自然选择的唯一依据,改变种群结构的操作皆通过适应度函数来控制。在遗传算法中,以个体适应度的大小来确定该个体被遗传到下一代群体中的概率。个体的适应度越大,被遗传到下一代的概率就越大,相反,被遗传到下一代的概率就越小。
1 [a,b,c]=gaopt(bound,fun)其中,bound=[xm,xM]为求解区间上届和下届构成的矩阵。Fun 为用户编写的函数。a为搜索的结果向量,由搜索的出的最优x向量与目标函数构成,b为最终搜索种群,c为中间搜索过程变参数,其第一列为代数,后边列分别为该代最好的的个体与目标函数的值,可以认为寻优的中间结果。
用MATLAB实现遗传算法程序
用MATLAB实现遗传算法程序
一、本文概述
遗传算法(Genetic Algorithms,GA)是一种模拟自然界生物进化过程的优化搜索算法,它通过模拟自然选择和遗传学机制,如选择、交叉、变异等,来寻找问题的最优解。由于其全局搜索能力强、鲁棒性好以及易于实现并行化等优点,遗传算法在多个领域得到了广泛的应用,包括函数优化、机器学习、神经网络训练、组合优化等。
本文旨在介绍如何使用MATLAB实现遗传算法程序。MATLAB作为一种强大的数学计算和编程工具,具有直观易用的图形界面和丰富的函数库,非常适合用于遗传算法的实现。我们将从基本的遗传算法原理出发,逐步介绍如何在MATLAB中编写遗传算法程序,包括如何定义问题、编码、初始化种群、选择操作、交叉操作和变异操作等。
通过本文的学习,读者将能够掌握遗传算法的基本原理和MATLAB编程技巧,学会如何使用MATLAB实现遗传算法程序,并能够在实际问题中应用遗传算法求解最优解。
二、遗传算法基础
遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传学
机制的优化搜索算法。它借鉴了生物进化中的遗传、交叉、变异等机制,通过模拟这些自然过程来寻找问题的最优解。遗传算法的核心思想是将问题的解表示为“染色体”,即一组编码,然后通过模拟自然选择、交叉和变异等过程,逐步迭代搜索出最优解。
在遗传算法中,通常将问题的解表示为一个二进制字符串,每个字符串代表一个个体(Individual)。每个个体都有一定的适应度(Fitness),适应度越高的个体在下一代中生存下来的概率越大。
matlab遗传算法求最大值步骤
一、介绍
Matlab是一个高性能的数学计算软件,它集成了许多数学工具箱,其中包括遗传算法工具箱,可以帮助用户利用遗传算法求解最优化问题。遗传算法是一种模拟生物进化过程的优化方法,通过模拟自然选择、
交叉和变异等操作,不断优化解的搜索空间,从而找到最优解。
二、遗传算法求最大值步骤
1. 创建遗传算法对象
我们需要使用Matlab的遗传算法工具箱中的函数`ga`来创建一个遗传算法对象。在创建对象时,需要指定优化的目标函数、决策变量的上
下界、约束条件等参数,以及遗传算法的种裙大小、进化代数等参数。例如:
```matlab
options = gaoptimset('Generations', 100, 'PopulationSize', 50); [x, fval, exitflag, output] = ga(fitnessfun, nvars, A, b, Aeq, beq, lb, ub, nonlcon, options);
```
其中,`fitnessfun`是用户自定义的目标函数,`nvars`是决策变量的个数,`A`, `b`, `Aeq`, `beq`是线性约束条件,`lb`, `ub`是决策变量的上
下界,`nonlcon`是非线性约束条件,`options`是遗传算法的参数设置。
2. 编写目标函数
用户需要编写自己的目标函数`fitnessfun`,该函数接受决策变量作为
输入,并返回一个标量作为目标值。例如:
```matlab
function y = fitnessfun(x)
y = -sum(x.^2);
matlab遗传算法两个变量范围
matlab遗传算法两个变量范围
一、遗传算法概述
遗传算法是一种通过模拟生物进化过程进行优化的算法。它基于遗传学的思想,通过模拟生物的选择、交叉和变异等操作,逐步寻找最优解。遗传算法包含三个基本操作:选择、交叉和变异。选择操作通过适应度函数对个体进行评估,并选择适应度较高的个体作为父代,用于产生下一代个体。交叉操作通过交换父代个体的基因片段,产生新的个体。变异操作则对个体的基因进行随机变化,增加种群的多样性。
二、MATLAB遗传算法
MATLAB提供了丰富的遗传算法工具箱,便于开发者使用遗传算法解决各类优化问题。在使用MATLAB进行遗传算法优化时,需要确定待优化问题的变量范围。变量范围是指变量的取值范围,通过限制变量的取值范围,可以缩小搜索空间,提高算法的效率。
三、确定变量范围的重要性
在遗传算法中,变量范围的确定对优化结果具有重要影响。如果变量范围设置不当,可能导致算法陷入局部最优解,无法找到全局最优解。因此,确定合适的变量范围是进行遗传算法优化的关键步骤之一。
四、变量范围的确定方法
确定变量范围的方法有多种,可以根据具体问题的特点和要求选择合适的方法。常用的方法包括:经验法、试错法和数学建模法。
经验法是一种基于经验和实践的确定变量范围的方法。通过对问题的理解和对变量的分析,结合实际应用经验,确定变量的合理范围。这种方法简单直观,但可能会受到主观因素的影响。
试错法是一种通过试验和调整的方法来确定变量范围。首先根据经验或初步分析,给定一个初始范围,然后进行优化计算,观察优化结果的稳定性和收敛性,根据结果进行范围的调整。通过多次试验和调整,逐步确定合适的变量范围。
matlab多目标优化遗传算法
matlab多目标优化遗传算法
Matlab多目标优化遗传算法
引言:
多目标优化是在现实问题中常见的一种情况,它涉及到在多个目标函数的约束下,寻找一组最优解,从而使得多个目标函数达到最优状态。遗传算法是一种常用的优化方法,它模拟了自然界中的遗传和进化过程,通过不断迭代、选择和交叉变异等操作,逐步搜索最优解。本文将介绍如何使用Matlab中的遗传算法工具箱来实现多目标优化。
多目标优化问题描述:
在传统的单目标优化问题中,我们寻找的是一组参数,使得目标函数的值最小或最大。而在多目标优化问题中,我们需要考虑多个目标函数的最优化。具体来说,我们假设有m个目标函数,目标向量为f(x)=(f1(x), f2(x), ..., fm(x)),其中x是决策变量向量。我们的目标是找到一组解x∗,使得f(x∗)在所有可行解中最优。然而,由于多目标问题中的目标函数之间往往存在冲突,即改善一个目标函数的同时可能会导致其他目标函数的恶化,导致不存在一个唯一最优解。因此,我们常常追求一组非劣解,即无法通过改变解的一个目标值而不改变其他目标值。
Matlab多目标优化遗传算法工具箱:
Matlab提供了一个强大的工具箱,即Multiobjective Optimization Toolbox,可用于解决多目标优化问题。该工具箱基于遗传算法,并结合了其他优化策略和算子,能够高效地搜索多目标优化问题的非劣解集合。
使用Matlab多目标优化遗传算法工具箱的步骤如下:
1. 定义目标函数:根据具体问题,编写目标函数,输入为决策变量向量,输出为目标函数向量。
遗传算法优化的matlab案例
遗传算法优化的matlab案例
以下是一个简单的遗传算法优化的Matlab 案例:
假设我们想找到一个函数f(x) 的最大值,其中x 的取值范围为[0,10]。我们可以使用遗传算法来找到最大值。
步骤如下:
1. 定义适应度函数
我们可以使用f(x) 来定义适应度函数。在这个例子中,我们使用函数f(x) = x^2。在Matlab 中,我们可以这样定义适应度函数:
function y = fitness(x)
y = x.^2;
end
2. 定义遗传算法参数
我们需要定义一些遗传算法的参数,如种群大小、交叉概率、变异概率等。在这个例子中,我们定义种群大小为50,交叉概率为0.8,变异概率为0.1。
pop_size = 50; % 种群大小
crossover_rate = 0.8; % 交叉概率
mutation_rate = 0.1; % 变异概率
3. 执行遗传算法优化
我们可以使用Matlab 自带的ga 函数来执行遗传算法优化。我们需要传入适应度函数、变量的取值范围等参数。
lb = 0; % 变量下限
ub = 10; % 变量上限
nvars = 1; % 变量个数
options =
gaoptimset('Display','iter','PopulationSize',pop_size,'CrossoverFraction',c rossover_rate,'MutationFcn',@mutationadaptfeasible,'MutationRate',mut ation_rate,'StallGenLimit',50); % 遗传算法参数
matlab遗传算法参数拟合
matlab遗传算法参数拟合
使用Matlab的遗传算法进行参数拟合是一种常见的优化方法,可以有效地解决复杂的问题。本文将介绍遗传算法的基本原理和步骤,并结合实例说明如何使用Matlab进行参数拟合。
遗传算法是一种基于生物进化理论的优化算法,通过模拟自然选择、交叉和变异等过程来搜索最优解。在参数拟合问题中,我们希望找到最优的参数组合,使得模型的输出与实际观测值最接近。
我们需要定义适应度函数,用于衡量参数组合的好坏程度。适应度函数的选择与具体的问题相关,可以是均方误差、相关系数等。在Matlab中,可以通过定义一个函数来计算适应度。
接下来,我们需要确定遗传算法的参数,包括种群大小、交叉概率、变异概率等。种群大小决定了解空间的覆盖程度,交叉概率和变异概率决定了解的多样性。这些参数的选择需要根据具体问题进行调整,以获得较好的结果。
然后,我们可以使用Matlab中的遗传算法函数进行参数拟合。首先,需要定义参数的取值范围,以限定解的搜索空间。然后,可以调用遗传算法函数,并设置相关参数。在每一代中,遗传算法将根据适应度函数对种群进行选择、交叉和变异,直到达到停止条件为止。
在实际应用中,我们可以通过调整参数的取值范围、适应度函数的定义和遗传算法的参数来优化拟合效果。此外,还可以使用多次运行或自适应策略来增加搜索的效率和精度。
下面以一个简单的例子来说明如何使用Matlab的遗传算法进行参数拟合。假设我们有一组实际观测数据,希望用一个二次函数来拟合这些数据。我们需要确定二次函数的系数a、b和c,使得拟合结果与观测数据最接近。
matlab中的遗传算法拟合
matlab中的遗传算法拟合
在MATLAB中,遗传算法是一种常用的优化算法,可以用于拟合
数据。遗传算法是一种模拟自然进化过程的优化算法,通过模拟基
因的交叉、变异和选择等操作,逐步优化解的质量。
下面我将从多个角度介绍在MATLAB中使用遗传算法进行拟合的
步骤和注意事项:
1. 准备数据,首先,你需要准备一组实验数据,包括自变量和
因变量。确保数据的准确性和完整性,以获得准确的拟合结果。
2. 定义适应度函数,适应度函数用于评估每个个体的适应程度,即拟合程度。在拟合问题中,适应度函数通常是计算预测值与实际
值之间的误差或损失函数。你需要根据具体问题定义适应度函数。
3. 初始化种群,在遗传算法中,种群是由多个个体组成的集合。每个个体代表一个可能的解。你需要初始化一个种群,设置种群大
小和每个个体的基因编码。
4. 选择操作,选择操作用于选择适应度较高的个体作为父代,
用于产生下一代个体。常用的选择方法包括轮盘赌选择、锦标赛选择等。你可以根据具体问题选择适合的选择操作。
5. 交叉操作,交叉操作模拟基因的交换,通过将两个个体的基因进行交叉,产生新的个体。交叉操作有多种方式,如单点交叉、多点交叉等。选择合适的交叉操作方式可以增加种群的多样性。
6. 变异操作,变异操作模拟基因的突变,通过改变个体的某些基因值来引入新的解。变异操作有多种方式,如位变异、均匀变异等。变异操作可以增加种群的多样性,避免陷入局部最优解。
7. 更新种群,通过选择、交叉和变异操作,生成新的个体,更新种群。
8. 迭代优化,重复进行选择、交叉和变异操作,直到达到停止条件。停止条件可以是达到最大迭代次数、达到预定的适应度阈值或者经过一定的迭代次数后适应度不再改变等。
遗传算法matlab代码
遗传算法matlab代码
以下是一个简单的遗传算法的MATLAB 代码示例:
matlab复制代码
% 遗传算法参数设置
pop_size = 50; % 种群大小
num_vars = 10; % 变量数目
num_generations = 100; % 进化的代数
mutation_rate = 0.01; % 变异率
crossover_rate = 0.8; % 交叉率
% 初始化种群
population = rand(pop_size, num_vars);
% 开始进化
for i = 1:num_generations
% 计算适应度
fitness = evaluate_fitness(population);
% 选择操作
selected_population = selection(population, fitness);
% 交叉操作
offspring_population = crossover(selected_population,
crossover_rate);
% 变异操作
mutated_population = mutation(offspring_population,
mutation_rate);
% 生成新种群
population = [selected_population; mutated_population];
end
% 选择最优解
best_solution = population(find(fitness == max(fitness)), :);
% 适应度函数
(完整版)遗传算法matlab实现源程序
附页:
一.遗传算法源程序:
clc; clear;
population;
%评价目标函数值
for uim=1:popsize
vector=population(uim,:);
obj(uim)=hanshu(hromlength,vector,phen);
end
%obj
%min(obj)
clear uim;
objmin=min(obj);
for sequ=1:popsize
if obj(sequ)==objmin
opti=population(sequ,:);
end
end
clear sequ;
fmax=22000;
%==
for gen=1:maxgen
%选择操作
%将求最小值的函数转化为适应度函数
for indivi=1:popsize
obj1(indivi)=1/obj(indivi);
end
clear indivi;
%适应度函数累加总合
total=0;
for indivi=1:popsize
total=total+obj1(indivi);
end
clear indivi;
%每条染色体被选中的几率
for indivi=1:popsize
fitness1(indivi)=obj1(indivi)/total;
end
clear indivi;
%各条染色体被选中的范围
for indivi=1:popsize
fitness(indivi)=0;
for j=1:indivi
fitness(indivi)=fitness(indivi)+fitness1(j);
end
end
clear j;
fitness;
遗传算法matlab实现源程序
遗传算法matlab实现源程序
遗传算法是一种基于自然进化过程中的选择、交叉和变异等机制来求解最优问
题的一种优化算法。与其他优化算法相比,遗传算法在求解复杂问题时具有一定的优势。本文将简要介绍遗传算法的基本思想,重点介绍如何使用matlab实现遗传
算法,并提供相关源程序。
遗传算法基本思想
遗传算法是一个迭代的过程,每一次迭代称为一代。每一代都是由一组称作“个体”的解向量组成,个体在遗传算法中就好比生物体中的基因一样,是算法搜索
和进化的基本单位。
遗传算法的基本流程如下:
1.初始化一个群体,也就是随机产生一些初始解向量作为个体;
2.通过适应度函数对个体进行评估,选出适应度最好的一些个体作为
“父代”;
3.通过父代进行“遗传”,即使用交叉和变异等操作产生新的解向量作为
“子代”;
4.用新产生的子代代替原来的个体,重复步骤2和3直到达到停止条
件。
适应度函数是遗传算法中非常重要的一步。它用于评价一个个体解向量的质量,并将其转换成适应度值,适应度值越大代表个体解向量的质量越好。在计算适应度函数时,我们需要根据问题的不同而自定义适应度函数。
遗传算法matlab实现
matlab是一种强大的数值计算工具,也是遗传算法的一种常用实现平台。matlab提供了许多有效的函数来实现遗传算法,如下所示:
1.ga():用于执行遗传算法的函数;
2.fitnessfun():用于定义适应度函数的函数。
下面我们将通过一个例子来展示如何使用matlab实现遗传算法。我们将解决
一个简单的优化问题:找到下列函数的最小值:
f(x1,x2)=sin(x1)+cos(x2)
遗传算法及其MATLAB程序
遗传算法及其MATLAB实现
主要参考书:
MATLAB 6.5 辅助优化计算与设计飞思科技产品研发中心编著电子工业出版社2003.1
遗传算法及其应用陈国良等编著
人民邮电出版社1996.6
主要内容:
遗传算法简介
遗传算法的MATLAB实现
应用举例
在工业工程中,许多最优化问题性质十分复杂,很难用
传统的优化方法来求解.自1960年以来,人们对求解这类难
解问题日益增加.一种模仿生物自然进化过程的、被称为“
进化算法(evolutionary algorithm)”的随机优化技术在解这
类优化难题中显示了优于传统优化算法的性能。目前,进化
算法主要包括三个研究领域:遗传算法、进化规划和进化
策略。其中遗传算法是迄今为止进化算法中应用最多、比较
成熟、广为人知的算法。
一、遗传算法简介
遗传算法(Genetic Algorithm, GA)最先是由美国Mic-
hgan大学的John Holland于1975年提出的。遗传算法是
模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算
模型。它的思想源于生物遗传学和适者生存的自然规律,
是具有“生存+检测”的迭代过程的搜索算法。遗传算法
以一种群体中的所有个体为对象,并利用随机化技术指
导对一个被编码的参数空间进行高效搜索。其中,选择、
交叉和变异构成了遗传算法的遗传操作;参数编码、初始
群体的设定、适应度函数的设计、遗传操作设计、控制参
数设定等5个要素组成了遗传算法的核心内容。
遗传算法的基本步骤:
遗传算法是一种基于生物自然选择与遗传机理的随机
搜索算法,与传统搜索算法不同,遗传算法从一组随机产
matlab遗传算法求解曲面拟合和多参数优化
matlab遗传算法求解曲面拟合和多参数优化
Matlab遗传算法求解曲面拟合和多参数优化
引言:
曲面拟合和多参数优化是机器学习和数据挖掘领域中重要的问题。曲面拟合是通过给定的数据点集,找到一个最合适的曲面模型以拟合这些数据。而多参数优化是寻找多个参数的最佳取值,使得目标函数达到最大或最小。遗传算法是一种启发式搜索算法,可以用来求解这类问题。本文将介绍使用Matlab中的遗传算法工具箱来进行曲面拟合和多参数优化,并提供详细的步骤。
第一部分:曲面拟合
曲面拟合的目标是通过给定的数据点集找到一个最佳曲面模型,以拟合这些数据。在Matlab中,可以使用遗传算法工具箱来求解该问题。下面是一步一步的操作:
步骤1:导入数据和设置参数
首先,需要导入拟合曲面所需的数据点集。数据通常以矩阵的形式给出,其中每一行表示一个数据点的坐标。除此之外,还需要设置遗传算法的一些参数,包括种群大小、迭代次数、交叉概率和变异概率等。具体的参数设置根据具体问题而定。
步骤2:编写目标函数
目标函数是遗传算法的核心,它用来评估每个个体的适应度。在曲面拟合问题中,可以使用最小二乘法来定义适应度函数。具体来说,可以计算每个个体拟合曲面与真实数据之间的误差,然后将这些误差
累加起来作为适应度值。
步骤3:初始化种群
通过随机生成一定数量的个体(即曲面模型的参数),可以初始化种群。个体的参数可以根据实际问题设定,例如,对于二次方程的拟合,可以设置个体为三个参数:a、b、c。
步骤4:选择操作
选择操作是指根据个体的适应度值选择下一代的个体。在遗传算法中,常用的选择操作有轮盘赌选择、锦标赛选择和最佳选择等。通过选择操作,可以保留适应度较高的个体,从而增加下一代的优势基因。
遗传算法经典MATLAB代码
遗传算法经典MATLAB代码
遗传算法经典学习matlab代码
遗传算法实例:
也就是自己请来的,原代码存有少许错误,本人都已更正了,调试运转都通过了的。对于初学者,尤其就是还没编程经验的非常有价值的一个文件遗传算法实例
%下面举例说明遗传算法%%求下列函数的最大值%
%f(x)=10*sin(5x)+7*cos(4x)x∈[0,10]%
%将x的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01。%
%将变量域[0,10]线性化成二值域[0,1023],x=0+10*b/1023,其中b就是[0,1023]中的一个二值数。%%%
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%%编程
%-----------------------------------------------%2.1初始化(编码)
%initpop.m函数的功能就是同时实现群体的初始化,popsize则表示群体的大小,chromlength则表示染色体的长度(二值数的长度),
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
% f(x)=11*sin(6x)+7*cos(5x),0<=x<=2*pi;
%%初始化参数
L=16;%编码为16位二进制数
N=32;%初始种群规模
M=48;%M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异
T=100;%进化代数
Pc=0.8;%交叉概率
Pm=0.03;%%变异概率
%%将十进制编码成16位的二进制,再将16位的二进制转成格雷码
for i=1:1:N
x1(1,i)= rand()*2*pi;
x2(1,i)= uint16(x1(1,i)/(2*pi)*65535);
grayCode(i,:)=num2gray(x2(1,i),L);
end
%% 开始遗传算子操作
for t=1:1:T
y1=11*sin(6*x1)+7*cos(5*x1);
for i=1:1:M/2
[a,b]=min(y1);%找到y1中的最小值a,及其对应的编号b
grayCodeNew(i,:)=grayCode(b,:);%将找到的最小数放到grayCodeNew中grayCodeNew(i+M/2,:)=grayCode(b,:);%与上面相同就可以有M/2对格雷码可以作为母体y1(1,b)=inf;%用来排除已找到的最小值
end
for i=1:1:M/2
p=unidrnd(L);%生成一个大于零小于L的数,用于下面进行交叉的位置if rand() %将选定的染色体的点后的基因进行交换 for j=p:1:L temp= grayCodeNew(i,j); grayCodeNew(i,j)=grayCodeNew(M-i+1,j); grayCodeNew(M-i+1,j)=temp; end end end %%将全部染色体按概率进行变异 for i=1:1:M for j=1:1:L if rand() grayCodeNew(i,j)=dec2bin(1-bin2dec(grayCodeNew(i,j))); end end end %%第一代结束后生成的较优的染色体,得以保存然后进行下一代操作 for i=1:1:M x4(1,i)=gray2num(grayCodeNew(i,:)); end x3=double(x4)*2*pi/65535; y3=11*sin(6*x3)+7*cos(5*x3); for i=1:1:N [a,b]=min(y3); x1(1,i)=x3(1,b); grayCode(i,:)=grayCodeNew(b,:); y3(1,b)=inf; end end x1 y1=11*sin(6*x1)+7*cos(5*x1)