标签: genetic-algorithm

轮盘赌选择的实现

我正在用 C 从头开始​​编写遗传算法,我陷入了轮盘赌的实现中,以下是我的编码方式:

void selection(Chromosome * chromosome){

double totalFitness=0;
double totalProbability=0;
double probability=0;
double rndNumber;
double min,max;
int i;

min=0.0;
max=1.0;

for(i=0;i<POPULATION_SIZE;i++){
 totalFitness += chromosome[i].fitness;
  }

  for(i=0;i<POPULATION_SIZE;i++){
   chromosome[i].probability = (chromosome[i].fitness)/totalFitness;
   printf("Chromosome %d with probability %f\n",i, chromosome[i].probability);
  }
 srand((unsigned)time(NULL));
 for(i=0;i<POPULATION_SIZE;i++){
  rndNumber = ((double)rand()/(double)RAND_MAX);
  if(chromosome[i].probability >= rndNumber){
  printf("Chromosome %d selected \n",i);




}}}
Run Code Online (Sandbox Code Playgroud)

输出返回一条选定的染色体或不返回选定的染色体,这不是预期的结果。我想知道这是否是正确的点法?

提前致谢。

c roulette-wheel-selection genetic-algorithm

0
推荐指数
1
解决办法
7099
查看次数

如何在网格板上实现遗传算法来找到最佳路径

我正在准备在有障碍物的地形中寻找最佳路径的算法。到目前为止,我实现了 Dijsktra 和 A* 算法。现在我必须实现遗传算法,但我遇到了问题。

首先,我将向您展示我的地图表示形式的外观。有7种不同的地形(0-起点,7-终点,1-4正常可以通过,5-6不能通过)。下面是 Python 中的代码(在我看来,代码中最重要的部分是理解问题的函数neighbors):

class Graph():
    def __init__(self, x=10, y=10):
        self.width = x
        self.height = y
        self.board = ((1, 1, 1, 5, 1, 1, 1, 1, 1, 7),
                      (1, 1, 1, 5, 1, 1, 1, 1, 1, 1),
                      (1, 1, 1, 5, 1, 5, 1, 1, 1, 1),
                      (0, 1, 1, 1, 1, 5, 1, 1, 1, 1),
                      (1, 1, 1, 1, 1, 5, 1, 1, 1, 1),
                      (1, 1, 1, 1, 1, 1, …
Run Code Online (Sandbox Code Playgroud)

python matrix path-finding genetic-algorithm

0
推荐指数
1
解决办法
1828
查看次数

有没有办法改进我的遗传算法?

我对 GA 感兴趣并想做我自己的。
这就是我想要实现的任务:
我得到了一个 16x16 的“世界”字段。我用随机基因创建了 16 个机器人。每个基因是一个包含 1-19 的 4 个数字的数组(16-19 将转向机器人方向,1-15 是机器人将在指定方向上前进的场量)。在这个词中,我采取随机位置并试图使从领导机器人到目标的距离尽可能小。

我创造新一代的方式:

  1. 挑选距离最小的 8 个机器人并将它们放入下一代(无交叉)

  2. 为我在“1)”中挑选的 8 个最好的机器人做交叉(所以我得到了 8 个新机器人)

  3. 随机变异 2 个交叉机器人,最后将它们放入下一代。现在我有 16 个新一代机器人。

问题是:在我所有尝试的 1/100 中,我只得到距离 == 0。但是我经常得到距离 1 和 2(我等到第 1000 代,然后我放弃,再试一次)有没有办法改善这一点?还是不能用 GA 做得更好?

algorithm artificial-intelligence genetic-algorithm

0
推荐指数
1
解决办法
1065
查看次数

为什么切换位后NaN是两倍?

我正在编写一种遗传算法,用于查找具有给定X,Y点的系数。此页面上描述了操作原理-https://towardsdatascience.com/introduction-to-genetic-algorithms-includes-example-code-e396e98d8bf3

我有问题,因为有时在突变或交叉后,我的双精度值是NaN。

我试过使用byte []和BitArray来执行此操作,但是在两种方法中我都得到相同的结果。

转换双<-> BitArray:

public void ConvertByteArrayToCoefficients(BitArray array)
{
    Coefficients.Clear(); //Coefficients are stored in List<double>

    for (int i = 0; i < _degree + 1; i++)
    {
        var arr = array.ToByteArray();
        double value = BitConverter.ToDouble(array.ToByteArray(), i * sizeof(double));

        Coefficients.Add(value);
    }
}

public BitArray GetAllCoefficientsInBytes()
{
    BitArray bytes = new BitArray(0);

    for (int i = 0; i < Coefficients.Count; i++) //append is extension method
        bytes = bytes.Append(new BitArray(BitConverter.GetBytes(Coefficients[i])));

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

突变:

public void Mutate(int percentageChance)
{
    BitArray …
Run Code Online (Sandbox Code Playgroud)

c# genetic-algorithm

0
推荐指数
1
解决办法
57
查看次数

遗传算法/人工智能;基本上,我在正确的轨道上吗?

我知道 Python 并不是编写任何此类软件的最佳主意。我的理由是在 Raspberry Pi 3 的决策中使用这种类型的算法(仍然不确定会如何进行),以及我将使用的库和 API(Adafruit motor HAT、Google 服务、OpenCV、各种传感器等)都可以很好地导入 Python,更不用说我在这种环境中更适合 rPi。我已经诅咒它了,因为 Java 或 C++ 等面向对象对我来说更有意义,但我更愿意处理它的低效率并专注于 rPi 集成的更大图景。

我不会在这里解释代码,因为它在整个脚本的注释部分都有很好的记录。我的问题如上所述;这可以被认为基本上是一种遗传算法吗?如果不是,它必须是一个基本的人工智能或遗传密码吗?我是否处于解决此类问题的正确轨道上?我知道通常有加权变量和函数来促进“适者生存”,但我认为可以根据需要弹出。

我已经阅读了很多关于这个主题的论坛和文章。我不想复制我几乎不理解的其他人的代码,并开始将其用作我更大项目的基础;我想确切地知道它是如何工作的,所以我不会对为什么某些事情在此过程中不起作用感到困惑。所以,我只是试图理解它如何工作的基本思想,并写下我如何解释它。请记住,我想为此留在 Python 中。我知道 rPi 有多个用于 C++、Java 等的环境,但如前所述,我使用的大多数硬件组件只有 Python API 用于实现。如果我错了,请在算法级别进行解释,而不仅仅是用一段代码(同样,我真的很想了解这个过程)。另外,请不要挑剔代码约定,除非它 与我的问题有关,每个人都有自己的风格,这只是现在的草图。在这里,感谢您的阅读!

# Created by X3r0, 7/3/2016
# Basic genetic algorithm utilizing a two dimensional array system.
# the 'DNA' is the larger array, and the 'gene' is a smaller array as an element
# of the DNA. There exists no weighted algorithms, or statistical tracking to
# make the program …
Run Code Online (Sandbox Code Playgroud)

python genetic artificial-intelligence genetic-programming genetic-algorithm

-1
推荐指数
1
解决办法
788
查看次数

遗传算法的核心算法

什么是遗传算法的核心算法?为了对算法进行编码,需要精确定义什么?

algorithm genetic-algorithm

-3
推荐指数
1
解决办法
506
查看次数

关于扮演Snake的神经网络的澄清

我是神经网络/机器学习/遗传算法的新手,对于我的第一次实现,我正在写一个学会玩蛇的网络(以前你没有玩过它的例子)我有几个问题我不喜欢完全明白:

在我提出问题之前,我只想确保正确理解一般的想法.有一群蛇,每一条都有随机产生的DNA.DNA是神经网络中使用的权重.每次蛇移动时,它都会使用神经网络决定去哪里(使用偏差).当人口死亡时,选择一些父母(可能是最高适应度),并以轻微的突变机会交叉他们的DNA.

1)如果给整个电路板作为输入(大约400个点)足够的隐藏层(不知道有多少,可能是256-64-32-2?),并且有足够的时间,它是否会学会不打包?

2)什么是好的投入?以下是我的一些想法:

  • 400个输入,一个用于电路板上的每个空间.如果蛇应该去那里(苹果)是正面的,如果它是墙/你的身体则是负面的.越接近-1/1,它就越接近.
  • 6个输入:游戏宽度,游戏高度,蛇x,蛇y,苹果x和苹果y(如果训练的话可以学习在不同尺寸的棋盘上玩,但不知道如何输入它的身体,因为它改变了大小)
  • 给它一个视野(可能在头前3x3平方),可以警告蛇的墙壁,苹果或它的身体.(不幸的是,蛇只能在前面看到什么,这可能会妨碍它的学习能力)

3)给定输入法,隐藏图层大小的起点是什么(当然计划调整这个,只是不知道什么是好的起点)

4)最后,蛇的健身.除了获得苹果的时间,它的长度,它的寿命,还有其他因素吗?为了让蛇学会不阻挡自己,还有什么我可以添加到健身帮助吗?

谢谢!

artificial-intelligence machine-learning neural-network genetic-algorithm

-4
推荐指数
1
解决办法
1302
查看次数

如何使用遗传算法求解节点之间的最短路径?

如果我有一个节点网络,我如何使用遗传算法计算任意两个节点之间的最短路径?

genetic-programming genetic-algorithm

-8
推荐指数
1
解决办法
4570
查看次数