neuro_gammon 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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