private int[] 親からランダムな交叉(int[] geneA, int[] geneB, int パラメータ数)
{
//Int32と同じサイズのバイト配列にランダムな値を設定する
//byte[] bs = new byte[sizeof(int)];
byte[] bs = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bs);
//Int32に変換する
int seed = System.BitConverter.ToInt32(bs, 0);
// そのseedを基にRandomを作る
var r = new Random(seed++);
int[] gene = new int[パラメータ数 + 他の要素];
for (int i = 0; i < パラメータ数; i++)
{
if (r.Next(2) == 1)
{
gene[i] = geneA[i];
}
else
{
gene[i] = geneB[i];
}
}
bs = null;
rng.Dispose();
r = null;
return(gene);
}