声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1331|回复: 7

[编程技巧] 关于matlab自带遗传算法工具箱的一个难题

[复制链接]
发表于 2010-5-1 21:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function z=my_cond(num);

r_num=50;
%
% for r=1:50
%
%     dcm='E:\散射0.2-6um\';
%     rds=num2str(r/10);
%
%     opn_name=[dcm rds 'um.txt'];
%
%     fid(1)= fopen(opn_name,'rt');
%     for w=1:5800
%         Q_orgin(w,r)=fscanf(fid(1),'%e',1);
%     end
%     fclose(fid(1));
% end

wave_num=50;

for r=1:50
    for s=1:wave_num
        Q_try(s,r)=Q_orgin(ceil(num(s)),r);
    end
end
z=cond(Q_try);


上面这段代码是m文件里的代码(目标函数),当用matlab自带遗传算法工具箱优化的时候,%号后面的部分,遗传算法每次循环都会调用,这样会极大增加计算时间。实际上只需要调用一次就可以了,有什么办法只让这部分在第一次循环的时候才调用,以后就不调用了?

[ 本帖最后由 ChaChing 于 2010-5-2 11:17 编辑 ]
回复
分享到:

使用道具 举报

发表于 2010-5-2 11:14 | 显示全部楼层

回复 楼主 zuohaoyi 的帖子

个人水平专业有限, 遗传工具箱也没玩过, 又看不清LZ的问题!
同待高人路过
发表于 2010-5-2 21:58 | 显示全部楼层
可以设置一个标志 然后计算完以后 修改这个标志 这样就只运行一次了
 楼主| 发表于 2010-5-2 23:46 | 显示全部楼层

茅塞顿开,感激不尽。

晕啊,另外一个问题又出现了,当进入第二次循环后,%后面的部分没再运行,但却又提示Q_orgin这一变量没有定义,从而终止运行。似乎是matlab自带遗传算法在每次循环之后都会清理上一次循环所定义的变量,下一次循环的时候需要重新定义这些变量。这就使得%后的内容非运行不可。
      我觉得现在唯一的办法就是不让遗传算法清理变量,让上一个循环定义的变量在下一个循环也能用,这需要修改matlab自带的相关m文件,但却不知道应如何修改。

[ 本帖最后由 ChaChing 于 2010-5-3 00:10 编辑 ]
发表于 2010-5-3 00:15 | 显示全部楼层
好像有点知道LZ要的!? 猜的
help global
 楼主| 发表于 2010-5-3 16:33 | 显示全部楼层
搞定了。用了global。先是在命令窗口里输入global Q_orgin。然后新开了一个m文件,输入%号后的代码,将硬盘上数据读入Q_orgin数组。最后在遗传算法文件里面删除掉%好后面的部分,然后再正式使用Q_orgin数组之前再次声明global Q_orgin。这样运行的时候遗传算法就不用再去读硬盘了,而是直接调用内存里的Q_orgin数组。这样速度快了n倍。

评分

1

查看全部评分

发表于 2010-5-3 21:24 | 显示全部楼层
LZ也没谢下!? 也罢, 问题解决最要紧! :loveliness:
再度提醒每个人水平专业不同, 若要别人帮忙, 需想办法说明清楚!? 不是让人猜测, 真的看下这连接, LZ程度应也不低, 应能理解!
提问的智慧!!!!(发帖前请认真阅读)
http://forum.vibunion.com/forum/viewthread.php?tid=21991
 楼主| 发表于 2010-5-3 22:43 | 显示全部楼层
中国人都比较含蓄嘛,不一定要明说,其实感激之情已经溢于言表了。:lol :lol :lol :lol :lol :lol :lol
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 18:59 , Processed in 0.059470 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表