AI White Tiles

Teach the AI for about 1000 games.

HTML

<script src="https://cs.stanford.edu/people/karpathy/convnetjs/build/convnet.js"></script>
<script src="https://cs.stanford.edu/people/karpathy/convnetjs/build/util.js"></script>
<script src="https://cs.stanford.edu/people/karpathy/convnetjs/build/vis.js"></script>
<script src="https://cs.stanford.edu/people/karpathy/convnetjs/build/deepqlearn.js"></script>
<a href="javascript:learn()">Start Learning</a>
<a href="javascript:noLearn()">Test AI</a>
<p id="stats"></p>
<canvas id="game" width="450" height="150"></canvas>

CSS

* {
  background: black;
  color: white;
}

JavaScript

var num_inputs = 3;
var num_actions = 3;
var temporal_window = 1;
var network_size = num_inputs * temporal_window + num_actions * temporal_window + num_inputs;

var layer_defs = [];
layer_defs.push({
  type: 'input',
  out_sx: 1,
  out_sy: 1,
  out_depth: network_size
});
layer_defs.push({
  type: 'fc',
  num_neurons: 3,
  activation: 'relu'
});
//layer_defs.push({type:'fc', num_neurons: 3, activation:'relu'});
layer_defs.push({
  type: 'regression',
  num_neurons: num_actions
});


brain = new deepqlearn.Brain(num_inputs, num_actions, {
  temporal_window: temporal_window,
  layer_defs: layer_defs,
    epsilon_test_time: 0.00
});
brain.gamma=0.5;
pos = 1;
var gamesPlayed = 0;
var score = 0;
var scoreMax = 0;
result = -1;
ctx = document.getElementById("game").getContext("2d")

data = [
  [0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 2, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0]
];
//data[0].concat(data[1]).concat(data[2])


ni = function() {
  score++;
  brain.backward(score)

  think = [
  	data[pos - 1 < 0 ? 2 : pos - 1][3]==1?1:0,
    data[pos][3]==1?1:0,
    data[pos + 1 > 2 ? 0 : pos + 1][3]==1?1:0,
    data[pos - 1 < 0 ? 2 : pos - 1][3]==3?1:0,
    data[pos][3]==3?1:0,
    data[pos + 1 > 2 ? 0 : pos + 1][3]==3?1:0
  ]
  result = brain.forward(think);
  data[pos][2] = 0
  switch (result) {
    case 0:
      pos++;
      if (pos > 2) {
        pos = 0
      }
      break;
    case 2:
      pos--
      if (pos < 0) {
        pos = 2
      }
  }
  data[pos][2] = 2
  for (var i = 0; i < 3; i++) {
    for (var o = 0; o < 9; o++) {
      switch (data[i][o]) {
        case 1:
          data[i][o] = 0
          try {
            data[i][o - 1] = 1
          } catch (e) {}

          /*if (i == pos && o == 2) {
          	gamesPlayed++;
            scoreMax=Math.max(scoreMax,score)
            disp();
            score=0;
            data = [
              [0, 0, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0, 0, 0, 0, 0]
 ...