ある条件でリストから別のリストにアイテムをコピーしようとしています。 私は3つのリストを持っています。最初のリストには例えば10点のリストが含まれ、2番目のリストには各リストの合計距離(コストまたは適合度)が含まれます(10リスト - > 10合計距離)。ここある条件のリストからアイテムをコピーする
画像: 最初のリスト10本のリスト(各リストに点を含む)を含む - 空であり、一つの条件の項目で充填されるべき第二のリスト「トレーニング」 第3のリストを。最初に、2番目のリストにすべての値を追加しました。上記番号付き 例:第3のリストに最初のリストのうちポイントのリストを追加する+ 5324 = 4847 + 5153 + 5577 totalFitness ...
条件は、例えば ------ ---->(フィットネス[0]/totalFitness)< =比率。
それが動作していない。しかし、ここであなたは、私が試したコードを参照することができます
class RunGA
{
public static List<List<Point3d>> createGenerations(List<List<Point3d>> firstGeneration, List<int> firstFitness, int generationSize)
{
List<List<Point3d>> currentGeneration = new List<List<Point3d>>();
int totalFitness;
int actualFitness;
totalFitness = firstFitness[0] + firstFitness[1];
double ratio = 1/10;
for(int k = 2; k < firstFitness.Count; k++)
{
actualFitness = firstFitness[k];
totalFitness += actualFitness;
}
for(int i = 0; i < firstFitness.Count; i++)
{
double selected = firstFitness[i]/totalFitness;
if(selected < ratio)
{
currentGeneration.Add(firstGeneration[i]);
}
}
return currentGeneration;
}
}
3番目のリストは空のままです。条件をif(selected <= ratio)
に変更すると、最初のリストのポイントのリスト全体が3番目のリストにコピーされます。しかし、私がコピーしたいのは、「最良の」フィットネスを持つポイントのリストです。
私は間違っているとは何ですか?私は全くの手がかりがなく、いくつかの変更を試みましたが、それでも動作していません。私が初心者だと考えることができれば嬉しいです。
デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** –
LINQ Union、Where、Sum、Aggregateの各メソッド確かにこれを達成するのに役立ちます。 – Aybe