Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 了解遗传算法的算法,关于任务的例子_C#_Algorithm_Genetic Algorithm - Fatal编程技术网

C# 了解遗传算法的算法,关于任务的例子

C# 了解遗传算法的算法,关于任务的例子,c#,algorithm,genetic-algorithm,C#,Algorithm,Genetic Algorithm,您与一家公司合作交付货物,该公司每天使用 收费公路。在沿途10个付款点支付旅行费用。这个 公司的司机需要通过支付一笔费用来克服整个道路 每一点的佣金。困难在于根据 根据规定,委员会只能支付一枚硬币。万一 如果它比车费高,司机就得不到车费 改变和担心。相反,如果硬币不能完全 付了车费,你的公司就欠了债。同时, 每一站的票价在比赛结束时都是绝对随意的 一天,可在1至10美分(含1至10美分)范围内变化。它是 也知道多个支付点可以公开相同的票价,以及 通过所有点的总行程将始终超过 55科派克。在旅程开

您与一家公司合作交付货物,该公司每天使用 收费公路。在沿途10个付款点支付旅行费用。这个 公司的司机需要通过支付一笔费用来克服整个道路 每一点的佣金。困难在于根据 根据规定,委员会只能支付一枚硬币。万一 如果它比车费高,司机就得不到车费 改变和担心。相反,如果硬币不能完全 付了车费,你的公司就欠了债。同时, 每一站的票价在比赛结束时都是绝对随意的 一天,可在1至10美分(含1至10美分)范围内变化。它是 也知道多个支付点可以公开相同的票价,以及 通过所有点的总行程将始终超过 55科派克。在旅程开始时,每位驾驶员都被给予10分 硬币,一便士一枚有尊严的硬币,一枚值两个科佩克的硬币,一枚 -三只,以此类推,最多十只(包括在内)。使用遗传算法,您需要找到一种旅行支付策略,其中 在旅程结束时,司机的债务将是最低限度的。算法 将在每天开始时举行,并使用新的、新的 在付款点确定佣金规模,以获得新的 司机的策略

传入参数:由10个从1到10的任意数字组成的数组, 代表每个项目的佣金规模。数字 在数组中可以重复,并且它们的和总是更大 超过55岁

输出:一个由十个数字组成的数组,代表硬币的价值 按每个点的最佳付款顺序排列(因此 公司在所有付款后的债务都很小)

我参与了写作,所以我忘记了其中一个条件,这不是寻找免费乘车,而是寻找最佳,因为免费乘车

数组中的数字可以重复,它们的总和将始终为 大于55

这是不可能的。我认为我的选择是正确的,但选择需要改变,就像一代司机一样。这是我的密码:

namespace ConsoleApplication16
    {
        class Program
        {
            static void Main(string[] args)
            {
        Random rand = new Random();
        bool weNeedContinue = true;          
        int[] propuski1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        int[] bestWay = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        int[] propuski = PropuskiPrice(propuski1);
        int[] car = {0,0,0,0,0,0,0,0,0,0};
        GenerateCar(car,bestWay);
        int[] moneyChange = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };                    
        while(weNeedContinue == true)
        {
            GettingBest(moneyChange, car, propuski, bestWay);
            GenerateCar(car, bestWay);

            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("luchshii put " + bestWay[i]);
            }


            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(" car " + car[i]);
                Console.WriteLine(" propusk " + propuski[i]);
            }
            Console.ReadKey();
            ContinueOrNot(bestWay, weNeedContinue);
        }          

    }

    public static int[] PropuskiPrice(int[] a)
    {
        Random rand = new Random();
        int summa = 0;
        for (var i = 0; i < a.Length; i++)
        {
            a[i] = rand.Next(10) + 1;
            summa += a[i];
            if (i == 9 && summa <= 55)
            {
                PropuskiPrice(a);
            }
        }
        return a;
    }

    /////////////////////////////////////////////////////
    ////Создаем водителя/////////////////////////////////
    /////////////////////////////////////////////////////


    public static int[]  GenerateCar(int[] a,int[] c)
    {
        Random rand = new Random();
        for (int i = 0; i < a.Length; i++)
        {
            if(c[i] != 0)
            {
                a[i] = c[i];
                continue;
            }
            int b = rand.Next(1, 11);
            if (!a.Contains(b))
            {
                a[i] = b;
            }
            else
                i--;
            if(i == a.Length - 1 )
            {

            }
        }
        return a;
    }

    ////////////////////////////////////////////////////
    ////INIT////////////////////////////////////////////
    ////////////////////////////////////////////////////

    static void GettingBest(int[] change,int[] car,int[] propuski,int[] bestOne)
    {
        for (int i = 0; i< 10; i++)
            {
                change[i] = car[i] - propuski[i];
                if (change[i] == 0)
                {
                    bestOne[i] = car[i];
                /*Console.WriteLine("Карман" + car[i]);
                Console.WriteLine("Цена" + propuski[i]);
                Console.WriteLine("Лучший путь"+ bestOne[i]);*/
                }
            }
        for (int i = 0; i < 10; i++)
        {
            if (change[i] == -1 || change[i] == 1)
            {
                bestOne[i] = car[i];
                Console.WriteLine(bestOne[i]);
            }
        }
        for (int i = 0; i < 10; i++)
        {
            if (change[i] == -2 || change[i] == 2)
            {
                bestOne[i] = car[i];
                Console.WriteLine(bestOne[i]);
            }
        }
        for (int i = 0; i < 10; i++)
        {
            if (change[i] == -3 || change[i] == 3)
            {
                bestOne[i] = car[i];
                Console.WriteLine(bestOne[i]);
            }
        }
    }

    ///////////////////////////////////////////////////
    ////Prodoljat ili net////////////////////////////// 
    ///////////////////////////////////////////////////


    static void ContinueOrNot(int[] bestWay,bool weNeedContinue)
    {
        for (int i = 0; i < 10; i++)
        {
            if (bestWay[i] != 0)
            {
                weNeedContinue = true;
                //break;
            }
            else
            {
                weNeedContinue = false;
            }
        }
    }

}
    }
命名空间控制台应用程序16
{
班级计划
{
静态void Main(字符串[]参数)
{
Random rand=新的Random();
bool-weNeedContinue=true;
int[]propuski1={0,0,0,0,0,0,0,0,0,0};
int[]bestWay={0,0,0,0,0,0,0,0,0};
int[]propuski=PropuskiPrice(propuski1);
int[]car={0,0,0,0,0,0,0,0};
GenerateCar(汽车、bestWay);
int[]moneyChange={0,0,0,0,0,0,0,0,0};
while(WenedContinue==true)
{
获取最佳(货币兑换、汽车、propuski、bestWay);
GenerateCar(汽车、bestWay);
对于(int i=0;i<10;i++)
{
Console.WriteLine(“luchshii put”+bestWay[i]);
}
对于(int i=0;i<10;i++)
{
控制台写入线(“car”+car[i]);
Console.WriteLine(“propusk”+propuski[i]);
}
Console.ReadKey();
ContinueOrNot(bestWay,weNeedContinue);
}          
}
公共静态int[]PropuskiPrice(int[]a)
{
Random rand=新的Random();
int summa=0;
对于(变量i=0;i如果(i==9&&summa递归方法PropuskiPrice需要固定。它需要引用数组:propuski1、bestWay和propuski。请参阅下面的帖子中的我的组合代码:Ty!我还有一个此算法的变量,如果可以,请检查它-现在问题是,这段代码不起作用。您仍然有PropuskiPric的相同问题方法。它不能正常工作。