吃豆人游戏
规则:在一个10×10格子的棋盘内,有随机50个格子有豆子,吃豆人了解的情况有当前和上下左右5个格子状态, 行为有:不动,上,下,左,右,随机移动,吃等7个,求吃豆人在100个行动周期内得分最高的行为策略。
生活:根据当前和上下左右共5个位置的情况,得到状态,根据状态选择行为。 繁殖:两个基因随机取中位互换,随机部分变异 奖惩:吃到豆子+10,吃空-1,撞墙-5
个体数据,基因组: 建立一个map存储状态和行为索引,一个数组存储行为。状态有3^5 = 243个,行为有3个
地图: 二维数组, 12 × 12, 每个格子状态是0或者1,2,初始化5个for循环 坐标系, mapinfo[y][x] y ^ | | | ------------> x 0,0
1随机生成200个吃豆人个体 dna数组243,存储内容0,1,2, 4, 5, 6 生成得分,墙扣5分,豆加10分,吃空扣2分 dna互换,从半截对调 随机变异 存放个体的map
2随机生成地图 保存地图格子 豆子生成
3遍历所有个体,在地图内运行100次,得分最高选中概率越高的方式得到最优者两个 从高到低排序,权重分别是200-1,累计总权重,在总权重中随机取数。随机数落在的区间就是 遍历权重数列,看累计权重,当随机数比当前累计权重小,就取当前个体
4繁殖新的200个体 随机选择切断位组合一次,个体再随机变异
回到1,直到运行了1000代,保存最优者dna, 得分,写入文件
伪代码:
生成初代个体200
遍历1000代
遍历200个体
遍历1000场比赛
随机地图
遍历100天
取当前状态
取相应行为
评估得分
更新地图
新的位置
累计得分
得到1000场平均得分
根据平均得分分配权重,按权重概率挑选父母200次
基因互换,随机变异得到下一代个体
得分清理
出生位置随机
结束1000代进化,输出评分和基因