染色体が単なる遺伝子オブジェクトの集まりである場合、特に境界もオブジェクトと見なされている場合、染色体は扱いやすくなります。そして染色体の新しいインスタンスが必要な遺伝子のリストでそれを供給することによって簡単に行うことができる
public class Gene
{
public string Id { get; set; }
public double Value { get; set; }
public Boundary Boundary { get; set; }
}
public class Boundary
{
public double? Minimum { get; set; }
public double? Maximum { get; set; }
}
public class Chromosome
{
public string Name { get; set; }
public List<Gene> Genes { get; set; }
}
...
var chromosome1 = new Chromosome
{
Name = "Biggie",
Genes = new List<Gene>
{
new Gene {Id = "1", Boundary = new Boundary {Minimum = 0, Maximum = 100}},
new Gene {Id = "2", Boundary = new Boundary {Minimum = -7.3, Maximum = 9}}
}
};
var chromosome2 = new Chromosome
{
Name = "Fusion",
Genes = new List<Gene>
{
new Gene {Id = "1", Boundary = new Boundary {Minimum = 200, Maximum = 1000}},
new Gene {Id = "2", Boundary = new Boundary {Minimum = 50}},
new Gene {Id = "3", Boundary = new Boundary {Maximum = -5}}
}
};
全ての染色体が今同じ構造を有するので、それはなります染色体作成データを駆動するのは比較的簡単です。染色体定義は、設定ファイルまたはデータベースに格納することができ、必要に応じて新しいものを追加することができます。各染色体オブジェクトには、それに含まれる遺伝子のリストを読み取る単純なループを介して取り込むことができます。
この解決方法は機能しません。遺伝子値の型は必ずしも二倍ではありません。これは、倍精度、整数、ブール値、または列挙型にすることができます。また、2つの遺伝子がある場合、各遺伝子はその値に対して異なるタイプを有することができる。 –
すべてがダブルに収まるでしょう。ジェネリックスを導入することもできますが、努力する価値はありません。 – dbugger
数学のサポートがなかったので、ジェネリック医薬品は価値あるものより多くの仕事をしました。 Doubleをmin、max、incrementで使用することを決定しました。私は遺伝子価値とその解釈の間にアダプターを使用します。 –