2048游戏通关算法 - 新闻 - SegmentFault



2048游戏通关算法 - 新闻 - SegmentFault

基本的算法是,如果2^k是最大的数字,那么我们努力将2^(k-1)放在它的旁边,然后再把2^(k-2)放在2^(k-1)的旁边,以此类推。

为了达成这一点,我们努力将最大的数字放在角落,然后将第二大的数字放在它旁边,以此类推。将最大的数字放在角落,这样就可以留出足够的空间来组合出更大的数字。

最终我们期望形成这样的图形:

x x x x 4 2 x x 8 16 32 64 1024 512 256 128

这是适用于人类的算法,如果是机器呢?可以使用更强力、复杂的算法。

ovolve编写了一个针对2048的AI程序,可以自动帮你通关。

在机器的眼里,2048是一个回合制的游戏,是一个离散的状态空间,和象棋之类的游戏一样。因此完全可以使用成熟的极小化极大 + α-β剪枝算法。为了提升搜索的效率,考虑了两个因素:

  • 单调性
  • 平滑性

单调性指尽量使各个方向上的数字保持单调(递增或递减),这样可以防止小数字被分割开来。

为了便于合并,相邻的块(tile)差距要尽可能地小,这通过衡量平滑性来判断。

我们可以从图论的角度来解释平滑性。我们可以把游戏的状态看成是G(V, E),其中V代表活动的块的集合,而E代表连接相邻块的边角,边角的差距通过函数c(v1, v2)来衡量。因为推进游戏要求相邻块数值相同,也就是说c(v1, v2)返回0。因此我们需要尽可能地减少相邻块的差距,或者说,确保移动导致各处相邻块c(v1, v2)之和最小。

通过这样的算法,我们能得到大约90%的胜率,同时也有不错的性能。(没人愿意等上半天才看到AI动一步……


Read full article from 2048游戏通关算法 - 新闻 - SegmentFault


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts