def test_current_params(actor: base_actor, log_dir: str, episode: int): steps = input("How many steps for this sample?: ") if steps == "": utils.notice("default steps {}".format(config.params["default_sample_steps"])) steps = config.params["default_sample_steps"] # Record during sampling sim_distance_file = DataCSVSaver( "{}/train_result_ep{}_distance.txt".format(log_dir, episode), ("step", "distance") ) sim_phase_diffs_file = DataCSVSaver( "{}/train_result_ep{}_phase_diffs.txt".format(log_dir, episode), ["step"] + ["phi_{}".format(i) for i in range(config.oscillators)] ) sim_actions_file = DataCSVSaver( "{}/train_result_ep{}_actions.txt".format(log_dir, episode), ["step"] + ["action_{}".format(i) for i in range(config.oscillators)] ) sim_frictions_file = DataCSVSaver( "{}/train_result_ep{}_frictions.txt".format(log_dir, episode), ["step"] + ["friction_{}".format(i) for i in range(config.somites)] ) caterpillar = Caterpillar(config.somites, mode="default") for step in range(int(steps)): try: _, action = caterpillar_runner.observe_and_act(actor, caterpillar, []) caterpillar.step(step, int(1 / config.params["time_dalte"] / 10)) except Exception: continue else: # Save data sim_distance_file.append_data(step, caterpillar.moved_distance()) sim_phase_diffs_file.append_data(step, *caterpillar.phases_from_base()) sim_actions_file.append_data(step, *action) frictions = caterpillar.frictions() sim_frictions_file.append_data(step, *frictions) print("Moved distance:", caterpillar.moved_distance()) caterpillar.save_simulation("{}/train_result_ep{}.sim".format(log_dir, episode))
def observe_and_act(actor: base_actor.BaseActor, caterpillar: Caterpillar, disable_list: list, broken_value=0, episode=None): assert np.all(np.array(disable_list) < config.somites) if disable_list is None: disable_list = [] mask = np.ones(config.somites) mask[disable_list] = 0 bias = np.zeros(config.somites) bias[disable_list] = broken_value frictions = caterpillar.frictions() phis = caterpillar.phis tensions = caterpillar.tensions() state = np.concatenate([frictions * mask + bias, phis, tensions]) action = actor.get_action(state) caterpillar.feedback_phis(action) observation = (phis, frictions, tensions) return observation, action