private static int generation = 0;
private static int numInGeneration = 0;
public static void Calculate()
{
const double crossoverProbability = 0.65;
const double mutationProbability = 0.08;
const int elitismPercentage = 5;
...
var population = new Population(100, 40, false, false, ParentSelectionMethod.FitnessProportionateSelection);
private static double EvaluateFitness(Chromosome chromosome)
{
numInGeneration++; // incrementing evaluation number in the same generation
// save to DB chromosome, fitness, generation, numInGeneration ...
private static bool TerminateAlgorithm(Population population, int currentGeneration, long currentEvaluation)
{
numInGeneration = 0; // reseting number in generation
NumInGeneration 表示适应度函数内的条目数。当我对每一代的结果进行分组时,我得到了以下结果:
Generation NumInGeneration
0 289
1 186
2 188
3 182
4 190
5 189
6 184
7 184
8 185
为什么没有 100 个评价,适应度函数有 100 个条目。在这种情况下,第 0 代是 289 次?
我期待看到每一代生成 100 条染色体,这意味着有 100 次评估(适应度函数的 100 个条目)。
当我在第 0 代中对染色体进行分组时,我会重复评估相同的染色体:
Chromosome Repeating
0001001110101011101110111011101011101011 12
0010000111110011110100011011101110101100 8
0010111011001000001110011000110001010010 5
0011100011110010100010001100001101111001 5
0000011011001111101000001101011111111111 4
0010011010100110001001110101001101111101 4
0001101110101101110100001000110000001000 3
0100011001110010100001010111000011111011 3
1110100110001010000101010110111100000101 2
0100010110100111010100100100110110111111 2
0100101111011000000000111100100000011100 2
1111001111101100011101100000101101101001 2
1100000100110000001010110110110001010000 2
0110010101110011000101001111011010111011 2
1100101011010001010011100101101110011100 2
0010000110101011110010111010110100000010 2
0100000000000101101011111011111011111100 2
0100110011000001010000011110001110010110 2
0111101101000111111011111011111011100100 2
0111110010011110010010000000100011010010 2
0111111011110101111111000001101011011111 1
0111111100101001110011111110110100010010 1
1000001001101011100010001011011110100110 1
另一个问题是为什么同一条染色体的适应度函数调用次数更多。在这个例子中,有可能看到已经进行了 12 次相同的计算?是否需要设置一些内部缓存?
可能我对 GAF 应该如何工作有错误的想法。在这种情况下,请解释人口数和适应度函数的条目数之间的联系。如何设置和控制适应度函数的条目数。如果适应度函数过重,则对同一染色体进行多次评估时会浪费资源。在这种情况下,如果需要,我认为进行“外部”缓存没有问题。