关于matlab自带遗传算法工具箱的一个难题
function z=my_cond(num);r_num=50;
%
% for r=1:50
%
% dcm='E:\散射0.2-6um\';
% rds=num2str(r/10);
%
% opn_name=;
%
% 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 编辑 ]
回复 楼主 zuohaoyi 的帖子
个人水平专业有限, 遗传工具箱也没玩过, 又看不清LZ的问题!同待高人路过 可以设置一个标志 然后计算完以后 修改这个标志 这样就只运行一次了 原帖由 yufeng 于 2010-5-2 21:58 发表 http://www.chinavib.com/forum/images/common/back.gif
可以设置一个标志 然后计算完以后 修改这个标志 这样就只运行一次了
茅塞顿开,感激不尽。
晕啊,另外一个问题又出现了,当进入第二次循环后,%后面的部分没再运行,但却又提示Q_orgin这一变量没有定义,从而终止运行。似乎是matlab自带遗传算法在每次循环之后都会清理上一次循环所定义的变量,下一次循环的时候需要重新定义这些变量。这就使得%后的内容非运行不可。
我觉得现在唯一的办法就是不让遗传算法清理变量,让上一个循环定义的变量在下一个循环也能用,这需要修改matlab自带的相关m文件,但却不知道应如何修改。
[ 本帖最后由 ChaChing 于 2010-5-3 00:10 编辑 ] 好像有点知道LZ要的!? 猜的
help global 搞定了。用了global。先是在命令窗口里输入global Q_orgin。然后新开了一个m文件,输入%号后的代码,将硬盘上数据读入Q_orgin数组。最后在遗传算法文件里面删除掉%好后面的部分,然后再正式使用Q_orgin数组之前再次声明global Q_orgin。这样运行的时候遗传算法就不用再去读硬盘了,而是直接调用内存里的Q_orgin数组。这样速度快了n倍。 LZ也没谢下!? 也罢, 问题解决最要紧! :loveliness:
再度提醒每个人水平专业不同, 若要别人帮忙, 需想办法说明清楚!? 不是让人猜测, 真的看下这连接, LZ程度应也不低, 应能理解!
提问的智慧!!!!(发帖前请认真阅读)
http://forum.vibunion.com/forum/viewthread.php?tid=21991 中国人都比较含蓄嘛,不一定要明说,其实感激之情已经溢于言表了。:lol :lol :lol :lol :lol :lol :lol
页:
[1]