Exemple #1
0
    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()
Exemple #2
0
    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()