根据Karpath的RL教程,我正在尝试为游戏2048实现一个策略网络代理。我知道算法将需要玩一些游戏,记住输入和采取的行动,规范化和平均中心的结局分数。然而,我在损失函数的设计上陷入了困境。如何正确地鼓励最终得分较高的行为,并阻止最终得分较低的行为?
当在输出层使用softmax时,我沿着这个设计了一些东西:
损失=总和(行动-净产出)*奖励)
其中,操作采用一种热格式。然而,这一损失似乎没有多大作用,网络没有学到什么。我在PyTorch中的完整代码(没有游戏环境)在这里。
对于代码中的策略网络,我认为您需要如下内容:
损失=-(日志(行动概率)*奖励)
其中,action_probability是网络在该时间步中执行的操作的输出。
例如,如果您的网络输出了10%的执行该操作的机会,但它提供了10的奖励,那么您的损失将是:-(log(0.1)*10)
,等于10。
但是,如果您的网络已经认为这是一个好的举动,并且输出了90%的采取该行动的机会,那么您的-log(0.9)*10)
大约等于0.45,对网络的影响较小。
值得注意的是,PyTorch的log
功能在数值上并不稳定,您最好在网络的最后一层使用logsoftmax
。
实现一个简单的2048小游戏。手指上下左右滑动屏幕可以移动方块。 2048游戏是什么:每次控制所有方块向同一个方向运动,两个相同数字的方块撞在一起之后合并成为他们的和,每次操作之后会在空白的方格处随机生成一个2或者4,最终得到一个“2048”的方块就算胜利了。如果16个格子全部填满并且相邻的格子都不相同也就是无法移动的话,那么游戏就会结束。
此为在原版2048的基础上,添加了电脑AI解题,并稍微修改了UI添加按钮来触发AI。 AI的核心在/js/myAI.js里,相关函数在window.myPlugin里 核心算法是用dfs搜3步后使代价函数window.myPlugin.evalCost期望值最小的走法, 代价函数的设计目的是让块尽量按由大到小顺序堆叠在右上角,并合并。 实验效果是基本能保证到2048,偶尔到4096甚至8192(概率较小)。
本文向大家介绍javascript制作2048游戏,包括了javascript制作2048游戏的使用技巧和注意事项,需要的朋友参考一下 2048.html 2048.css 2048.js 以上所诉就是本文的全部内容了,希望大家能够喜欢。
本文向大家介绍javascript版2048小游戏,包括了javascript版2048小游戏的使用技巧和注意事项,需要的朋友参考一下 没有技术含量,只是用来练习代码逻辑的。为了代码结构清晰,我把逻辑控制部分写在全局变量里,用户界面操作封装在UI对象里,大概就这样了。仅供参考。工作时候,我的编码风格有人吐槽太乱了,所以我想试着写一个不是那么乱的东西出来。。 以上就是本文所述的全部内容了,希望大家能
本文向大家介绍Javascript编写2048小游戏,包括了Javascript编写2048小游戏的使用技巧和注意事项,需要的朋友参考一下 去年2048很火, 本来我也没玩过, 同事说如果用JS写2048 只要100多行代码; 今天试了一下, 逻辑也不复杂, 主要是数据构造函数上的数据的各种操作, 然后通过重新渲染DOM实现界面的更新, 整体不复杂, JS,css,和HTML合起来就300
本文向大家介绍python实现2048小游戏,包括了python实现2048小游戏的使用技巧和注意事项,需要的朋友参考一下 2048的python实现。修改自某网友的代码,解决了原网友版本的两个小bug: 1. 原版游戏每次只消除一次,而不是递归消除。如 [2 ,2 ,2 ,2] 左移动的话应该是 [4, 4, 0, 0] , 而不是[8 , 0 , 0 ,0] 2. 对游戏结束的侦测有bug,已