遗传算法-是什么使算法具有遗传性?

时间:2018-09-25 19:51:20

标签: genetic-algorithm

我刚刚开始研究遗传算法,并且没有查看代码中现有的遗传算法,而是编写了这个简单的程序,其目的是从给定范围内猜测一个数字,并且所猜测的数字应与预期数字正确匹配。我了解GA基本上会发展到达到预期状态。

该程序的作用是,它生成一个随机数,将其与正确的数字进行比较,并在每次失败的猜测之后调整其范围,并在一段时间内随着范围变窄而正确地猜测该数字。这个程序会被称为遗传算法吗?

number_to_be_guessed = 10

attempt = 0
start = 0
end = 100
while True:
    guessed_number = random.randint(start,end)
    if guessed_number == number_to_be_guessed:
        print("Number found, which is {}".format(guessed_number))
        break
    elif guessed_number > number_to_be_guessed:
        end = guessed_number
    else:
        start = guessed_number   
    print("Attempt:{} -- Guessed Number:{} -- Start Value:{} -- End Value:{}"\
      .format(attempt,guessed_number,start,end))
    attempt += 1

输出

尝试:0-猜测数字:0-起始值:0-结束值:100

尝试:1-猜中的数字:27-起始值:0-结束值:27

尝试:2-猜中的数字:22-起始值:0-结束值:22

尝试:3-猜中的数字:15-起始值:0-结束值:15

尝试:4-猜中的数字:2-起始值:2-结束值:15

尝试:5-猜中的数字:6-起始值:6-结束值:15

尝试:6-猜中的数字:8-起始值:8-结束值:15

尝试:7-猜中的数字:9-起始值:9-结束值:15

尝试:8-猜中的数字:14-起始值:9-结束值:14

尝试:9-猜中的数字:12-起始值:9-结束值:12

尝试:10-猜中的数字:12-起始值:9-结束值:12

找到数字,即10

2 个答案:

答案 0 :(得分:0)

Here is a good summary.

我不认为您的解决方案可以称为遗传算法。

遗传算法通常具有以下几方面:

有一个便于“变异”的表示。例如,如果您可以用位字表示算法的状态,并且位字的随机排列会创建算法的有效更改状态,那么这类似于遗传算法中可能看到的状态。

该表示形式也可以促进杂交。因此,以位字为例,如果您可以从一种解决方案中获取一半的比特,而从另一种解决方案中获取一半的比特,然后将它们组合;并且该组合表示该算法的有效状态,然后类似于您在遗传算法中可能看到的状态。

这类算法倾向于通过自然选择来生存。因此,通常您可以使用适应度函数来确定您的解决方案的效果。较差的解决方案可能会被放弃。好的解决方案可能会变异或杂交,以用于下一次测试迭代。

您的算法不执行任何操作。

答案 1 :(得分:0)

制作遗传/进化算法需要了解的几件事

  1. 定义问题
  2. 你必须知道你想得到什么
  3. 然后您可以开始开发遗传算法

您发布的代码只是蛮力,您需要在循环中随机输入一个数字。

真正的GA有以下一些步骤:

  1. 第一代的初始化
  2. 这一代人的评价
  3. 选择父母
  4. 遗传操作(变异和交叉)(生孩子)
  5. 儿童评估
  6. 将其中一些作为父母
  7. 循环运动直至健身功能表明您的结果足够好

就在那里。这里很难解释所有内容。您会在互联网上到处找到它:)