2017-10-29 12 views
0

私は遺伝的アルゴリズムを実行しています。どのようにしてRから子孫を作成するかをテストしています.Rの各行は親に対応し、各列は形質に対応しています。私のコードでは、両親1と2、そして両親3と4を合わせて合計2人の子供を育てようとしています。しかし、コードを実行すると、子1と子2の間に余分な0の行が挿入されます。これはなぜ起こるのですか?マトリックスに余分な行が表示されるのはなぜですか?

R=[1,2,3;4,5,6;1000,2000,3000;4000,5000,6000] 
for parent=1:2:3 
    theta=rand(1); 
    trait1=theta*R(0+parent,1)+(1-theta)*R(1+parent,1); 
    theta=rand(1); 
    trait2=theta*R(0+parent,2)+(1-theta)*R(1+parent,2); 
    theta=rand(1); 
    trait3=theta*R(0+parent,3)+(1-theta)*R(1+parent,3); 

    children(parent,:)=[trait1,trait2,trait3]; 
end 
children 

出力:

R = 

      1   2   3 
      4   5   6 
     1000  2000  3000 
     4000  5000  6000 


children = 

    3.0837e+00 4.2959e+00 3.2356e+00 
      0   0   0 
    2.7330e+03 2.7728e+03 3.0762e+03 

答えて

1

あなたparent変数は、サイクルの最初のステップで1に等しく、第二段階で3に等しく、ありがとうございました。だから1行目と3行目がいっぱいです。 はchildrenで結果を保存するか、単にそのような行を追加するために、別の反復変数を追加します。

R=[1,2,3;4,5,6;1000,2000,3000;4000,5000,6000] 
children = []; 
for parent=1:2:3 
    theta=rand(1); 
    trait1=theta*R(0+parent,1)+(1-theta)*R(1+parent,1); 
    theta=rand(1); 
    trait2=theta*R(0+parent,2)+(1-theta)*R(1+parent,2); 
    theta=rand(1); 
    trait3=theta*R(0+parent,3)+(1-theta)*R(1+parent,3); 

    children=[children;trait1,trait2,trait3]; 
end 
children 

配列と繰り返し変数の定義済みのサイズで別のオプションを:あなたがある場合

R=[1,2,3;4,5,6;1000,2000,3000;4000,5000,6000] 
children = zeros (2,3); 
i = 1; 
for parent=1:2:3 
    theta=rand(1); 
    trait1=theta*R(0+parent,1)+(1-theta)*R(1+parent,1); 
    theta=rand(1); 
    trait2=theta*R(0+parent,2)+(1-theta)*R(1+parent,2); 
    theta=rand(1); 
    trait3=theta*R(0+parent,3)+(1-theta)*R(1+parent,3); 

    children(i,:)=[trait1,trait2,trait3]; 
    i = i + 1; 

end 
children 
+0

追加するには良いアイデアになることはありませんそれを継続的に行うつもり –

+0

@SardarUsama最適化について話しますか? 「子供たち」は、初期コードの各反復でサイズを変更していました。しかし、私は、配列のサイズがわかっている場合でも、明示的に定義するほうが良いと思います。このトピックで2行の重要性がなぜ重要なのか分かりません。とにかく、私の答えを更新しました。 –

+0

質問はMCVEを意味します。 –

関連する問題