0

我需要在 c# 中实现 sus 来在人群中寻找候选个体,这是我目前所拥有的,但我不确定它是否正确。

public void sus(IEnumerable<TimeTable>population)
    {
        var ag = population.Sum(i => normalize((double) i.Fitness, true));
        var mark = rnMutate.NextDouble();

        var index = 0;
        foreach (var candidate in population)
        {
            var cu = population.Sum(i => normalize((double)i.Fitness, false)) / ag * 5;
            while (cu > mark + index)
            {
                Survivors.Add(candidate);
                index++;
            }
        }            
    }

    public double normalize(double fitness, bool natural)
    {
        if (natural)
            return fitness;

        return fitness == (double)FitnessLBound ? double.PositiveInfinity : 1 / fitness;
    }
4

1 回答 1

0
    private  IEnumerable<TimeTable> StochasticSample(IEnumerable<TimeTable> population, int size)
    {
        var t = population.Sum(it => it.Fitness);
        var temp = new List<TimeTable>();
        var ptr = rnMutate.NextDouble();
        var sum = 0M;

        for (int i = 0; i < size; i++)
        {
            for (sum += ExpValue(i, t); sum > (decimal) ptr; ptr++)
            {
                temp.Add(population.ElementAt(i));
                --size;
            }
        }
        return temp;
    }

    private decimal ExpValue(decimal fitness, decimal sum)
    {
        return decimal.Divide(fitness, sum);
    }
于 2011-03-15T14:43:25.687 回答