在一个井字游戏的实现中,我认为具有挑战性的部分是确定机器播放的最佳动作.
有哪些算法可以追求?我正在研究从简单到复杂的实现.我该如何处理这部分问题?
我一直在认真地尝试创建一个基因程序,它将以可接受的方式发展为井字游戏.我正在使用基因组生成一个函数,然后将板作为输入并输出结果......但它不起作用.
这个程序可以用少于500行代码(包括空行和文档)编写吗?也许我的问题是我正在生成过于简单的AI.
请给我一些帮助和洞察这个适用于这个特定简单问题的"遗传编程"概念.
@OnABauer:我认为我使用遗传编程是因为引用了维基百科
在人工智能中,遗传编程(GP)是一种基于进化算法的方法,其灵感来自生物进化,以发现执行用户定义任务的计算机程序.
我正在尝试生成一个程序(在这种情况下是函数),它将执行玩tic-tac-toe的任务,你可以看到它,因为最重要的输出 genetic_process函数是一个基因组,然后将转换为一个函数因此,如果我理解正确,这是遗传编程,因为输出是一个函数.
代码运行时没有错误也没有崩溃.问题是,最终我得到的是一个无能的人工智能,它将试图非法行动并因每次失败而受到惩罚.它并不比随机更好.
可能是因为我的AI功能如此简单:只需对没有条件的正方形的存储值进行计算.
我的cromosome显示了一系列函数,这些函数将用于减少存储为trinary的电路板数组.好吧,让我举一个例子:*染色体是:amMMMdsa(染色体长度必须为8).1.第一步是将此转换为函数,在顶部查找后调用LETTERS_TO_FUNCTIONS,这给出了函数:[op.add,op.mul,op.mod,op.mod,op.mod,op.floordiv,op.sub,op.add]
第二步是将董事会转变为三元代表.所以,让我们说董事会是"OX XOX "我们将获得[2,3,1,1,3,2,3,1,1]
第三步是使用上面获得的函数减少三次演化.下面的功能最好地解释了这一点:
def reduce_by_all_functions(numbers_list,functions_list):
"""
Applies all the functions in a list to a list of numbers.
>>> reduce_by_all_functions([3,4,6],[op.add,op.sub])
1
>>> reduce_by_all_functions([6,2,4],[op.mul,op.floordiv])
3
"""
if len(functions_list) != len(numbers_list) - 1:
raise ValueError("The functions must be exactly one less than the numbers")
result = numbers_list[0]
for …Run Code Online (Sandbox Code Playgroud)