标签: genetic-algorithm

实时神经网络

简而言之:神经网络是否可以对用户输入实时做出反应?

想象一个小游戏,其中的世界由接收周围环境输入并使用神经网络生成输出以实现生存的实体组成。这些实体应该具有某种能力来杀死并消耗另一个实体,以延长最终导致死亡的饥饿倒计时,从而尝试尽可能长时间地生存。

一个简单的解决方案是使用遗传算法来改进神经网络并找到一组具有更高生存能力的实体(适合本例)。

现在,如果用户应该能够控制一个这样的实体,系统就会崩溃,因为他显然比这些实体更聪明,因为它们的网络没有经过处理用户行为的训练。这种行为可以通过让用户多次重玩游戏直到神经网络适应来实现,但对于我的目标来说,这是一个过于乏味且耗时的过程。

因此我的问题是:是否有可能提高神经网络的学习速度,以便它们能够足够快地对用户输入做出反应,以便用户能够感受到变化的发生?或者是否有不同的方法可以根据用户的实时操作来改进学习人工智能?

artificial-intelligence mathematical-optimization neural-network genetic-algorithm

6
推荐指数
1
解决办法
5750
查看次数

魔方遗传算法求解器?

是否有可能通过遗传算法有效地解决魔方?

应该使用什么样的染色体编码?应该如何进行交叉和变异?

我正在使用这个立方体模型:

#ifndef RUBIKSCUBE_H_INCLUDED
#define RUBIKSCUBE_H_INCLUDED

#include "Common.h"
#include "RubiksSide.h"
#include "RubiksColor.h"
#include "RotationDirection.h"

class RubiksCube {
private:
    int top[3][3];
    int left[3][3];
    int right[3][3];
    int front[3][3];
    int back[3][3];
    int down[3][3];

    int (*sides[6])[3][3];

    std::string result;

    void spinSide(RubiksSide side) {
        static int buffer[ 3 ];

        if (side == TOP) {
            for (int i = 0; i < 3; i++) {
                buffer[i] = left[i][2];
            }
            for (int i = 0; i < 3; i++) {
                left[i][2] = front[0][i];
            }
            for (int i …
Run Code Online (Sandbox Code Playgroud)

optimization solver rubiks-cube genetic-algorithm

6
推荐指数
1
解决办法
2183
查看次数

在 NEAT 算法中调整适应度

我正在从以下论文中了解 NEAT:http : //nn.cs.utexas.edu/downloads/papers/stanley.ec02.pdf

我无法理解调整后的适应度如何惩罚大型物种并阻止它们支配种群,我将通过一个例子来证明我目前的理解,希望有人能纠正我的理解。

假设我们有两个物种,A 和 B,物种 A 在上一代做得很好,并给了更多孩子,这一代他们有 4 个孩子,他们的适应度是 [8,10,10,12] 而 B 有 2 个和他们的适应度是 [9,9] 所以现在他们调整后的适应度将是 A[2, 2.5, 2.5, 3] 和 B[4.5, 4.5]。

现在关于分配孩子,该论文指出:“每个物种被分配一个潜在不同数量的后代f'_i,与其成员生物的调整适应度总和成比例”

所以调整适应度的总和是 A 的 10 和 B 的 9 因此 A 得到更多的孩子并不断增长,那么这个过程如何惩罚大型物种并防止它们支配种群?

machine-learning neural-network genetic-algorithm

6
推荐指数
1
解决办法
680
查看次数

Bass模型遗传算法的R实现

我尝试估计低音曲线以分析不同群体的创新扩散。到目前为止,我使用nlsLM()minpack.lm包来估计曲线的参数/以拟合曲线。我遍历不同的起始值以使用此命令为不同的起始值估计最佳拟合:

Bass.nls <- nlsLM(cumulative_y~ M * (((P + Q)^2/P) * exp(-(P + Q) * time))/(1 + (Q/P) * exp(-(P + Q) * time))^2
                , start = list(M=m_start, P= p_start, Q=q_start)
                , trace = F
                , control = list(maxiter = 100, warnOnly = T) )
Run Code Online (Sandbox Code Playgroud)

由于某些组的数据点很少,因此许多组不会收敛。

Venkatesan 和 Kumar (2002)建议在数据稀缺时使用遗传算法方法进行低音模型估计(另见Venkatesan 等人 2004)。我发现了一些在 R 中实现 GA 的包(如GA, genalg, gafit)。但是,由于我是该领域的新手,我不知道该使用哪个包以及如何使用包中的低音公式。

  • 对于这种估计,您是否会推荐一个软件包?
  • 如果是,是否有示例说明如何在包的代码中包含低音模型的公式?

r time-series curve-fitting forecasting genetic-algorithm

6
推荐指数
1
解决办法
380
查看次数

如何在GEKKO中使用自己的求解方法?

我想使用我自己的遗传算法 (GA) 来解决混合整数问题:

https://mintoc.de/index.php/Batch_reactor

我可以在 GEKKO 中加入我的求解方法吗?

就像是...

m = GEKKO()
.
.
.

m.options.SOLVER = 'my_GA'
Run Code Online (Sandbox Code Playgroud)

optimization genetic-algorithm python-3.x mixed-integer-programming gekko

6
推荐指数
1
解决办法
373
查看次数

遗传算法如何在不知道搜索量的情况下优化神经网络的权重?

我已经实现了一个遗传算法训练的神经网络,其中包含一个变异算子,如下所示:

def mutation(chromosome, mutation_rate):
  for gene in chromosome:
    if random.uniform(0.00, 1.00) <= mutation_rate:
      gene = random.uniform(-1.00, 1.00)
Run Code Online (Sandbox Code Playgroud)

并且染色体最初是随机初始化的:

def make_chromosome(chromosome_length):
  chromosome = []
  for _ in range(chromosome_length):
    chromosome.append(random.uniform(-1.00, 1.00))
  return chromosome
Run Code Online (Sandbox Code Playgroud)

在执行交叉时,后代染色体只能在该区间内有基因,[-1, 1]因为父染色体也只有在该区间内的基因。当后代发生突变时,它同样会将其基因保持在该区间内。

这似乎对某些问题有效,但对其他问题无效。如果神经元的最佳权重在 内[-1, 1],那么遗传算法有效,但是如果神经元的最佳权重在不同的区间内呢?

例如,如果我使用分类误差低于 5% 的终止条件使用反向传播训练网络,我可以查看网络权重并查看诸如-1.491.98、等值2.01。我的遗传算法永远无法生成这些基因,因为基因在[-1, 1]和交叉和突变也不能产生该范围之外的基因。

看来我需要更好地定义搜索空间,如下所示:

# search space boundaries
S_MIN = -1.00
S_MAX = 1.00

# in mutation()
gene = random.uniform(S_MIN, S_MAX)

# in make_chromosome()
chromosome.append(random.uniform(S_MIN, S_MAX))
Run Code Online (Sandbox Code Playgroud)

然后我可以根据问题设置搜索空间边界。但是我如何确定搜索空间呢?此信息不是先验已知的,而是通过训练网络找到的。但是如果训练需要知道搜索空间,那么我就处于停滞状态。

我可以将搜索空间设置为任意大(例如,肯定比必要的大),但是算法收敛得很慢。我需要至少知道遗传算法搜索空间的大致数字才能有效。

对于反向传播,搜索空间不是先验已知的,这无关紧要,但对于 GA 来说却是。

python machine-learning neural-network mutation genetic-algorithm

6
推荐指数
1
解决办法
372
查看次数

Python NEAT 在某一点之后不再进一步学习

似乎我的程序正在尝试学习直到某个点,然后它就感到满意并且根本停止改进和改变。通过我的测试,它通常最多达到 -5 的值,然后无论我让它运行多久,它都会保持在那里。结果集也不会改变。

只是为了跟踪它,我做了我自己的日志记录,看看哪个做得最好。1 和 0 的数组指的是 AI 做出正确选择的频率 (1),以及 AI 做出错误选择的频率 (0)。

我的目标是让 AI 重复高于 0.5 然后低于 0.5 的模式,不一定要找到奇数。这只是一个小小的测试,看看我是否可以让 AI 使用一些基本数据正常工作,然后再做一些更高级的事情。

但不幸的是它不起作用,我不确定为什么。

编码:

import os
import neat

def main(genomes, config):
    networks = []
    ge = []
    choices = []

    for _, genome in genomes:
        network = neat.nn.FeedForwardNetwork.create(genome, config)
        networks.append(network)

        genome.fitness = 0
        ge.append(genome)

        choices.append([])

    for x in range(25):
        for i, genome in enumerate(ge):
            output = networks[i].activate([x])

            # print(str(x) + " - " + str(i) + " chose " + …
Run Code Online (Sandbox Code Playgroud)

python machine-learning neat genetic-algorithm

6
推荐指数
1
解决办法
434
查看次数

如何在遗传算法中进行二进制编码以获得更好的时间表调度问题结果?

我有一个大学时间表安排问题,我正在尝试用遗传算法解决。我想知道这个问题的最佳编码类型,这也可以帮助我满足一些约束。对于这个问题,时间表将具有以下结构,

  • 总共有5天的时间安排(周一至周五)。
  • 每天会有5个不同的时段,每个时段有一场讲座。
  • 但是,实验室讲座将在两个连续时段进行。
  • 时间表还将告知每个讲座的房间号(或实验室号)以及每个讲座的讲师姓名。

现在,时间表看起来像这样,(图中有多个时段,但我只会考虑 5 个时段,而不是将时间表分成这么多时段

在此输入图像描述

这是只有一个部分的时间表。一张时间表大约包含 25 个部分。

现在,我所做的是将每门课程、其部分及其讲师的数据以如下格式写入一个文件中,

1
Object Oriented Programming 
CS-3B
Dr Ali Hassan 
,
2
Object Oriented Programming 
SE-3A
Dr Ali Hassan 
,
3
Remote Sensing and GIS 
CS-7F
Dr Tom Baker
Run Code Online (Sandbox Code Playgroud)

为了表示时间表,我制作了这样的文件,

0
1
2 2 9
3 2 9
0
2
2 1 9
3 1 9
0
3
2 5 36
4 1 36
Run Code Online (Sandbox Code Playgroud)
  • 0 是分隔符,它将一个对象与另一个对象分开。
  • 第一个数字基本上是课程的 ID。“1”实际上代表我的第一个文件中的第一个对象(即面向对象编程,CS-3A,Ali Hassan 博士)。
  • 第二行代表时间表中课程的第一堂课(id = 1)。格式如下,第一个数字 …

algorithm encoding np-complete np-hard genetic-algorithm

6
推荐指数
1
解决办法
432
查看次数

使用多种训练方法训练ANN与Encog

我想知道在使用弹性传播训练之前是否使用遗传算法,粒子群优化和模拟退火训练前馈神经网络确实可以改善结果.

这是我正在使用的代码:

                    CalculateScore score = new TrainingSetScore(trainingSet);
                    StopTrainingStrategy stop = new StopTrainingStrategy();
                    StopTrainingStrategy stopGA = new StopTrainingStrategy();
                    StopTrainingStrategy stopSIM = new StopTrainingStrategy();
                    StopTrainingStrategy stopPSO = new StopTrainingStrategy();

                    Randomizer randomizer = new NguyenWidrowRandomizer();
                    //Backpropagation train = new Backpropagation((BasicNetwork) network, trainingSet, 0.2, 0.1);
                    //  LevenbergMarquardtTraining train = new LevenbergMarquardtTraining((BasicNetwork) network, trainingSet);
                    int population = 500;
                    MLTrain trainGA =  new MLMethodGeneticAlgorithm(new MethodFactory(){
                        @Override
                        public MLMethod factor() {
                            final BasicNetwork result = createNetwork();
                            ((MLResettable)result).reset();
                            return result;
                        }}, score,population);


                    Date dStart = new Date();

                    int …
Run Code Online (Sandbox Code Playgroud)

simulated-annealing neural-network genetic-algorithm particle-swarm encog

5
推荐指数
1
解决办法
888
查看次数

交叉熵和遗传算法有什么区别?

我的一些实验室伙伴一直在研究交叉熵强化学习。从我可以从他们那里收集的所有信息以及快速的互联网搜索中,交叉熵方法似乎与遗传算法几乎相同。有人可以向我解释一下,如果一种技术确实存在,这两种技术之间的真正区别是什么?

machine-learning reinforcement-learning genetic-algorithm

5
推荐指数
1
解决办法
446
查看次数