def reward(self, tcube): # def reward(self): if utils.perc_solved_cube(self.cube) == 1: return 1000, True return (utils.perc_solved_cube(self.cube) - utils.perc_solved_cube(tcube)) * 100, False
transformation = [choice(list(action_map_small.keys())) for z in range(saa)] my_formula = pc.Formula(transformation) cube(my_formula) run = True print("********************************************************") print("START : ") print([cube]) print("********************************************************") time.sleep(3) while run: if perc_solved_cube(cube) == 1: run = False print("Solved") break # Take the biggest Q value (= the best action) flat_cube = np.array(flatten_1d_b(cube)).reshape([1, 324]) Qs = sess.run(myAgent.output, feed_dict = {myAgent.state_in: flat_cube}) # print("Ideal : "+str(my_formula.reverse())) print("Q values:") print(Qs) # Take the biggest Q value (= the best action) choice = np.argmax(Qs) # lookup = ["R", "L","D","U","B","F","R'", "L'","D'","U'","B'","F'"] #We are not accounting for half turns
def solve(Cube): file_path = "auto.h5" model = get_model() model.load_weights(file_path) cube = Cube cube.score = 0 list_sequences = [[cube]] existing_cubes = set() action_list = [] success = False for j in range(50): X = [flatten_1d_b(x[-1]) for x in list_sequences] value, policy = model.predict(np.array(X), batch_size=1024) new_list_sequences = [] for x, policy in zip(list_sequences, policy): new_sequences = [x + [x[-1].copy()(action)] for action in action_map] pred = np.argsort(policy) take_action = list(action_map.keys())[pred[-1]] # append action action_list.append(take_action) cube_1 = x[-1].copy()(list(action_map.keys())[pred[-1]]) new_list_sequences.append(x + [cube_1]) # print("new_list_sequences", len(new_list_sequences)) last_states_flat = [flatten_1d_b(x[-1]) for x in new_list_sequences] value, _ = model.predict(np.array(last_states_flat), batch_size=1024) value = value.ravel().tolist() for x, v in zip(new_list_sequences, value): x[-1].score = v if str(x[-1]) not in existing_cubes else -1 new_list_sequences.sort(key=lambda x: x[-1].score , reverse=True) new_list_sequences = new_list_sequences[:100] existing_cubes.update(set([str(x[-1]) for x in new_list_sequences])) list_sequences = new_list_sequences list_sequences.sort(key=lambda x: perc_solved_cube(x[-1]), reverse=True) prec = perc_solved_cube((list_sequences[0][-1])) if prec == 1: success = True break return success, action_list
new_list_sequences.append(x + [cube_1]) new_list_sequences.append(x + [cube_2]) print("new_list_sequences", len(new_list_sequences)) last_states_flat = [flatten_1d_b(x[-1]) for x in new_list_sequences] value, _ = model.predict(np.array(last_states_flat), batch_size=1024) value = value.ravel().tolist() for x, v in zip(new_list_sequences, value): x[-1].score = v if str(x[-1]) not in existing_cubes else -1 new_list_sequences.sort(key=lambda x: x[-1].score, reverse=True) new_list_sequences = new_list_sequences[:100] existing_cubes.update(set([str(x[-1]) for x in new_list_sequences])) list_sequences = new_list_sequences list_sequences.sort(key=lambda x: perc_solved_cube(x[-1]), reverse=True) prec = perc_solved_cube((list_sequences[0][-1])) print(prec) if prec == 1: break print(perc_solved_cube(list_sequences[0][-1])) print(list_sequences[0][-1])
last_states_flat = [flatten_1d_b(x[-1]) for x in new_list_sequences] value, _ = model.predict(np.array(last_states_flat), batch_size=1024) value = value.ravel().tolist() for x, v in zip(new_list_sequences, value): x[-1].score = v if str(x[-1]) not in existing_cubes else -1 new_list_sequences.sort(key=lambda x: x[-1].score , reverse=True) new_list_sequences = new_list_sequences[:100] existing_cubes.update(set([str(x[-1]) for x in new_list_sequences])) list_sequences = new_list_sequences list_sequences.sort(key=lambda x: perc_solved_cube(x[-1]), reverse=True) #print(list_sequences[0]) preview_cube(take_action) print([preview_cube]) prec = perc_solved_cube((list_sequences[0][-1])) #print(prec) if prec == 1: break #print(list_sequences[0]) #print(perc_solved_cube(list_sequences[0][-1]))
import utils #https://github.com/adrianliaw/PyCuber/blob/version2/examples/sample_program.py #To declare a cube object mycube = pc.Cube() st = utils.flatten_1d_b(mycube) print(st) # k=["R","S"] # #Formula is for set of actions taken # my_formula = pc.Formula(k[0]) # mycube(my_formula) # print(mycube) # #Reversing the actions # my_formula.reverse() # #A object for Algo alg = pc.Formula() #Random arrangement random_alg = alg.random() # random_alg = random_alg[:10] # print(random_alg) mycube(random_alg) print(utils.perc_solved_cube(mycube)) print(mycube)