neuro_gammon 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,109 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
7
+
8
+ require 'test/unit'
9
+ require 'neuro_gammon/dice'
10
+
11
+ class TestDice < Test::Unit::TestCase
12
+ include NeuroGammon
13
+ def setup
14
+ @dice=Dice.new
15
+ class << @dice
16
+ def set=values
17
+ @values=values
18
+ check_state
19
+ end
20
+ end
21
+ end
22
+
23
+ def test_init
24
+
25
+ assert_equal true,@dice[0]>0 && @dice[0]<=6
26
+ assert_equal true,@dice[1]>0 && @dice[1]<=6
27
+ end
28
+
29
+ def test_roll
30
+
31
+ 10.downto(0) do
32
+ @dice.roll
33
+ assert_equal true,@dice[0]>0 && @dice[0]<=6
34
+ assert_equal true,@dice[1]>0 && @dice[1]<=6
35
+ end
36
+ end
37
+
38
+ def test_double
39
+
40
+ @dice.set=[1,2]
41
+ assert_not_nil @dice.double?
42
+ assert_equal false,@dice.double?
43
+ @dice.set=[2,2]
44
+ assert_not_nil @dice.double?
45
+ assert_equal true,@dice.double?
46
+ end
47
+
48
+ def test_to_a
49
+
50
+ @dice.set=[1,2]
51
+ assert_equal [1,2],@dice.to_a
52
+ @dice.set=[3,3]
53
+ assert @dice.double?
54
+ assert_equal [3,3,3,3],@dice.to_a
55
+ end
56
+
57
+ def test_each
58
+
59
+ @dice.set=[1,6]
60
+ t=[]
61
+ @dice.each {|v| t << v}
62
+ assert_equal [1,6],t
63
+
64
+ t=[]
65
+ @dice.each do |v|
66
+ t<<v
67
+ end
68
+ assert_equal [1,6],t
69
+ end
70
+
71
+ def test_use
72
+
73
+ @dice.set=[1,2]
74
+ @dice.use!(1)
75
+ assert_equal [2],@dice.to_a
76
+
77
+ @dice.set=[4,3]
78
+ @dice.use!(3)
79
+ assert_equal [4],@dice.to_a
80
+ @dice.use!(4)
81
+ assert_equal [],@dice.to_a
82
+
83
+ @dice.set=[5,5,5,5]
84
+ @dice.use!(5)
85
+ assert_equal [5,5,5],@dice.to_a
86
+ @dice.use!(5)
87
+ assert_equal [5,5],@dice.to_a
88
+ @dice.use!(5)
89
+ assert_equal [5],@dice.to_a
90
+ @dice.use!(5)
91
+ assert_equal [],@dice.to_a
92
+
93
+ @dice.set=[1,2]
94
+ assert_raise(Exception) {@dice.use!(5)}
95
+
96
+ end
97
+
98
+ def test_use2
99
+ while @dice.double?
100
+ @dice.roll
101
+ end
102
+ assert_equal 2,@dice.to_a.size
103
+ @dice.use!(@dice[0])
104
+ assert_equal 1,@dice.to_a.size
105
+ @dice.use!(@dice[0])
106
+ assert_equal 0,@dice.to_a.size
107
+ end
108
+
109
+ end
@@ -0,0 +1,50 @@
1
+ require "test/unit"
2
+ require 'neuro_gammon/fann_player'
3
+ require 'neuro_gammon/board'
4
+ require 'neuro_gammon/dice'
5
+
6
+ require 'yaml'
7
+
8
+ class TestFannPlayer < Test::Unit::TestCase
9
+
10
+ include NeuroGammon
11
+
12
+ def setup
13
+ @board=Board.new
14
+ @dice=Dice.new
15
+ @player=FannPlayer.new
16
+ end
17
+
18
+ def test_init
19
+ assert_not_nil @player
20
+ end
21
+
22
+ def test_suggest_move
23
+ moves=@player.suggest_move(@board,@dice,Board::BLACK)
24
+ assert_not_nil moves
25
+ assert !moves.empty?
26
+ end
27
+
28
+ def test_to_and_from_yaml
29
+ moves=@player.suggest_move(@board,@dice,Board::BLACK)
30
+
31
+ #dump and load from yaml and check the suggested moves are the same
32
+ yaml=YAML::dump(@player)
33
+
34
+ assert_not_nil yaml
35
+ player2=FannPlayer.from_yaml(yaml)
36
+
37
+ moves2=player2.suggest_move(@board,@dice,Board::BLACK)
38
+ assert_equal moves,moves2
39
+ end
40
+
41
+ #not really a unit test :)
42
+ def test_play_and_learn
43
+ player2=FannPlayer.new
44
+ ge = GameEngine.new(@player,player2)
45
+ game = ge.play_game
46
+ @player.learn!([game])
47
+ end
48
+
49
+
50
+ end
@@ -0,0 +1,111 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
7
+
8
+ require 'test/unit'
9
+ require 'neuro_gammon/game'
10
+ require 'neuro_gammon/random_player'
11
+ require 'neuro_gammon/board'
12
+ require 'neuro_gammon/dice'
13
+
14
+ class TestGame < Test::Unit::TestCase
15
+ include NeuroGammon
16
+ def test_init
17
+ b_p=RandomPlayer.new
18
+ w_p=RandomPlayer.new
19
+ g=Game.new w_p,b_p
20
+
21
+ assert_equal w_p,g.white_player
22
+ assert_equal b_p,g.black_player
23
+ assert_equal [],g.board_states
24
+ assert_equal [],g.moves
25
+ assert_equal [],g.dice_states
26
+ end
27
+
28
+ def test_board_state
29
+ b_p=RandomPlayer.new
30
+ w_p=RandomPlayer.new
31
+ g=Game.new w_p,b_p
32
+
33
+ b=[1,2,3]
34
+ g.add_board_state(b)
35
+ b[0]=5
36
+ g.add_board_state(b)
37
+
38
+ assert_equal [1,2,3],g.board_states[0]
39
+ assert_equal [5,2,3],g.board_states[1]
40
+ end
41
+
42
+ def test_moves
43
+ b_p=RandomPlayer.new
44
+ w_p=RandomPlayer.new
45
+ g=Game.new w_p,b_p
46
+
47
+ m=[1,2]
48
+ g.add_move m
49
+ m[0]=4
50
+ m[1]=7
51
+ g.add_move m
52
+
53
+ assert_equal [1,2],g.moves[0]
54
+ assert_equal [4,7],g.moves[1]
55
+ end
56
+
57
+ def test_dice
58
+ b_p=RandomPlayer.new
59
+ w_p=RandomPlayer.new
60
+ g=Game.new w_p,b_p
61
+
62
+ d=[1,2]
63
+ g.add_dice_state d
64
+ d[0]=6
65
+ d[1]=6
66
+ g.add_dice_state d
67
+
68
+ assert_equal [1,2],g.dice_states[0]
69
+ assert_equal [6,6],g.dice_states[1]
70
+ end
71
+
72
+ def test_winner_colour
73
+ b_p=RandomPlayer.new
74
+ w_p=RandomPlayer.new
75
+ g=Game.new w_p,b_p
76
+
77
+ assert_nil g.winner_colour
78
+
79
+ g.winner_colour=Board::BLACK
80
+
81
+ assert_equal Board::BLACK,g.winner_colour
82
+ end
83
+
84
+ def test_colour_moved
85
+ b_p=RandomPlayer.new
86
+ w_p=RandomPlayer.new
87
+ g=Game.new w_p,b_p
88
+
89
+ g.add_move([0,2])
90
+ g.add_move([23,22])
91
+
92
+ #bear off
93
+ g.add_move([22,-1])
94
+ g.add_move([3,-1])
95
+
96
+ #come on
97
+ g.add_move([-1,4])
98
+ g.add_move([-1,22])
99
+
100
+ assert_equal g.moves.size,g.colour_moved.size
101
+
102
+ assert_equal Board::BLACK,g.colour_moved[0]
103
+ assert_equal Board::WHITE,g.colour_moved[1]
104
+
105
+ assert_equal Board::BLACK,g.colour_moved[2]
106
+ assert_equal Board::WHITE,g.colour_moved[3]
107
+
108
+ assert_equal Board::BLACK,g.colour_moved[4]
109
+ assert_equal Board::WHITE,g.colour_moved[5]
110
+ end
111
+ end
@@ -0,0 +1,35 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
7
+
8
+ require 'test/unit'
9
+ require 'neuro_gammon/game_engine'
10
+ require 'neuro_gammon/random_player'
11
+ require 'neuro_gammon/game'
12
+ require 'neuro_gammon/fann_player'
13
+
14
+ class TestGameEngine < Test::Unit::TestCase
15
+ include NeuroGammon
16
+ def test_init
17
+ p1=RandomPlayer.new
18
+ p2=RandomPlayer.new
19
+ eng=GameEngine.new p1,p2
20
+ assert_equal p1,eng.white_player
21
+ assert_equal p2,eng.black_player
22
+ end
23
+
24
+ def test_game_state
25
+ srand(100) #ensures the predictedly dice differ at the start
26
+ eng=GameEngine.new(RandomPlayer.new, FannPlayer.new)
27
+ game=eng.play_game
28
+ assert_equal [[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2],[0,0]],game.board_states[0]
29
+ assert_not_equal game.board_states[0],game.board_states[1]
30
+ assert_not_equal game.moves[0],game.moves[1]
31
+ assert_not_equal game.dice_states[0],game.dice_states[1]
32
+ assert_equal game.moves.size,game.colour_moved.size
33
+ assert_not_nil eng.winner
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: neuro_gammon
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 7
9
+ - 0
10
+ version: 0.7.0
11
+ platform: ruby
12
+ authors:
13
+ - Stu
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-04 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: uuidtools
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 9
30
+ segments:
31
+ - 2
32
+ - 1
33
+ - 1
34
+ version: 2.1.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: ruby-fann
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 21
46
+ segments:
47
+ - 1
48
+ - 1
49
+ - 3
50
+ version: 1.1.3
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ description:
54
+ email: sowen@stuzart.org
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files:
60
+ - README
61
+ files:
62
+ - .gitignore
63
+ - .hgignore
64
+ - .loadpath
65
+ - .project
66
+ - README
67
+ - Rakefile
68
+ - VERSION
69
+ - fred.net
70
+ - lib/main.rb
71
+ - lib/main2.rb
72
+ - lib/neuro_gammon.rb
73
+ - lib/neuro_gammon/base_neural_player.rb
74
+ - lib/neuro_gammon/base_player.rb
75
+ - lib/neuro_gammon/best_of_tournament_engine.rb
76
+ - lib/neuro_gammon/board.rb
77
+ - lib/neuro_gammon/board_tools.rb
78
+ - lib/neuro_gammon/dice.rb
79
+ - lib/neuro_gammon/fann_player.rb
80
+ - lib/neuro_gammon/game.rb
81
+ - lib/neuro_gammon/game_engine.rb
82
+ - lib/neuro_gammon/lazy_player.rb
83
+ - lib/neuro_gammon/random_player.rb
84
+ - nbproject/private/rake-t.txt
85
+ - nbproject/project.properties
86
+ - nbproject/project.xml
87
+ - neuro_gammon.gemspec
88
+ - test/test_base_player.rb
89
+ - test/test_board.rb
90
+ - test/test_board_tools.rb
91
+ - test/test_dice.rb
92
+ - test/test_fann_player.rb
93
+ - test/test_game.rb
94
+ - test/test_game_engine.rb
95
+ has_rdoc: true
96
+ homepage:
97
+ licenses: []
98
+
99
+ post_install_message:
100
+ rdoc_options:
101
+ - --charset=UTF-8
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ hash: 3
110
+ segments:
111
+ - 0
112
+ version: "0"
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 3
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ requirements: []
123
+
124
+ rubyforge_project:
125
+ rubygems_version: 1.3.7
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: Neural Net Backgammon utility library - just a bit of messing about - nothing serious.
129
+ test_files:
130
+ - test/test_game_engine.rb
131
+ - test/test_dice.rb
132
+ - test/test_base_player.rb
133
+ - test/test_board_tools.rb
134
+ - test/test_fann_player.rb
135
+ - test/test_game.rb
136
+ - test/test_board.rb