随机通用抽样

我需要在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;
    }
    
已邀请:
    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);
    }
    

要回复问题请先登录注册