首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该使用什么算法来“遗传人工智能改进”?

我应该使用什么算法来“遗传人工智能改进”?
EN

Stack Overflow用户
提问于 2009-09-24 11:46:50
回答 3查看 1.3K关注 0票数 7

首先,这不是一个关于如何让一个程序在一行中播放5的问题。去过那里,干过那事。

介绍性解释

我制作了一款五人制游戏,作为一个框架来试验基因改良的人工智能(哎哟,听起来太自命不凡了)。与大多数基于回合的游戏一样,最好的移动是通过给每一个可能的移动分配一个分数,然后以最高的分数进行移动。将分数分配给移动(正方形)的函数如下所示:

  1. 如果正方形已经有一个标记,那么分数是0,因为在正方形中放置一个新标记是非法的。
  2. 每个方块可以是多达20个不同的获胜行(5个水平,5个垂直,10个对角线)的一部分。正方形的分数是这些行的分数之和。
  3. 一行的得分取决于已经在行中的友方和敌人标记的数量。示例:
代码语言:javascript
复制
- A row with four friendly tokens should have infinite score, because if you place a token there you win the game.  
- The score for a row with four _enemy_ tokens should be very high, since if you _don't_ put a token there, the opponent will win on his next turn.
- A row with both friendly and enemy tokens will score 0, since this row can never be part of a winning row.

考虑到这个算法,我声明了一个名为TBrain的类型:

代码语言:javascript
复制
type
  TBrain = array[cFriendly..cEnemy , 0..4] of integer; 

数组中的值表示N个友好令牌和0个敌人令牌或0友好令牌和N个敌人令牌的一行的得分。如果一行中有5个标记,则没有得分,因为行已经满了。

实际上,很容易决定哪些值应该在数组中。大脑0,4应该是“无限的”,让我们称之为1.000.000。vBrain1,4 1,4应该非常高,但不要太高,以至于大脑宁愿阻止几场敌人的胜利,也不愿战胜自己。

接待员以下(不太可能)板:

代码语言:javascript
复制
  0123456789
 +----------
0|1...1...12
1|.1..1..1.2
2|..1.1.1..2
3|...111...2
4|1111.1111.
5|...111....
6|..1.1.1...
7|.1..1..1..
8|1...1...1.

玩家2应该将他的令牌放置在(9,4)中,而不是在(4,4)中,即使他会阻止8位潜在获胜的第1位球员。因此,vBrain0,4 1,4应该是(vBrain0,4/8)-1。像这样工作,我们可以为“大脑”找到最佳值,但这不是我感兴趣的。我想要一个算法来找到最好的值。

我已经实现了这个框架,所以它完全是确定性的。分数不加随机值,如果几个方块有相同的分数,左上角将被选中。

实际问题

这就是介绍,现在是有趣的部分(至少对我来说)

我有两个“大脑”,vBrain1和vBrain2。我应该如何迭代地使这些更好呢?我想是这样的:

  1. 使用随机值初始化vBrain1和vBrain2。
  2. 模拟他们之间的游戏。
  3. 将胜利者的价值分配给输家,然后随机改变其中的一个。

这看起来不管用。大脑不会变得更聪明。为什么?

分数法是否应该在结果中添加一些小的随机值,这样两个相同的大脑之间的两场游戏就会不同了?每个迭代的值应该有多大的变化?如何初始化“大脑”?用恒定的值?随机值?

此外,这与人工智能或遗传算法有任何关系吗?

PS:这个问题与一排中的五人无关。这只是我选择的东西,因为我可以宣布一个非常简单的“大脑”来进行实验。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-24 12:05:22

一般来说,是的,通过使用遗传算法技术,你可以使大脑变得更聪明。

随机性,或突变,在遗传规划中起着重要作用。

我喜欢这个教程,遗传算法:酷名&该死的简单

(它使用Python作为示例,但不难理解)

票数 4
EN

Stack Overflow用户

发布于 2009-09-24 12:51:10

如果你想像遗传算法一样处理这个问题,你就需要一个完整的“大脑”群体。然后评估他们之间的相互,要么每一个组合或使用一种比赛风格。然后选择种群中最高的X%作为下一代的父母,后代是通过突变(你拥有的)或遗传交叉(例如,在两个“大脑”之间交换行或列)而产生的。

此外,如果你没有看到任何进化的进展,你可能需要的不仅仅是得失,而是想出某种分数系统,这样你就可以更有效地对整个种群进行排名,这使得选择变得更加容易。

票数 7
EN

Stack Overflow用户

发布于 2009-10-12 21:05:10

看一看增强组织的神经进化 (整洁)。一个奇特的缩略词,它基本上意味着神经网络的发展--它们的结构(拓扑)和连接权重。我编写了一个名为.Net的SharpNEAT实现,您可能想看看这个实现。SharpNEAT V1也有一个Tic-Tac-脚趾实验.

http://sharpneat.sourceforge.net/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1471171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档