Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2009-03-25, 00:03   #1
jiandan
初级会员
 
注册日期: 2009-03-23
年龄: 39
帖子: 6
声望力: 0
jiandan 正向着好的方向发展
默认 [求助]关于simulink建模的问题

我最近在做毕业论文,想把用遗传算法求最小值问题的代码建成simulink模型,我弄了很久都做不好,请各位大侠帮帮忙啊!!!!!代码如下:
function ga;
%遗传算法极小值问题
clear
clc
bn=30; %个体串长度
inn=50; %初始种群大小
gnmax=300; %最大迭代次数
pc=0.85; %交叉概率
pm=0.2; %变异概率
%产生初始种群
fps=1200*(rand(inn,bn)-0.5*ones(inn,bn)); %十进制编码,使初始解在[-600,600]范围内
select=fps;
gn=0;%第一代解
n = 30;
fr = 4000;
while gn<gnmax,
%分别将种群代入目标函数计算适应度
q = 0;
p = 1;
for i = 1:50,
for j = 1:30,
x(j)=select(i,j:j);
q = q+x(j)^2;
p = p*cos(x(j)/sqrt(j));
end
y(i) = q/fr-p+1;
q=0;
p=1;
end
[pmin,i]=min(y);%将当前种群中最优解保存在pmin
pmin1=pmin;
vari=mean(select(i,);%计算最优染色体的平均值并送给vari,变异自适应调节域值
l=i;%将最优染色体行坐标传送给l
[pmax,z]=max(y);%求取适应度最差的染色体
select(z,=select(l,;%将最优染色体引入种群参与竞争
%进行交叉,进一步选择优秀的解
for i=1:2:50,
pcc=pro(pc);%根据交叉概率判断是否进行交叉
if pcc==1,
if 0<=l-i<=1,%判断是不是最优染色体,如果是不进行交叉
cross(i,=select(i,;
cross(i+1,=select(i+1,;
else
%将30个变量分为五个范围,相临两个染色体分别从五位进行交叉
crb1=round(rand*(bn/5-1))+1; %在[1,6]范围内随机产生一个交叉位
cross(i,crb1:crb1)=0.1*select(i,crb1:crb1)+0.9*select(i+1,crb1:crb1);
cross(i+1,crb1:crb1)=0.1*select(i,crb1:crb1)+0.9*select(i+1,crb1:crb1);
cross(i,2*crb1:2*crb1)=0.1*select(i,2*crb1:2*crb1)+0.9*select(i+1,2*crb1:2*crb1);
cross(i+1,2*crb1:2*crb1)=0.1*select(i,2*crb1:2*crb1)+0.9*select(i+1,2*crb1:2*crb1);
cross(i,3*crb1:3*crb1)=0.1*select(i,3*crb1:3*crb1)+0.9*select(i+1,3*crb1:3*crb1);
cross(i+1,3*crb1:3*crb1)=0.1*select(i,3*crb1:3*crb1)+0.9*select(i+1,3*crb1:3*crb1);
cross(i,4*crb1:4*crb1)=0.1*select(i,4*crb1:4*crb1)+0.9*select(i+1,4*crb1:4*crb1);
cross(i+1,4*crb1:4*crb1)=0.1*select(i,4*crb1:4*crb1)+0.9*select(i+1,4*crb1:4*crb1);
cross(i,5*crb1:5*crb1)=0.1*select(i,5*crb1:5*crb1)+0.9*select(i+1,5*crb1:5*crb1);
cross(i+1,5*crb1:5*crb1)=0.1*select(i,5*crb1:5*crb1)+0.9*select(i+1,5*crb1:5*crb1);
end
else
cross(i,=select(i,;
cross(i+1,=select(i+1,;
end
end
%变异操作
for i=1:50;
pmm=pro(pm);
if pmm==1,
if i==l,
change(i,=cross(i,;
else
change(i,=cross(i,;
chb=round(rand*(bn-1))+1; %在[1,bn]范围内随机产生一个变异位
change(i,chb:chb)= vari*(rand-0.5);%变异为变化为一个[-600,600]的随机数
end
else
change(i,=cross(i,;
end
end
select=change;
gn=gn+1;
plot(gn,pmin,'ro')
hold on
end
gn
pmin%最优解
strt=['最大迭代次数' num2str(gn)];
text(80,250,strt);
strt=['最小值' num2str(pmin)];
text(80,200,strt);

%根据交叉概率判断是否交叉函数
function pcc=pro(pc);
test(1:100)=0;
b=round(100*pc);
test(1:b)=1;
n=round(rand*99)+1;
pcc=test(n);
end
end
jiandan 当前离线   回复时引用此帖
旧 2009-03-25, 08:12   #2
anbcjys
高级会员
 
注册日期: 2008-09-14
年龄: 43
帖子: 351
声望力: 24
anbcjys 正向着好的方向发展
默认 回复: [求助]关于simulink建模的问题

可用相应模块搭建 不过他的优势不在这里 看起来就比较费劲了
__________________
qq604443022
anbcjys 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
matlab7.1用ga函数求解约束最优化问题时出错 上善若水zm 进化计算 0 2009-05-13 13:22
[MATLAB基础] 大家帮忙看一下这个程序吧,求信号PSD的, daizy2009 MATLAB论坛 0 2009-05-12 20:08
[求助]matlab小波变换问题 derrick MATLAB论坛 5 2008-12-18 17:17
[求助]关于t的函数 红日 MATLAB论坛 1 2008-07-24 09:56
[求助]有段采集的数据,怎么在matlab下看一下其频谱特性 sjszhb MATLAB论坛 3 2008-07-03 20:28


所有时间均为北京时间。现在的时间是 20:15


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.