我刚开始学习遗传算法,没有查看代码中的任何现有遗传算法,我编写了这个简单的程序,其目标是从给定的范围内猜测一个数字,并且猜测的数字应该与预期的数字正确匹配。我知道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
发布于 2018-09-26 04:06:00
我不相信你的解决方案可以被称为遗传算法。
遗传算法有几个特点:
有一种表示法促进了“突变”。例如,如果您可以用位字表示算法的状态,并且位字的随机排列创建了算法的有效更改状态,那么这类似于您可能在遗传算法中看到的情况。
这种表现形式也可能促进杂交。所以,使用比特字的例子,如果你可以从一个解决方案中提取一半的比特,从另一个解决方案中提取一半的比特,并将它们组合在一起;而这种组合代表了算法的有效状态,那么这类似于你在遗传算法中可能看到的情况。
这样的算法往往会通过自然选择存活下来。所以你通常有一个适应度函数,它决定了你的解决方案的效果如何。糟糕的解决方案可能会被丢弃。好的解决方案可能会在下一次迭代测试时进行变异或杂交。
你的算法不会做这些事情。
发布于 2018-09-27 21:29:08
要创建一个遗传/进化算法,你需要知道几件事
定义问题你必须知道你想要得到什么然后你就可以开始开发
你发布的代码只是一种蛮力,你在循环中随机取一个数字。
真正的GA有以下一些步骤:
现在你就知道了。在这里很难解释所有的事情。你会发现它在互联网上到处都是:)
https://stackoverflow.com/questions/52505756
复制相似问题