㈠ NSGA2遗传算法在matlab具体使用方法,有源代码该如何修改程序中的参数及设置
遗传算法在matlab里有两个函数,分别是ga和gaoptimset,前者用来调用遗传算法,后者用来设定遗传算法的参数,具体内容可以doc ga查看,遗传算法有哪些参数可以直接唤缓在命令窗口输入gaoptimset查派链亮看,祝好尘宽。
㈡ 混合遗传算法和遗传算法有什么区别
遗传算法是一种全域性搜寻算法,不需要目标函式的导数资讯,它能够很快搜索到最优值所处范围范围。
而混合遗传算法是在遗传算法的基础上引入其它优化算法(如区域性寻优能力强的算法),以保证遗传算法全域性效能的基础上大大减小计算量,提高收敛速度。一般引入的算法有:传统梯度类算法、单纯形法及模拟退火等等)这些算法都很容易与遗传算法相容。
遗传算法(Geic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜寻最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(indivial)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的对映即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进位制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传运算元(geic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
量子遗传算法是量子计算与遗传算法相结合的产物。目前,这一领域的研究主要集中在两类模型上:一类是基于量子多宇宙特征的多宇宙量子衍生遗传算法(Quantum Inspired Geic Algorithm),另塌锋一类是基于量子位元和量子态登加特性的遗传量子算法(Geic Quantum Algorithm,GQA)。
量 子遗传算法(Quantum GeicA lgorithm,QGA)。QGA采用多状态基因量子位元编码方式和通用的量子旋转门操作。引入动态调整旋转角机制和量子交叉,比文献[2]的方法更具有通用性,且效率更高。但该方法仍是一个群体独自演化没有利用盈子资讯的多宇宙和宇宙间的纠缠特性效率有待进一步提高。文献[3]提出一种多宇宙并行量子遗传算法(Multiuniverse Parallel Quantum Geic Algorithm,MPQGA),算法中将所有的个体按照一定的拓扑结构分成团穗晌一个个独立的子群体,称为宇宙;采用多状态基因量子位元编码方式来表达宇宙中的个体;采用通用的量子旋转门策略和动态调整旋转角机制对个体进行演化;各宇宙独立演化,这样可扩大搜索空间,宇宙之间采用最佳移民、量子交叉和量子变异操作来交换资讯使算法的适应性更强,效率更高。
遗传算法是计算数学中用于解决最佳化的搜寻算法,是进化算法的一种。
遗传算法(Geic Algorithm,GA)是由Holland J.H.于20世纪70年代提出的一种优化方法,其最优解的搜寻过程模拟达尔文的进化论和“适者生存”的思想。
蚁群算法(Ant Colony Optimization, ACO),是一种用来在图中寻找优化路径的机率型算法。
两种算法从概念上都属族空于随机优化算法,遗传算法是进化算法,主要通过选择、变异和交叉运算元,其中每个基因是由二进位制串组成;蚁群算法是基于图论的算法,通过资讯素选择交换资讯。
:ke../view/45853.htm
多讲讲吧,并行机是什么意思
function m_main()
clear
clc
Max_gen=100;% 执行代数
pop_size=100;%种群大小
chromsome=10;%染色体的长度
pc=0.9;%交叉概率
pm=0.25;%变异概率
gen=0;%统计代数
%初始化
init=40*rand(pop_size,chromsome)-20;
pop=init;
fit=obj_fitness(pop);
[max_fit,index_max]=max(fit);maxfit=max_fit;
[min_fit,index_min]=min(fit);best_indiv=pop(index_max,:);
%迭代操作
while gen<Max_gen
gen=gen+1; bt(gen)=max_fit;
if maxfit<max_fit;maxfit=max_fit;pop(index_min,:)=pop(index_max,:);best_indiv=pop(index_max,:);end
best_indiv_tmp(gen)=pop(index_max);
newpop=ga(pop,pc,pm,chromsome,fit);
fit=obj_fitness(newpop);
[max_fit,index_max]=max(fit);
[min_fit,index_min]=min(fit);
pop=newpop;
trace(1,gen)=max_fit;
trace(2,gen)=sum(fit)./length(fit);
end
%执行结果
[f_max gen_ct]=max(bt)%求的最大值以及代数
maxfit
best_indiv
%画图
% bt
hold on
plot(trace(1,:),'.g:');
plot( trace(2,:),'.r-');
title('实验结果图')
xlabel('迭代次数/代'),ylabel('最佳适应度(最大值)');%座标标注
plot(gen_ct-1,0:0.1:f_max+1,'c-');%画出最大值
text(gen_ct,f_max+1, '最大值')
hold off
function [fitness]=obj_fitness(pop)
%适应度计算函式
[r c]=size(pop);
x=pop;
fitness=zeros(r,1);
for i=1:r
for j=1:c
fitness(i,1)=fitness(i,1)+sin(sqrt(abs(40*x(i))))+1-abs(x(i))/20.0;
end
end
function newpop=ga(pop,pc,pm,chromsome,fit);
pop_size=size(pop,1);
%轮盘赌选择
ps=fit/sum(fit);
pscum=cumsum(ps);%size(pscum)
r=rand(1,pop_size);qw=pscum*ones(1,pop_size);
selected=sum(pscum*ones(1,pop_size)<ones(pop_size,1)*r)+1;
newpop=pop(selected,:);
%交叉
if pop_size/2~=0
pop_size=pop_size-1;
end
for i=1:2:pop_size-1
while pc>rand
c_pt=round(8*rand+1);
pop_tp1=newpop(i,:);pop_tp2=newpop(i+1,:);
newpop(i+1,1:c_pt)=pop_tp1(1,1:c_pt);
newpop(i,c_pt+1:chromsome)=pop_tp2(1,c_pt+1:chromsome);
end
end
% 变异
for i=1:pop_size
if pm>rand
m_pt=1+round(9*rand);
newpop(i,m_pt)=40*rand-20;
end
end
首先有个很神奇的现象:人类以及动物的进化都是朝着好的方向发展,虽然有的往坏的方向发展了,但是总体肯定是往好的方向发展。这看似不奇怪,但是我们知道,人类的基因组合是随机的,没有上帝约束。这种随机过程的结果却是一致的!我们的遗传算法就是从这里得到启发!比如我要求y=x1+x2的最大值,两个变数,我不用传统的数学方法,就用幼儿园的方法,把所有可能取值带进去算,然后找出最大的就行了!但是,有时候取值是连续的,没关系!使其离散化,就像把模拟讯号化成数字讯号一样!还有个问题,如果取值太多咋办?这就是遗传算法的精髓!
首先,我不用取所有可能取值,我只取几十个或者几百个(自己定),然后进行处理,怎样处理呢?让我们回到刚开始的人类进化问题,虽然没有上帝的帮忙,但是我们知道,自然界遵循优胜劣汰的发贼,遵循交叉变异的法则,虽然不能数字化,但是这是个趋势!我们就是把这种法则数学化!所取的几十个值我要剩下哪些?要抛弃哪些?要处理哪些?这都要我们自己选择,肯定是选择最合适的取值留下,经过一系列的处理,就生成了新的群体,然后再处理,自己约定处理到第几次就可以了,取出现过的最大值
不用担心取到的是不是最大值,因为数学上已经有了证明,这种方法是收敛的,概率是1,所以尽管放心的做,具体的做法要参考相关书籍,不难的。
遗传算法的最大用处就是解决数学理论不能解决的问题!比如路径规划,排程问题……
都属于智慧优化算法
但是蚁群算法具有一定的记忆性,遗传算法没有
蚁群算法有几种原则,比如觅食原则,避障原则等,遗传算法没有
蚁群算法属于群智慧优化算法,具有并行性,每个粒子都可以主动寻优,遗传算法不行
蚁群算法基于资讯素在环境中的指示,遗传算法是基于优胜劣汰的生物进化思想
遗传算法有选择,交叉,变异三种运算元,每种运算元又有各自的不同方法,通过对运算元方法的修改和搭配,可以得到不同的改进遗传算法
蚁群算法则多和其他智慧算法相结合,得到改进的蚁群算法
1 初始化染色体,这一步和粒子群初始化没啥区别
2 采用二人或多人锦标赛形式,在配对池里产生新的染色体子代,新生代种群规模为原来种群规模的一半。
3 针对新生代群体进行交叉和变异操作,以概率的方法判决进行交叉还是变异操作,一般来说,我们以较大的概率交叉,较小的概率进行变异,具体的交叉变异操作文献上都有,和二进位制遗传算法是不一样的,一会儿我会讲到。随机选择的一对父母染色体进行交叉操作会产生一对新的染色体,而变异操作仅仅是针对一个单亲变异,所以只产生一个新的染色体。
4 合并原来的种群和后代种群,计算适应度值,输出最优解空间
5 算法结束。
㈢ 我用NSGA算法优化三个目标函数,得出的所有非劣解画出三维图来是一条曲线,看他们都是一个面啊
不对,2个目标是一条曲线,三个目标应该是一个曲面才对。在matlab中用plot3函数来完成绘制
㈣ 没有目标函数的优化问题。 1、目标函数是有的,只是和变量没有显式。 2、目标函数是可以通过实测得到。
遗传算法。NSGA2。举个最简单的例子,给出一组这4个变量的值,你确定出相应的目标函数,那如果遍历完所有的解呢,就确定了所有的目标函数值。没有明确的关系应该指的是不能用解析式表达出来吧,能用仿真或者程序计算就行了,遗传算法是可以没有表达式的。网上有相应的程序,也可以用matlab的工具箱。http://www.pudn.com/downloads123/sourcecode/math/detail522443.html