随机通用抽样

发布于 2024-10-21 03:07:50 字数 811 浏览 1 评论 0原文

我需要在 C# 中实现 su 来在人群中查找候选个体,这是我到目前为止所拥有的,但我不确定它是否正确。

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;
    }

I need a sus implementation in c# for finding candidate individuals in a population this is what i have so far but im not sure if it is correct.

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;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鸠书 2024-10-28 03:07:50
    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);
    }
    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);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文