一直想给这个游戏加一个RL的大脑。
我为了确定要用到哪些状态,和动作,以及奖励,回合的定义。
我设想了一个最简单逻辑,此处存活的敌机群它们的x坐标的平均值avg_x,以及我方飞机的x坐标m_hero.m_X,让我方飞机向敌机群靠近打击,avg_x比m_hero.m_X小则向右移动,avg_x比m_hero.m_X大则向左移动。
动作:action:一维,0表示不动,1表示向左移,2表示向右移。
奖励:子弹碰到一架敌机则记1分
回合结束:我方飞机的机身与敌方飞机的机身发生碰撞。
状态的设置可以是很多情况:
Atari游戏是直接把游戏界面的像素点组成的数组作为状态,数据量太大了。必须要用带神经网络的RL算法。
我想的状态是:敌机群的平均x坐标,我那个游戏界面有多宽就有多少种状态,外加我方飞机的x坐标。
还可以进一步简化状态:0:敌机群在我方飞机左边;1:敌机群在我方飞机右边;
目前的问题:我还没有交互呢,只是把Q-learning的python脚本嵌入进去了,让他不报错,它就卡的不要不要的。
我在C++里面实例化python的Q-table类,死活不行。卡在这里好几天了。蚌埠住了。T_T.
谁来救救我啊......
重新去看了python的迷宫Q-table代码,研究了传给Q-table的action必须是一个列表,改正传递的参数后,总算能实例化了。
接下来的问题是:调用choose_action()和learn()函数不成功,我估计是由于我传的参数类型不对。