随机似乎输出相同的数字

时间:2019-05-18 14:20:39

标签: c# random

我目前正在尝试建立一个进化神经网络,为此,我首先给对象提供随机值。此操作首先生效,但经过几次迭代后,它们开始以非常奇怪的方式运行。有时,当新的迭代开始时,它们全部以相同的模式或以相同的速度移动。

我做了一些研究,从我看来,Random如果在很短的时间内使用,可以输出相同的数字,但是我不知道如何防止/解决这个问题。 我仅在一个线程中使用随机的一个全局实例,所以问题不存在。

private void Evolve()
    {
        var newNetObjects = new List<NeuralNetObject>(); // make a list for new objects we create replace old ones
        var netObjects =
            new List<NeuralNetObject>(NeuralNetObjectManager.NeuralNetObjects); //get all neuralnetobjects
        if (netObjects.Count == 0) //just stop when the list is empty
            return;
        //the half we remove is the one with the lower fitness values
        foreach (var netObject in netObjects) //go through all net objects and do crossover of weights
        {
            float[] newWeigths = (float[]) netObject.GetNet().Weights.Clone(); //get original weights
            ;
            var randomNet = rnd.Next(netObjects.Count); //random number
            float[] otherWeigths = (float[]) netObjects[randomNet].GetNet().Weights.Clone(); //get a random other net
            for (int i = 0; i < newWeigths.Length; i++) //for each weight
            {
                if (rnd.Next(2) == 1)
                {
                    newWeigths[i] = otherWeigths[i]; // 25% to get the weight of the other net
                }
            }

            var newNet = new NeuralNet(netObject.GetNet())
            {
                Weights = (float[]) newWeigths.Clone()
            }; // make a new neural net with the generated weigths

            newNetObjects.Add(new NeuralNetObject(100, 300, "KISTE", newNet)
            {
                Speed = (float) (rnd.NextDouble() - 0.5f) * 2, Direction = (float) (rnd.NextDouble() - 0.5f) * 2
            }); //add new object to list
        }
    }

所以我可能会丢失一些东西,但是我认为我编写的代码应该分配给每个实例

newNetObjects.Add(new NeuralNetObject(100, 300, "KISTE", newNet)
            {
                Speed = (float) (rnd.NextDouble() - 0.5f) * 2, Direction = (float) (rnd.NextDouble() - 0.5f) * 2
            });

一个随机的速度和方向,但是正如我之前说的,经过几次迭代,它们都以相同的速度运动,有时甚至以相同的模式运动。 你知道我的问题是什么吗? 如果需要,我可以发布更多代码,但是我发布的内容经过简化,并且删除了一些内容,因此更易于阅读和理解。预先感谢!

0 个答案:

没有答案