def npi_program_interface(self, env, program: Program, arguments: IntegerArguments, depth=0): if self.max_depth < depth or self.max_step < self.steps: raise StopIteration() self.model.enter_function() result = StepOutput(0, None, None) while result.r < self.alpha: self.steps += 1 if self.max_step < self.steps: raise StopIteration() env_observation = env.get_observation() result = self.model.step(env_observation, program, arguments.copy()) if self.recording: self.step_list.append(StepInOut(StepInput(env_observation, program, arguments.copy()), result)) self.display_information(program, arguments, result, depth) if program.output_to_env: program.do(env, arguments.copy()) self.display_env(env) else: if result.program: # modify original algorithm self.npi_program_interface(env, result.program, result.arguments, depth=depth+1) self.model.exit_function()
def npi_program_interface(self, env, program: Program, arguments: IntegerArguments, depth=0): if self.max_depth < depth or self.max_step < self.steps: if self.max_step < self.steps: print("stop iteration becasue there are too many steps") self.terminal.add_log("stop iteration becasue it's too deep") if self.max_depth < depth: print("stop iteration becasue there are too many steps") self.terminal.add_log("stop iteration becasue it's too deep") raise StopIteration() self.model.enter_function() # self.terminal.add_log("enter function") result = StepOutput(0, None, None) # self.terminal.add_log(result) while result.r < self.alpha: self.terminal.add_log("in a function") self.steps += 1 if self.max_step < self.steps: print("stop iteration becasue there are too many steps") self.terminal.add_log( "stop iteration becasue there are too many steps") raise StopIteration() env_observation = env.get_observation() #self.terminal.add_log(env_observation) # run our model for one step # result is a StepOutput result = self.model.step(env_observation, program, arguments.copy()) self.terminal.add_log("after excuting funciton") # self.terminal.add_log(result) # what's the intuition of recording if self.recording: self.step_list.append( StepInOut( StepInput(env_observation, program, arguments.copy()), result)) self.display_information(program, arguments, result, depth) if program.output_to_env: # self.terminal.add_log("output_to_env") program.do(env, arguments.copy()) self.display_env(env) else: self.terminal.add_log(str(program)) if result.program: # modify original algorithm # self.terminal.add_log("execute sub_program") self.npi_program_interface(env, result.program, result.arguments, depth=depth + 1) self.terminal.add_log("exit funtion") self.model.exit_function()