C# 了解遗传算法的算法,关于任务的例子
您与一家公司合作交付货物,该公司每天使用 收费公路。在沿途10个付款点支付旅行费用。这个 公司的司机需要通过支付一笔费用来克服整个道路 每一点的佣金。困难在于根据 根据规定,委员会只能支付一枚硬币。万一 如果它比车费高,司机就得不到车费 改变和担心。相反,如果硬币不能完全 付了车费,你的公司就欠了债。同时, 每一站的票价在比赛结束时都是绝对随意的 一天,可在1至10美分(含1至10美分)范围内变化。它是 也知道多个支付点可以公开相同的票价,以及 通过所有点的总行程将始终超过 55科派克。在旅程开始时,每位驾驶员都被给予10分 硬币,一便士一枚有尊严的硬币,一枚值两个科佩克的硬币,一枚 -三只,以此类推,最多十只(包括在内)。使用遗传算法,您需要找到一种旅行支付策略,其中 在旅程结束时,司机的债务将是最低限度的。算法 将在每天开始时举行,并使用新的、新的 在付款点确定佣金规模,以获得新的 司机的策略 传入参数:由10个从1到10的任意数字组成的数组, 代表每个项目的佣金规模。数字 在数组中可以重复,并且它们的和总是更大 超过55岁 输出:一个由十个数字组成的数组,代表硬币的价值 按每个点的最佳付款顺序排列(因此 公司在所有付款后的债务都很小) 我参与了写作,所以我忘记了其中一个条件,这不是寻找免费乘车,而是寻找最佳,因为免费乘车 数组中的数字可以重复,它们的总和将始终为 大于55 这是不可能的。我认为我的选择是正确的,但选择需要改变,就像一代司机一样。这是我的密码:C# 了解遗传算法的算法,关于任务的例子,c#,algorithm,genetic-algorithm,C#,Algorithm,Genetic Algorithm,您与一家公司合作交付货物,该公司每天使用 收费公路。在沿途10个付款点支付旅行费用。这个 公司的司机需要通过支付一笔费用来克服整个道路 每一点的佣金。困难在于根据 根据规定,委员会只能支付一枚硬币。万一 如果它比车费高,司机就得不到车费 改变和担心。相反,如果硬币不能完全 付了车费,你的公司就欠了债。同时, 每一站的票价在比赛结束时都是绝对随意的 一天,可在1至10美分(含1至10美分)范围内变化。它是 也知道多个支付点可以公开相同的票价,以及 通过所有点的总行程将始终超过 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的相同问题方法。它不能正常工作。