---
title: "Solving 2048 Using A* Search"
date: 2014-05-23T00:00:00
slug: solving-2048-using-a-search

---
ne of my recent projects has been to attempt to solve the game 2048 using A* Search - it all started from a bet with my girlfriend about who could get the highest score, and I decided I’d “cheat” and just get my computer to do it for me. It didn’t work, she still managed to get to the 2048 tile first.

To start with, I wrote a command-line version of the 2048 game in Java - it was fairly simple, if a little unncessary, and worked well - I even had a little play of it before implementing the A* algorithm, and it was fairly fun to play. There were no real issues here, just a small amount of confusion about how to implement the “gravity” style of tile movement, but a little thought sorted that one out.

Then it came to actually writing the A* Search. I was lucky, in that I had a template from a previous University assignment to work from. All there really was to do was swap a few classes and methods, and change the heuristics.

## The Heuristic

The heuristic I am using at the minute is a less-than-optimal one, but it was the first one I tried. I was actually quite surprised at how effective it was.

```
(0 - sum of tiles) + solution depth
```

Like I say, this is not optimal, and certainly does not provide the highest-scoring solutions. But it does give fairly high scores, and certainly finds the 2048 tile - and even the 4096 tile.

Oher possible heuristics include:
* (0 - score) + solution depth
* Difference between largest tile and 2048 tile
* Mean value of tiles

There are a lot of options, and I have seen some impressive implementations. I look forward to improving this further.

## The Pseudocode
Here’s a snippet of pseudocode for the A* algorithm:

```
While queue is not empty
   if game is solved
      print current state
      end running
   else
      get next state from queue
      add children of current state to queue
endwhile
```

## Screenshots

![Screenshot of the output of the 2048 game, with the text "Solution Found!", and an in-progress 2048 game with a maximum score of 2048](./src/images/2048_29.png)

![Screenshot of the output of the 2048 game, with the text "Solution Found!", and an in-progress 2048 game with a maximum score of 4096](./src/images/4096_28.png)
