exe和源文件已经加进附件中。(打开源文件先安装gamemaker)
很早就做好了,但是后来进行了不少调整。声明一下,这个程序是对反射算法的模拟与实现,有一些点可能会和反射算法有不同,那是根据我的理解改编的。我不会讲反射算法理论,我这里是对这次实践的解释。要理论请自行搜索。
反射会作为最基础的记忆单位(每个反射链由两个神经元结合在一起)(原谅我,我在源文件里把反射这种对象名称写成了oNeuron,请忽略)储存了一个强度,当一个信号穿过它,新信号值变化成旧信号值*强度。
0<=强度<=1。穿过时,同时会巩固这个强度;也就是增加一定的值,可以在源文件的oBegin对象里的create事件的memoryreinforce变量里设置。
同时,每一毫秒会遗忘掉的强度,可以在源文件的oBegin对象里的create事件的memorydecay变量里设置。
以上的对反射与记忆的模拟。
以下是对需要与欲望的模拟,涉及到评估。
评估函数最大是100000分,也就是100%(也就是1)。对应的局面是五子连棋。
其次是+****+,得分50000.
O****+,得分10000
+***++,得分1000
++**++,得分100
+++*++,得分10.
其中,*是我方棋子,O是空位,+是别人棋子。
用这个方法对机器人方棋子局面进行一次评估,然后减去对人类方局面评估的分数(因为是惩罚,抑制信号用减数),得到的值对每个反射都施加一遍。例如机器人方五子连棋100000分,人类方局面分数为0,所有神经网络里反射都会增到最大值。
但是要是人类方出现了++**++的局势,已经对机器人反射进行了一次抑制信号,又轮到人类时又在另一个地方下出了+++*++,是否要把上次的抑制信号再算进来?
不用,我们有一个记录上次局面总评分的变量。每次把这次评分减去上次评分,得到的就是这一次出现的新评分。在evaluation函数里,e和f记录当前的评分(分别代表兴奋的评分和抑制的评分),g和h记录上次的。对所有反射施加时,施加的强度是e-g和f-h。
接下来是不同功能(动作、感觉)的神经元如何排列。
棋盘的每个格子对应神经网络上的每三个神经元:感受这个格子机器人方的棋子、将机器人的棋子下在这个位置上和感受这个格子人类方的棋子。比如说吧,把这三种神经元对应ABC,神经元会是像这样排列的。
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
分别对应棋盘15*15尺寸。
我还没能把训练成全能神,你们自己去试验吧,我没这个时间。闲着的多跟它下,要是它有什么成果请回复我。
要批评我或者给予我建议和意见的也好,希望我这个贴不会太冷清。

很早就做好了,但是后来进行了不少调整。声明一下,这个程序是对反射算法的模拟与实现,有一些点可能会和反射算法有不同,那是根据我的理解改编的。我不会讲反射算法理论,我这里是对这次实践的解释。要理论请自行搜索。
反射会作为最基础的记忆单位(每个反射链由两个神经元结合在一起)(原谅我,我在源文件里把反射这种对象名称写成了oNeuron,请忽略)储存了一个强度,当一个信号穿过它,新信号值变化成旧信号值*强度。
0<=强度<=1。穿过时,同时会巩固这个强度;也就是增加一定的值,可以在源文件的oBegin对象里的create事件的memoryreinforce变量里设置。
同时,每一毫秒会遗忘掉的强度,可以在源文件的oBegin对象里的create事件的memorydecay变量里设置。
以上的对反射与记忆的模拟。
以下是对需要与欲望的模拟,涉及到评估。
评估函数最大是100000分,也就是100%(也就是1)。对应的局面是五子连棋。
其次是+****+,得分50000.
O****+,得分10000
+***++,得分1000
++**++,得分100
+++*++,得分10.
其中,*是我方棋子,O是空位,+是别人棋子。
用这个方法对机器人方棋子局面进行一次评估,然后减去对人类方局面评估的分数(因为是惩罚,抑制信号用减数),得到的值对每个反射都施加一遍。例如机器人方五子连棋100000分,人类方局面分数为0,所有神经网络里反射都会增到最大值。
但是要是人类方出现了++**++的局势,已经对机器人反射进行了一次抑制信号,又轮到人类时又在另一个地方下出了+++*++,是否要把上次的抑制信号再算进来?
不用,我们有一个记录上次局面总评分的变量。每次把这次评分减去上次评分,得到的就是这一次出现的新评分。在evaluation函数里,e和f记录当前的评分(分别代表兴奋的评分和抑制的评分),g和h记录上次的。对所有反射施加时,施加的强度是e-g和f-h。
接下来是不同功能(动作、感觉)的神经元如何排列。
棋盘的每个格子对应神经网络上的每三个神经元:感受这个格子机器人方的棋子、将机器人的棋子下在这个位置上和感受这个格子人类方的棋子。比如说吧,把这三种神经元对应ABC,神经元会是像这样排列的。
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
分别对应棋盘15*15尺寸。
我还没能把训练成全能神,你们自己去试验吧,我没这个时间。闲着的多跟它下,要是它有什么成果请回复我。
要批评我或者给予我建议和意见的也好,希望我这个贴不会太冷清。


fz五子棋 - 优化2.exe
大小:2.51MB下载:18次转存:6次
fz五子棋 - 优化2.gmk
大小:322.75KB下载:7次转存:6次