我正在用 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)
输出返回一条选定的染色体或不返回选定的染色体,这不是预期的结果。我想知道这是否是正确的点法?
提前致谢。
我正在准备在有障碍物的地形中寻找最佳路径的算法。到目前为止,我实现了 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) 我对 GA 感兴趣并想做我自己的。
这就是我想要实现的任务:
我得到了一个 16x16 的“世界”字段。我用随机基因创建了 16 个机器人。每个基因是一个包含 1-19 的 4 个数字的数组(16-19 将转向机器人方向,1-15 是机器人将在指定方向上前进的场量)。在这个词中,我采取随机位置并试图使从领导机器人到目标的距离尽可能小。
我创造新一代的方式:
挑选距离最小的 8 个机器人并将它们放入下一代(无交叉)
为我在“1)”中挑选的 8 个最好的机器人做交叉(所以我得到了 8 个新机器人)
问题是:在我所有尝试的 1/100 中,我只得到距离 == 0。但是我经常得到距离 1 和 2(我等到第 1000 代,然后我放弃,再试一次)有没有办法改善这一点?还是不能用 GA 做得更好?
我正在编写一种遗传算法,用于查找具有给定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) 我知道 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
我是神经网络/机器学习/遗传算法的新手,对于我的第一次实现,我正在写一个学会玩蛇的网络(以前你没有玩过它的例子)我有几个问题我不喜欢完全明白:
在我提出问题之前,我只想确保正确理解一般的想法.有一群蛇,每一条都有随机产生的DNA.DNA是神经网络中使用的权重.每次蛇移动时,它都会使用神经网络决定去哪里(使用偏差).当人口死亡时,选择一些父母(可能是最高适应度),并以轻微的突变机会交叉他们的DNA.
1)如果给整个电路板作为输入(大约400个点)足够的隐藏层(不知道有多少,可能是256-64-32-2?),并且有足够的时间,它是否会学会不打包?
2)什么是好的投入?以下是我的一些想法:
3)给定输入法,隐藏图层大小的起点是什么(当然计划调整这个,只是不知道什么是好的起点)
4)最后,蛇的健身.除了获得苹果的时间,它的长度,它的寿命,还有其他因素吗?为了让蛇学会不阻挡自己,还有什么我可以添加到健身帮助吗?
谢谢!
artificial-intelligence machine-learning neural-network genetic-algorithm
如果我有一个节点网络,我如何使用遗传算法计算任意两个节点之间的最短路径?