标签: genetic-algorithm

什么是保护分区?(参考基因编程和密码学)

我在一篇关于遗传编程的论文中得到了对“受保护部门”操作的引用。当我谷歌这个时,我得到的主要是关于遗传编程和与密码学相关的各种结果的论文,但没有解释它究竟是什么。有人知道吗?

cryptography genetic-programming division genetic-algorithm

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

交叉不同长度的基因型

我有两个随机代表

1 6 8 9 0 3 4 7 5

3 6 5 7 8 5

交叉他们的方法是什么?

在每个基因型的末尾添加一些空数字(或操作或某些操作),以便它们具有相同的大小?

3 6 5 7 8 5 -1 -1 -1

-1表示什么都没有?

或者从第一个基因型复制少数数字,从第二个基因型复制一些?

你用的方式是什么?

artificial-intelligence genetic-algorithm crossover

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

获取列表中具有最高属性的 n 个元素

我是 Haskell 的新手,正在尝试实现一些遗传算法。目前,我无法选择个体列表中的 n 个最佳元素(其中每个个体都是其自身的列表。个体的创建方式如下:

ind1 :: [Int]
ind1 = [1, 1, 1, 1, 1, 1, 1]
ind2 :: [Int]
ind2 = [0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

适当的群体由这些个体的列表组成:

pop :: [[Int]]
pop = [ind1, ind2]
Run Code Online (Sandbox Code Playgroud)

我想要实现的是获得群体中最好的 n 个个体,其中“最好”是由其元素的总和决定的,例如,

> sum ind1
7
> sum ind2
0
Run Code Online (Sandbox Code Playgroud)

我开始创建一个函数来创建具有个体及其质量的元组:

f x = [(ind, sum ind) | ind <- x]
Run Code Online (Sandbox Code Playgroud)

所以至少我得到了这样的东西:

[([1, 1, 1, 1, 1, 1, 1], 7), ([0, 0, 0, 0, 0, 0, 0], 0)]
Run Code Online (Sandbox Code Playgroud)

我如何从这里得到预期的结果?我什至无法获得“snd == max”元组的“fst”。我从不同主题中看到的递归方法开始,但不幸的是没有合理的结果。有什么建议,可能还有在哪里阅读?谢谢你!

haskell genetic-algorithm

4
推荐指数
2
解决办法
571
查看次数

格雷码在进化计算中的好处是什么?

关于遗传算法的书籍和教程解释说,使用格雷码在二进制基因组中编码整数通常比使用标准基数 2 更好。给出的原因是编码整数中 +1 或 -1 的变化,只需要一位翻转对于任何数字。换句话说,相邻整数在格雷码中也是相邻的,格雷编码中的优化问题至多具有与原始数值问题一样多的局部最优值。

与标准基数 2 相比,使用格雷码还有其他好处吗?

binary genetic-algorithm evolutionary-algorithm gray-code

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

整洁: 说明

我试图自己实现整洁,使用原始论文但被卡住了。

假设在上一代我有以下物种:

Specie 1:     members: 100    avg_score: 100
Specie 2:     members: 150    avg_score: 120
Specie 3:     members: 300    avg_score: 50
Specie 4:     members: 10     avg_score: 110
Run Code Online (Sandbox Code Playgroud)

我现在对下一代的尝试。如下:

  1. 从每个物种中删除每个基因组,除了一个随机基因组。
  2. 将每个基因组放在物种中/也许创建一个新的
  3. 将物种的分数设置为物种中每个基因组分数的平均值。

    4.1 通过杀死每个物种中最差的 90% 来繁殖。

    4.2 选择一个物种,根据他们的分数。

    4.3 从那个物种中,选择 2 个基因组并培育一个新的基因组。

我不确定这是否是正确的尝试,尤其是当我“杀死”90% 的基因组时。这个百分比值是我现在随机选择的(这只是概念上的)。

如果一个物种,在杀死后,有 0 个成员。然后就灭绝了吗?

在我给出的例子中,如果我杀死 90%,物种 4 可能会灭绝。

我的尝试是否正确,或者一个物种通常是如何灭绝的?

neat genetic-algorithm genome

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

NEAT 物种形成算法如何工作?

I've been reading up on how NEAT (Neuro Evolution of Augmenting Topologies) works and i've got the main idea of it, but one thing that's been bothering me is how you split the different networks into species. I've gone through the algorithm but it doesn't make a lot of sense to me and the paper i read doesn't explain it very well either so if someone could give a explanation of what each component is and what it's doing then …

artificial-intelligence machine-learning genetic-algorithm

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

如何随机改变二进制列表中的 5 个值?

我正在编写一个遗传算法,其中我需要从二进制列表中选择 5 个数字genotype并翻转它们,所以 a 1001。我尝试将我的代码放入一个循环中,range(1,6)但是当我这样做时,它仍然只更改其中一个数字。下面是我没有循环的原始代码,它随机选择一个二进制值并对其进行变异。除了列表中的 5 个元素之外,有没有人知道这样做的更好方法?

genotype = [1,0,0,1,0,0,1,1,1,0]

def mutate(self):
  gene = random.choice(genotype)
  if genotype[gene] == 1:
    genotype[gene] = 0
  else:
    genotype[gene] = 1
  return genotype

Run Code Online (Sandbox Code Playgroud)

python random genetic-algorithm

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

遗传算法 - 我需要什么数据结构?

我希望这里允许这样一个开放式问题。我正在研究一个简单的 GA,它将演变一个字符串输出以匹配给定的目标字符串。因此,每一代都将创建 N 个字符串的群体,每个字符串都将根据其与目标字符串的汉明距离分配一个适合度。然后我需要某种方式来存储和排序这些信息。我正在处理,但 Java 中的解决方案几乎总是可以在这种语言中使用导入。

由于我所追求的是模糊的键值结构,我的直觉是我想要某种字典,但我对使用这些的经验很少。还有一些复杂情况使我们无法理解字典的工作原理。我想做以下事情:

  1. 存储每个字符串及其关联的适应度。这两者的副本必须是可能的

  2. 按值对结构进行排序,即按其适应度的降序列出总体。

  3. 剔除底层 50% 的人口。可能最简单的方法是直接用适合人群的后代替换不适合人群。

访问时间/计算效率不是特别关注的问题。

昨晚我尝试使用 HashMap 解决这个问题,但我一直遇到问题,例如在此结构下不允许重复键,而且我找不到一种简单的方法来遍历 HashMap 并仅更改底部的 X%按值输入。

总而言之,我需要一个结构,其中每个条目都由一个 String 和一个 integer 组成,可以存储每个的重复项,该结构可以按整数值按降序排序,因此条目顶部或底部 X% 可以是在不影响其余的情况下进行手术。

非常感谢您的时间,任何帮助将不胜感激。

java processing dictionary genetic-algorithm data-structures

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

如何查询pyGAD GA实例的最佳方案?

我使用 pyGAD Python 库提供的遗传算法实现训练了一组神经网络。到目前为止我编写的代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pygad.gann
import time
import pickle

ret = -1
n_sect = 174
population_size = 500
num_parents_mating = 4 
num_generations = 1000
mutation_percent = 5
parent_selection_type = "rank"
crossover_type = "two_points"
mutation_type = "random"
keep_parents = 1
init_range_low = -2
init_range_high = 5
n_div = 15

data = pd.read_csv("delta_results/sub_delta_{}.csv".format(n_sect), index_col=0)
data.index = pd.to_datetime(data.index)
data = list(data["Delta"])

function_inputs = np.array([data[i:i+n_div][:ret] for i in range(0, len(data), …
Run Code Online (Sandbox Code Playgroud)

python artificial-intelligence machine-learning genetic-algorithm

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

如何验证网络中的图是否有交叉边?

我正在创建一个遗传算法来使用 python 和 networkx 解决旅行商问题。我添加了一个条件来收敛到满意的解决方案:路径不得有交叉边缘。我想知道 networkx 中是否有一个快速函数来验证图形是否具有交叉边,或者至少想知道是否可以创建一个。

该图是使用一系列点 ( path) 创建的,每个点都有一个 x 坐标和 y 坐标。点的序列索引了游览路径。我创建了一个nx.Graph()如下所示的对象:

        G = nx.Graph()
        for i in range(len(path)):
            G.add_node(i, pos=(path[i].x, path[i].y))
            
        for i in range(len(path)-1):
            G.add_edge(i, i+1)
        G.add_edge(len(path)-1, 0)
Run Code Online (Sandbox Code Playgroud)

收敛非最优解的一个例子:

https://i.stack.imgur.com/T2XJc.png

打印出点nx.get_node_attributes(G,'pos')

{0: (494, 680), 1: (431, 679), 2: (217, 565), 3: (197, 581), 4: (162, 586), 5: (90, 522), 6:(138, 508), 7: (217, 454), 8: (256, 275), 9: (118, 57), 10: (362, 139), 11: (673, 89), 12: (738, 153), 13: (884, …
Run Code Online (Sandbox Code Playgroud)

python graph traveling-salesman networkx genetic-algorithm

4
推荐指数
2
解决办法
627
查看次数