我想编写一种遗传算法来学习玩类似俄罗斯方块的游戏。 游戏本身相对简单;我在下面写了完整的行为。
比赛:
(CLUSTER_SIZE - 3)^2
都会添加到BLOCK_SCORE。(TIME_ALIVE * BLOCK_SCORE)
这款游戏的得分包括长寿和效率。您清除的群集越大,适合度越高。
我现在编写了一些GAs,但它们基于本地竞争,收集目标之类的东西,VS其他个人。 我的问题是我不知道如何解决这个问题。这个新GA的每个不同的个体应该只有当前网格作为输入。 (至少,这是我认为需要的)
我如何开始为此编码GA?我不能为我的生活而努力。
全心全意,
Steffan'Ruirize'James
答案 0 :(得分:2)
您的人口中的每个人都将代表一场完成的游戏。每个人的属性将是定义用于放置块的给定策略所必需的参数。我假设您有一些不同的启发式方法来放置块。策略的一个示例是从可用策略中随机选择启发式,因此您的属性将是选择给定启发式的一组概率。您能否提供有关块k放置启发式的更多信息?
答案 1 :(得分:1)
替代编码可能涉及:
for each possible move
set phenotypeBehavior to 0
calculate the post-move position
foreach block cleared add a perBlockClearedEmphasis value to phenotypeBehavior
foreach column add a perColumnHeightEmphasis value to your phenotypeBehavior
foreach cluster of size x, add a clusterSizeXEmphasis value to your phenotypeBehavior
choose the move that produces the highest phenotypeBehavior
通过遗传方式对各种_foo_Emphasis值进行编码并对其进行演化。据推测,例如,perBlockClearedEmphasis将推向高值,而你的启发式“高度差”将驱动perColumnHeightEmphasis为负,而clusterSizeXEmphasis对小X为负,对较大X为正。
在最一般意义上,这表明您的遗传结构描述了一个声明性但高度参数化的程序。