C#'Enumerable.Repeat()'如何重载?

Spy*_*kis 1 c# linq multidimensional-array genetic-algorithm

我已经为遗传算法编写了这个代码,通过获得基因的随机int(质量,高度(指标)和腿力)计算跳跃高度,然后用其他表现最好的随机标本再现自身.存储在一个名为的2d数组中geneBoard.现在我的问题; 你认为写1000次相同的值是不切实际的,所以我试着用这个:

float[,] geneBoard = Enumerable.Repeat(
    mass = GetMass(500, 1000), 
    height = GetHeight(150, 190), 
    force = GetForce(500, 3500), 
    fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)), 1000)
.ToArray();
Run Code Online (Sandbox Code Playgroud)

而不是这个:

float[,] geneBoard = new float[4, 4]
        {
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) }
        };
Run Code Online (Sandbox Code Playgroud)

如果我没有做足够好的工作解释,这是我的所有代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Genetic_Algorithm
{
class Program
{
    static Random random = new Random(); // Getting a seed

    static void Main(string[] args)
    {


        float mass = GetMass(500, 1000);
        float height = GetHeight(150, 190);
        float force = GetForce(500, 3500);

        float fitnessScore = Convert.ToSingle( PhysicalTest(mass, height, force) );
        /*
        float[,] geneBoard = new float[4, 4]
        {
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
            { mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) }
        };
        */
        float[,] geneBoard = Enumerable.Repeat(mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)), 1000).ToArray();

        float[] sortingAr = new float[] { geneBoard[0, 3], geneBoard[1, 3], geneBoard[2, 3], geneBoard[3, 3] };
        Array.Sort(sortingAr, (x, y) => y.CompareTo(x));

        Console.WriteLine(sortingAr[0]);
        Console.WriteLine(sortingAr[1]);
    }

    public static float GetMass(int min, int max)
    {
        int massGr = random.Next(min, max);
        float mass = massGr / 10;

        return mass;
    }

    public static float GetHeight(int min, int max)
    {
        int heightCm = random.Next(min, max);
        float height = heightCm / 10;

        return height;
    }

    public static float GetForce(int min, int max)
    {
        int force = random.Next(min, max);

        return force;
    }

    public static double PhysicalTest(float mass, float height, float force)
    {
        double d = force * 0.07; // gets distance of applied force
        double vi = Math.Sqrt( (force * d) / ( mass / 2 ) ); // calculats v initial
        double jumpHeight = (vi * vi) / (2 * 9.8); // calculates jumping height

        double fitnessScore = jumpHeight * 100;

        return fitnessScore;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

最后,我是初学者,所以任何其他建议都会有所帮助.

Geo*_*org 6

我认为Enumerable.Repeat不是你真正想要的.正如它的名字所说,它只是一遍又一遍地重复相同的元素,而在你的情况下,我认为你想要的是创建1000个代表你的基因的相似但不同的对象.

在你的情况下,我想for你之前创建的数组上的简单循环是绝对足够的.