数学建模社区-数学中国

标题: 200908网友求助《遗传算法的代码》 [打印本页]

作者: 11071987    时间: 2009-8-26 19:53
标题: 200908网友求助《遗传算法的代码》
本帖最后由 为你奋斗 于 2009-12-3 13:54 编辑 谁有遗传算法的代码,,谢谢
作者: sisi_bupt    时间: 2009-8-26 20:13
一个简单的小例子,matlab的~

遗传算法.rar

3.44 KB, 下载次数: 9, 下载积分: 体力 -2 点


作者: 蒙萌    时间: 2009-8-26 20:15
[url=http://www.madio.cn/mcm/redire  function
Genetic Algorithm




initialize


evaluate


while (not termination-condition)


select
from

alter
evaluate

end

ct.php?goto=findpost&pid=315640&ptid=31679]1#[/url] 11071987

作者: caimingguang89    时间: 2009-8-26 20:27
MATLAB 遗传算法代码

遗传算法的源代码.rar

3.37 MB, 下载次数: 19, 下载积分: 体力 -2 点


作者: 雄鹰飞翔    时间: 2009-8-26 21:13
论坛里有遗传算法的PPT资料 案例分析及MATLAB源程序实现!
作者: wlch1990    时间: 2009-8-27 16:02
1# 11071987

200431814241431836.rar

88.31 KB, 下载次数: 2, 下载积分: 体力 -2 点

20043181424023519.rar

195.31 KB, 下载次数: 0, 下载积分: 体力 -2 点

20043181424882384.rar

195.31 KB, 下载次数: 0, 下载积分: 体力 -2 点


作者: wlch1990    时间: 2009-8-27 16:04
1# 11071987

看看吧

遗传算法.rar

1.96 MB, 下载次数: 25, 下载积分: 体力 -2 点


作者: danli    时间: 2009-8-28 15:01
谢了。。。。
作者: cherry_deluxe    时间: 2009-8-28 19:27
挑了一个,谢谢啦
作者: 爱上纳木错    时间: 2009-9-5 13:42
本帖最后由 爱上纳木错 于 2009-9-5 13:52 编辑

程序分为几个部分
编码 genetic.m
初始群体的生成 gen_encode.m
适应性值评估检测 gen_decode.m
选择性复制 crossover.m
交叉 mutation.m
变异 shuffle.m
作者: 爱上纳木错    时间: 2009-9-5 13:45
function [x,endPop,bPop,traceInfo] = ga(bounds,eevalFN,eevalOps,startPop,opts,...
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)
n=nargin;
if n<2 | n==6 | n==10 | n==12
disp('Insufficient arguements')
end
if n<3 %Default eevalation opts.
eevalOps=[];
end
if n<5
opts = [1e-6 1 0];
end
if isempty(opts)
opts = [1e-6 1 0];
end
if any(eevalFN<48) %Not using a .m file
if opts(2)==1 %Float ga
e1str=['x=c1; c1(xZomeLength)=', eevalFN ';'];
e2str=['x=c2; c2(xZomeLength)=', eevalFN ';'];
else %Binary ga
e1str=['x=b2f(endPop(j,:),bounds,bits); endPop(j,xZomeLength)=',...
eevalFN ';'];
end
else %Are using a .m file
if opts(2)==1 %Float ga
e1str=['[c1 c1(xZomeLength)]=' eevalFN '(c1,[gen eevalOps]);'];
e2str=['[c2 c2(xZomeLength)]=' eevalFN '(c2,[gen eevalOps]);'];
else %Binary ga
e1str=['x=b2f(endPop(j,:),bounds,bits);[x v]=' eevalFN ...
'(x,[gen eevalOps]); endPop(j,:)=[f2b(x,bounds,bits) v];'];
end
end

if n<6 %Default termination information
termOps=[100];
termFN='maxGenTerm';
end
if n<12 %Default muatation information
if opts(2)==1 %Float GA
mutFNs=['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation'];
mutOps=[4 0 0;6 termOps(1) 3;4 termOps(1) 3;4 0 0];
else %Binary GA
mutFNs=['binaryMutation'];
mutOps=[0.05];
end
end
if n<10 %默认的交叉信息
if opts(2)==1 %浮点编码
xOverFNs=['arithXover heuristicXover simpleXover'];
xOverOps=[2 0;2 3;2 0];
else %Binary GA
xOverFNs=['simpleXover'];
xOverOps=[0.6];
end
end
if n<9 %Default select opts only i.e. roullete wheel.
selectOps=[];
end
if n<8 %Default select info
selectFN=['normGeomSelect'];
selectOps=[0.08];
end
if n<6 %默认的算法终止准则
termOps=[100];
termFN='maxGenTerm';
end
if n<4 %初始种群为空
startPop=[];
end
if isempty(startPop) %随机生成初始种群
startPop=initializega(80,bounds,eevalFN,eevalOps,opts(1:2));
end
if opts(2)==0 %二进制编码
bits=calcbits(bounds,opts(1));
end
xOverFNs=parse(xOverFNs);
mutFNs=parse(mutFNs);
xZomeLength = size(startPop,2); %Length of the xzome=numVars+fittness
numVar = xZomeLength-1; %变量数目
popSize = size(startPop,1); %种群中个体数目
endPop = zeros(popSize,xZomeLength); %次种群矩阵
c1 = zeros(1,xZomeLength); %个体
c2 = zeros(1,xZomeLength); %个体
numXOvers = size(xOverFNs,1); %交叉操作次数
numMuts = size(mutFNs,1); %变异操作次数
epsilon = opts(1); %适应度门限值
oeval = max(startPop(:,xZomeLength)); %初始种群中的最优值
bFoundIn = 1;
done = 0;
gen = 1;
collectTrace = (nargout>3);
floatGA = opts(2)==1;
display = opts(3);
while(~done)
[beval,bindx] = max(startPop(:,xZomeLength)); %当前种群的最优值
best = startPop(bindx,:);
if collectTrace
traceInfo(gen,1)=gen; %当前代
traceInfo(gen,2)=startPop(bindx,xZomeLength); %最优适应度
traceInfo(gen,3)=mean(startPop(:,xZomeLength)); %平均适应度
traceInfo(gen,4)=std(startPop(:,xZomeLength));
end

if ( (abs(beval - oeval)>epsilon) | (gen==1))
if display
fprintf(1,'\n%d %f\n',gen,beval);
end
if floatGA
bPop(bFoundIn,:)=[gen startPop(bindx,:)];
else
bPop(bFoundIn,:)=[gen b2f(startPop(bindx,1:numVar),bounds,bits)...
startPop(bindx,xZomeLength)];
end
bFoundIn=bFoundIn+1;
oeval=beval;
else
if display
fprintf(1,'%d ',gen);
end
end

endPop = feeval(selectFN,startPop,[gen selectOps]); %选择操作

if floatGA
for i=1:numXOvers,
for j=1:xOverOps(i,1),
a = round(rand*(popSize-1)+1); %一个父代个体
b = round(rand*(popSize-1)+1); %另一个父代个体
xN=deblank(xOverFNs(i,:)); %交叉函数
[c1 c2] = feeval(xN,endPop(a,:),endPop(b,:),bounds,[gen… xOverOps(i,:)]);

if c1(1:numVar)==endPop(a,(1:numVar))
c1(xZomeLength)=endPop(a,xZomeLength);
elseif c1(1:numVar)==endPop(b,(1:numVar))
c1(xZomeLength)=endPop(b,xZomeLength);
else
eeval(e1str);
end
if c2(1:numVar)==endPop(a,(1:numVar))
c2(xZomeLength)=endPop(a,xZomeLength);
elseif c2(1:numVar)==endPop(b,(1:numVar))
c2(xZomeLength)=endPop(b,xZomeLength);
else
eeval(e2str);
end

endPop(a,:)=c1;
endPop(b,:)=c2;
end
end

for i=1:numMuts,
for j=1:mutOps(i,1),
a = round(rand*(popSize-1)+1);
c1 = feeval(deblank(mutFNs(i,:)),endPop(a,:),bounds,[gen mutOps(i,:)]);
if c1(1:numVar)==endPop(a,(1:numVar))
c1(xZomeLength)=endPop(a,xZomeLength);
else
eeval(e1str);
end
endPop(a,:)=c1;
end
end

else %遗传操作的统计模型
for i=1:numXOvers,
xN=deblank(xOverFNs(i,:));
cp=find(rand(popSize,1)<XOVEROPS(I,1)==1);
if rem(size(cp,1),2) cp=cp(1:(size(cp,1)-1)); end
cp=reshape(cp,size(cp,1)/2,2);
for j=1:size(cp,1)
a=cp(j,1); b=cp(j,2);
[endPop(a,:) endPop(b,:)] = feeval(xN,endPop(a,:),endPop(b,:), bounds,[gen xOverOps(i,:)]);
end
end
for i=1:numMuts
mN=deblank(mutFNs(i,:));
for j=1:popSize
endPop(j,:) = feeval(mN,endPop(j,:),bounds,[gen mutOps(i,:)]);
eeval(e1str);
end
end
end

gen=gen+1;
done=feeval(termFN,[gen termOps],bPop,endPop); %
startPop=endPop; %更新种群

[beval,bindx] = min(startPop(:,xZomeLength));
startPop(bindx,:) = best;
end
[beval,bindx] = max(startPop(:,xZomeLength));
if display
fprintf(1,'\n%d %f\n',gen,beval);
end
x=startPop(bindx,:);
if opts(2)==0 %binary
x=b2f(x,bounds,bits);
bPop(bFoundIn,:)=[gen b2f(startPop(bindx,1:numVar),bounds,bits), startPop(bindx,xZomeLength)];
else
bPop(bFoundIn,:)=[gen startPop(bindx,:)];
end
if collectTrace
traceInfo(gen,1)=gen;
traceInfo(gen,2)=startPop(bindx,xZomeLength); %Best fittness
traceInfo(gen,3)=mean(startPop(:,xZomeLength)); %Avg fittness
end
作者: dongleitian    时间: 2009-9-5 14:02
很好,谢了
作者: laoli    时间: 2009-9-8 08:42
XIE XIE LE
作者: lrh116    时间: 2009-9-8 15:39
网上很多 呀,,
作者: 单车王子    时间: 2009-9-8 16:40
好人啊
爱上那木槿
作者: zsuzengli    时间: 2009-9-9 11:01
10楼的真不错!
作者: alair009    时间: 2012-1-26 11:15
一定要锲而不舍!!我相信我会成功的3246886247850422256681435782778952010456349775887703079215507391936689071591043




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5