贪心算法的基本思路?MATLAB遗传算法

大家好!今天让小编来大家介绍下关于贪心算法的基本思路?MATLAB遗传算法的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

文章目录列表:

贪心算法的基本思路?MATLAB遗传算法-图1

2、遗传算法直接以目标函数值作为搜索信息,遗传算法的优缺点优点:1、遗传算法是以决策变量的编码作为运算对象,⒋把子问题的解局部最优解合成原来解问题的一个解,可以得到最优值 end%找最好的染色体[bestfitness bestindex]=min(individuals.fitness);bestchrom=individuals.chrom(bestindex,:); %最好的染色体avgfitness=sum(individuals.fitness)/sizepop; %染色体的平均适应度% 记录每一代进化中最好的适应度和平均适应度trace=; %% 进化开始for i=1:maxgen % 选择操作 individuals=Select(individuals,sizepop); avgfitness=sum(individuals.fitness)/sizepop; % 交叉操作 individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound); % 变异操作 individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i maxgen],bound); % 计算适应度 for j=1:sizepop x=individuals.chrom(j,:); individuals.fitness(j)=(x(1)*exp(-(x(1)^2 + x(2)^2))); %-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289 % -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289; end %找到最小和最大适应度的染色体及它们在种群中的位置 [newbestfitness,newbestindex]=min(individuals.fitness); [worestfitness,worestindex]=max(individuals.fitness); % 代替上一次进化中最好的染色体 if bestfitness》newbestfitness bestfitness=newbestfitness; bestchrom=individuals.chrom(newbestindex,:); end individuals.chrom(worestindex,:)=bestchrom; individuals.fitness(worestindex)=bestfitness; avgfitness=sum(individuals.fitness)/sizepop; trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度end%进化结束%% 结果显示[r c]=size(trace);figureplot([1:r]’,trace(:,1),’r-’,[1:r]’,trace(:,2),’b--’);title([’函数值曲线 ’ ’终止代数=’ num2str(maxgen)],’fontsize’,12);xlabel(’进化代数’,’fontsize’,12);ylabel(’函数值’,’fontsize’,12);legend(’各代平均值’,’各代最佳值’,’fontsize’,12);ylim([-0.5 5])disp(’函数值 变量’);% 窗口显示disp([bestfitness x]);算法指什么,while 能朝给定总目标前进一步do求出可行解的一个解元素,它的搜索过程是从一个具有多个个体的初始群体P(0)开始的,不涉及目标函数值求导求微分的过程,可惜不是最优解。

贪心算法的基本思路

1.建立数学模型来描述问题⒉把求解的问题分成若干个子问题。⒊对每一子问题求解,得到子问题的局部最优解。⒋把子问题的解局部最优解合成原来解问题的一个解。实现该算法的过程:从问题的某一初始解出发;while 能朝给定总目标前进一步do求出可行解的一个解元素;由所有解元素组合成问题的一个可行解。下面是一个可以试用贪心算法解的题目,贪心解的确不错,可惜不是最优解。

MATLAB遗传算法

function ret=Code(lenchrom,bound)%本函数将变量编码成染色体,用于随机初始化一个种群% lenchrom input : 染色体长度% bound input : 变量的取值范围% ret output: 染色体的编码值flag=0;while flag==0 pick=rand(1,length(lenchrom)); ret=bound(:,1)’+(bound(:,2)-bound(:,1))’.*pick; %线性插值 flag=test(lenchrom,bound,ret); %检验染色体的可行性endfunction ret=Cross(pcross,lenchrom,chrom,sizepop,bound)%本函数完成交叉操作% pcorss input : 交叉概率% lenchrom input : 染色体的长度% chrom input : 染色体群% sizepop input : 种群规模% ret output : 交叉后的染色体for i=1:sizepop % 随机选择两个染色体进行交叉 pick=rand(1,2); while prod(pick)==0 pick=rand(1,2); end index=ceil(pick.*sizepop); % 交叉概率决定是否进行交叉 pick=rand; while pick==0 pick=rand; end if pick》pcross continue; end flag=0; while flag==0 % 随机选择交叉位置 pick=rand; while pick==0 pick=rand; end pos=ceil(pick.*sum(lenchrom)); %随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同 pick=rand; %交叉开始 v1=chrom(index(1),pos); v2=chrom(index(2),pos); chrom(index(1),pos)=pick*v2+(1-pick)*v1; chrom(index(2),pos)=pick*v1+(1-pick)*v2; %交叉结束 flag1=test(lenchrom,bound,chrom(index(1),:)); %检验染色体1的可行性 flag2=test(lenchrom,bound,chrom(index(2),:)); %检验染色体2的可行性 if flag1*flag2==0 flag=0; else flag=1; end %如果两个染色体不是都可行,则重新交叉 endendret=chrom; clc clear all% warning off%% 遗传算法参数maxgen=50; %进化代数sizepop=100; %种群规模pcross=[0.6]; %交叉概率pmutation=[0.1]; %变异概率lenchrom=[1 1]; %变量字串长度bound=[-5 5;-5 5]; %变量范围%% 个体初始化individuals=struct(’fitness’,zeros(1,sizepop), ’chrom’,); %种群结构体avgfitness=; %种群平均适应度bestfitness=; %种群最佳适应度bestchrom=; %适应度最好染色体% 初始化种群for i=1:sizepop individuals.chrom(i,:)=Code(lenchrom,bound); %随机产生个体 x=individuals.chrom(i,:); individuals.fitness(i)= (x(1)*exp(-(x(1)^2 + x(2)^2))); %-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289 % 这个是我的测试函数 % 如果有这个函数的话,可以得到最优值 end%找最好的染色体[bestfitness bestindex]=min(individuals.fitness);bestchrom=individuals.chrom(bestindex,:); %最好的染色体avgfitness=sum(individuals.fitness)/sizepop; %染色体的平均适应度% 记录每一代进化中最好的适应度和平均适应度trace=; %% 进化开始for i=1:maxgen % 选择操作 individuals=Select(individuals,sizepop); avgfitness=sum(individuals.fitness)/sizepop; % 交叉操作 individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound); % 变异操作 individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i maxgen],bound); % 计算适应度 for j=1:sizepop x=individuals.chrom(j,:); individuals.fitness(j)=(x(1)*exp(-(x(1)^2 + x(2)^2))); %-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289 % -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289; end %找到最小和最大适应度的染色体及它们在种群中的位置 [newbestfitness,newbestindex]=min(individuals.fitness); [worestfitness,worestindex]=max(individuals.fitness); % 代替上一次进化中最好的染色体 if bestfitness》newbestfitness bestfitness=newbestfitness; bestchrom=individuals.chrom(newbestindex,:); end individuals.chrom(worestindex,:)=bestchrom; individuals.fitness(worestindex)=bestfitness; avgfitness=sum(individuals.fitness)/sizepop; trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度end%进化结束%% 结果显示[r c]=size(trace);figureplot([1:r]’,trace(:,1),’r-’,[1:r]’,trace(:,2),’b--’);title([’函数值曲线 ’ ’终止代数=’ num2str(maxgen)],’fontsize’,12);xlabel(’进化代数’,’fontsize’,12);ylabel(’函数值’,’fontsize’,12);legend(’各代平均值’,’各代最佳值’,’fontsize’,12);ylim([-0.5 5])disp(’函数值 变量’);% 窗口显示disp([bestfitness x]);

算法指什么,算法设计有什么指标

通俗讲就是解决问题的方法,用到计算机里,一般指程序设计中用到算法比较多。也是考研的时候计算机系的一个重点。算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。 一个算法应该具有以下五个重要的特征: 有穷性: 一个算法必须保证执行有限步之后结束; 确切性: 算法的每一步骤必须有确切的定义; 输入:一个算法有0个或多个输入,以刻画运算对象的初始情况; 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。

遗传算法的优缺点

优点:

1、遗传算法是以决策变量的编码作为运算对象,可以直接对集合、序列、矩阵、树、图等结构对象进行操作。这样的方式一方面有助于模拟生物的基因、染色体和遗传进化的过程,方便遗传操作算子的运用。

另一方面也使得遗传算法具有广泛的应用领域,如函数优化、生产调度、自动控制、图像处理、机器学习、数据挖掘等领域。

2、遗传算法直接以目标函数值作为搜索信息。它仅仅使用适应度函数值来度量个体的优良程度,不涉及目标函数值求导求微分的过程。因为在现实中很多目标函数是很难求导的,甚至是不存在导数的,所以这一点也使得遗传算法显示出高度的优越性。

3、遗传算法具有群体搜索的特性。它的搜索过程是从一个具有多个个体的初始群体P(0)开始的,一方面可以有效地避免搜索一些不必搜索的点。

另一方面由于传统的单点搜索方法在对多峰分布的搜索空间进行搜索时很容易陷入局部某个单峰的极值点,而遗传算法的群体搜索特性却可以避免这样的问题,因而可以体现出遗传算法的并行化和较好的全局搜索性。

4、遗传算法基于概率规则,而不是确定性规则。这使得搜索更为灵活,参数对其搜索效果的影响也尽可能的小。

5、遗传算法具有可扩展性,易于与其他技术混合使用。以上几点便是遗传算法作为优化算法所具备的优点。

缺点:

1、遗传算法在进行编码时容易出现不规范不准确的问题。

2、由于单一的遗传算法编码不能全面将优化问题的约束表示出来,因此需要考虑对不可行解采用阈值,进而增加了工作量和求解时间。

3、遗传算法效率通常低于其他传统的优化方法。

4、遗传算法容易出现过早收敛的问题。

扩展资料

遗传算法的机理相对复杂,在Matlab中已经由封装好的工具箱命令,通过调用就能够十分方便的使用遗传算法。

函数ga:[x, fval,reason]= ga(@fitnessfun, nvars, options)x是最优解,fval是最优值,@fitnessness是目标函数,nvars是自变量个数,options是其他属性设置。系统默认求最小值,所以在求最大值时应在写函数文档时加负号。

为了设置options,需要用到下面这个函数:options= gaoptimset (’PropertyName1’, ’PropertyValue1’, ’PropertyName2’, ’PropertyValue2’,’PropertyName3’, ’PropertyValue3’, ...)通过这个函数就能够实现对部分遗传算法的参数的设置。

参考资料来源:百度百科-遗传算法

以上就是小编对于贪心算法的基本思路?MATLAB遗传算法问题和相关问题的解答了,贪心算法的基本思路?MATLAB遗传算法的问题希望对你有用!

转载请说明出处 内容投诉内容投诉
南趣百科 » 贪心算法的基本思路?MATLAB遗传算法

南趣百科分享生活经验知识,是您实用的生活科普指南。

查看演示 官网购买