class Game:
def __init__(self):
- self._shutable = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
+ self._shutable = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
self._diced = None
self._options = []
self._score = 0
learning_rate = 0.1
discount_factor = 1.0
-states_dim = 147456 # 2^12 * 6^2
-actions_dim = 637 # 12+1 * (6+1)^2
+states_dim = 36864 # 2^10 * 6^2
+actions_dim = 539 # 10+1 * (6+1)^2
num_episodes = 10000000000
def find_state_qid(shutable, diced):
for rod in shutable:
qid += pow(2, rod-1)
for i in range(len(diced)):
- qid += (diced[i]-1) * pow(6, i) * pow(2, 12)
+ qid += (diced[i]-1) * pow(6, i) * pow(2, 10)
return qid
def find_option_qid(option):
qid = 0
for i in range(len(option)):
- qid += option[i] * pow(7, i) * pow(13, len(option)-1)
+ qid += option[i] * pow(7, i) * pow(11, len(option)-1)
return qid
def select_option(opts, qs):
opt_qid = find_option_qid(opt)
opt_qid_pairs.append( [opt, opt_qid] )
opt_qsum += qs[opt_qid]
- random.shuffle(opt_qid_pairs)
+ #random.shuffle(opt_qid_pairs)
ran_pt = random.uniform(0.0, opt_qsum)
decision_pt = 0.0
for opt_qid_pair in opt_qid_pairs:
old_score = g.get_score()
g.shut(opt)
g.dice()
- reward = (g.get_score() - old_score) / 12.0
+ reward = (g.get_score() - old_score) / 11.0
new_state_qid = find_state_qid(g.get_shutable(), g.get_diced())
Q[state_qid, opt_qid] += \
learning_rate * (reward
+ discount_factor * np.max(Q[new_state_qid, :])
- Q[state_qid, opt_qid])
state_qid = new_state_qid
- else:
- Q[state_qid, opt_qid] = 0
+ Q[state_qid, opt_qid] = 0
running_score[0] *= 0.99999999
running_score[0] += g.get_score()
running_score[1] *= 0.99999999