24小时热门版块排行榜    

查看: 677  |  回复: 1

da1234mao

铁虫 (著名写手)

[求助] 请帮我改下面关于matlab 遗传算法的一段子程序 关于编码的子程序 已有1人参与

function ret=Code(lenchrom,bound)
%本函数将变量编码成染色体,用于随机初始化一个种群
% lenchrom   input : 染色体长度
% bound      input : 变量的取值范围
% ret        output: 染色体的编码值
bound=[0.01 0.15;1 20;0.1 1;0 20;0.1 1;0 20;0.1 1;0 20;0.1 1;0.2 0.4];
lenchrom=[1 1 1 1  1 1 1 1 1 ];
flag=0;
while flag==0
    pick=rand(1,length(lenchrom));
    pick=bsxfun(@rdivide,pick,sum(pick)); %线性插值,编码结果以实数向量存入ret中
    ret=sum(bound‘.*pick');
end
错误的原因bound’.×pick这一句,原因是Error using  .* Matrix dimensions must agree.





我的遗传算法有十个变量,每个变量有2个上下限,如bound和lenchrom 所示,请教下高手怎么改呢?
这段程序是用在matlab 遗传算法中的编码染色体的(code)

[ Last edited by da1234mao on 2014-1-9 at 21:46 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cobrasq

金虫 (小有名气)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
da1234mao: 金币+2 2014-01-10 10:06:54
原始 bound 是一个 10x2 矩阵,转置后为 2x10 矩阵,经过 bsxfun 处理后的 pick 是一个 1x9 向量,经过转置成为 9x1 向量,bound' .* pick' 自然会报错。

把 lenchrom 增加为 10 个元素的向量, 然后 ret1 = sum(bound(:,1).*pick'); ret2 = sum(bound(:,2).*pick');

另外,你可能需要产生两个 pick。
2楼2014-01-09 23:39:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 da1234mao 的主题更新
信息提示
请填处理意见