From 8571bc0c18f4a42bd1c8f34a5a36bcd9678b3f14 Mon Sep 17 00:00:00 2001
From: Sam Moore <matches@ucc.asn.au>
Date: Thu, 21 Mar 2013 12:27:51 +0800
Subject: [PATCH] Fixed bug with probabilities

Pretty terrible, introduced weeks ago when trying to improve efficiency.
Also fixed bug with --reveal switch.

Agent Bishop should play better as a result of this (the former not the latter).
---
 qchess/qchess.py    | 26 ++++++++++++++------------
 qchess/src/board.py | 17 ++++++++---------
 qchess/src/piece.py |  7 +++++--
 3 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/qchess/qchess.py b/qchess/qchess.py
index d139462..8deeddb 100755
--- a/qchess/qchess.py
+++ b/qchess/qchess.py
@@ -20,7 +20,7 @@ class Piece():
 		
 		self.move_pattern = None
 		self.coverage = None
-		self.possible_moves = None
+		self.possible_moves = {}
 		
 
 	def init_from_copy(self, c):
@@ -59,7 +59,10 @@ class Piece():
 		# Draw the two possible types underneath the current_type image
 		for i in range(len(self.types)):
 			if always_reveal_states == True or self.types[i][0] != '?':
-				img = small_images[self.colour][self.types[i]]
+				if self.types[i][0] == '?':
+					img = small_images[self.colour][self.types[i][1:]]
+				else:
+					img = small_images[self.colour][self.types[i]]
 			else:
 				img = small_images[self.colour]["unknown"] # If the type hasn't been revealed, show a placeholder
 
@@ -405,7 +408,7 @@ class Board():
 		
 		for i in range(len(p.types)):
 			t = p.types[i]
-			prob = 0.5
+			prob = 1.0 / float(len(p.types))
 			if t == "unknown" or p.types[i][0] == '?':
 				total_types = 0
 				for t2 in self.unrevealed_types[p.colour].keys():
@@ -413,17 +416,17 @@ class Board():
 				
 				for t2 in self.unrevealed_types[p.colour].keys():
 					prob2 = float(self.unrevealed_types[p.colour][t2]) / float(total_types)
-					p.current_type = t2
-					for point in self.possible_moves(p, reject_allied):
+					#p.current_type = t2
+					for point in self.possible_moves(p, reject_allied, state=t2):
 						result[point[0]][point[1]] += prob2 * prob
 				
 			else:
-				p.current_type = t
-				for point in self.possible_moves(p, reject_allied):
-					result[point[0]][point[1]] += prob
+				#p.current_type = t
+				for point in self.possible_moves(p, reject_allied, state=t):
+						result[point[0]][point[1]] += prob
 		
 		#self.verify()
-		p.current_type = "unknown"
+		#p.current_type = "unknown"
 		return result
 
 	def prob_is_type(self, p, state):
@@ -461,8 +464,7 @@ class Board():
 			p.current_type = old_type
 			return result
 		
-		if p.possible_moves != None:
-			return p.possible_moves
+		
 		
 		
 		result = []
@@ -2629,4 +2631,4 @@ if __name__ == "__main__":
 		sys.exit(102)
 
 # --- main.py --- #
-# EOF - created from make on Tue Mar 19 07:36:32 WST 2013
+# EOF - created from make on Thu Mar 21 12:27:36 WST 2013
diff --git a/qchess/src/board.py b/qchess/src/board.py
index 5f75d39..9ec14e1 100644
--- a/qchess/src/board.py
+++ b/qchess/src/board.py
@@ -308,7 +308,7 @@ class Board():
 		
 		for i in range(len(p.types)):
 			t = p.types[i]
-			prob = 0.5
+			prob = 1.0 / float(len(p.types))
 			if t == "unknown" or p.types[i][0] == '?':
 				total_types = 0
 				for t2 in self.unrevealed_types[p.colour].keys():
@@ -316,17 +316,17 @@ class Board():
 				
 				for t2 in self.unrevealed_types[p.colour].keys():
 					prob2 = float(self.unrevealed_types[p.colour][t2]) / float(total_types)
-					p.current_type = t2
-					for point in self.possible_moves(p, reject_allied):
+					#p.current_type = t2
+					for point in self.possible_moves(p, reject_allied, state=t2):
 						result[point[0]][point[1]] += prob2 * prob
 				
 			else:
-				p.current_type = t
-				for point in self.possible_moves(p, reject_allied):
-					result[point[0]][point[1]] += prob
+				#p.current_type = t
+				for point in self.possible_moves(p, reject_allied, state=t):
+						result[point[0]][point[1]] += prob
 		
 		#self.verify()
-		p.current_type = "unknown"
+		#p.current_type = "unknown"
 		return result
 
 	def prob_is_type(self, p, state):
@@ -364,8 +364,7 @@ class Board():
 			p.current_type = old_type
 			return result
 		
-		if p.possible_moves != None:
-			return p.possible_moves
+		
 		
 		
 		result = []
diff --git a/qchess/src/piece.py b/qchess/src/piece.py
index 162e82e..a2faf9d 100644
--- a/qchess/src/piece.py
+++ b/qchess/src/piece.py
@@ -19,7 +19,7 @@ class Piece():
 		
 		self.move_pattern = None
 		self.coverage = None
-		self.possible_moves = None
+		self.possible_moves = {}
 		
 
 	def init_from_copy(self, c):
@@ -58,7 +58,10 @@ class Piece():
 		# Draw the two possible types underneath the current_type image
 		for i in range(len(self.types)):
 			if always_reveal_states == True or self.types[i][0] != '?':
-				img = small_images[self.colour][self.types[i]]
+				if self.types[i][0] == '?':
+					img = small_images[self.colour][self.types[i][1:]]
+				else:
+					img = small_images[self.colour][self.types[i]]
 			else:
 				img = small_images[self.colour]["unknown"] # If the type hasn't been revealed, show a placeholder
 
-- 
GitLab