我刚刚开始研究遗传算法,并且没有查看代码中现有的遗传算法,而是编写了这个简单的程序,其目的是从给定范围内猜测一个数字,并且所猜测的数字应与预期数字正确匹配。我了解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
答案 0 :(得分:0)
我不认为您的解决方案可以称为遗传算法。
遗传算法通常具有以下几方面:
有一个便于“变异”的表示。例如,如果您可以用位字表示算法的状态,并且位字的随机排列会创建算法的有效更改状态,那么这类似于遗传算法中可能看到的状态。
该表示形式也可以促进杂交。因此,以位字为例,如果您可以从一种解决方案中获取一半的比特,而从另一种解决方案中获取一半的比特,然后将它们组合;并且该组合表示该算法的有效状态,然后类似于您在遗传算法中可能看到的状态。
这类算法倾向于通过自然选择来生存。因此,通常您可以使用适应度函数来确定您的解决方案的效果。较差的解决方案可能会被放弃。好的解决方案可能会变异或杂交,以用于下一次测试迭代。
您的算法不执行任何操作。
答案 1 :(得分:0)
制作遗传/进化算法需要了解的几件事
您发布的代码只是蛮力,您需要在循环中随机输入一个数字。
真正的GA有以下一些步骤:
就在那里。这里很难解释所有内容。您会在互联网上到处找到它:)