コード例 #1
0
    class Google(State):

        basic_info = StateVariable(dtype=PersonBasicInfo,
                                   default_val=None,
                                   help="basic person info from Google")
        scholar_info = StateVariable(dtype=ScholarInfo,
                                     default_val=None,
                                     help="scholar info from google scholar")
コード例 #2
0
class ColabPoolEnvStateQueryMessage(State):

    name = StateVariable(
        dtype=str,
        default_val=None,
        help="name of the the name of the pool whose state is queried")
    message_id = StateVariable(dtype=str,
                               default_val=None,
                               help="id used to identify response messages")
コード例 #3
0
    def __init__(self):
        super().__init__()

        self.stateful_srv_clct_ref = DCERef(StatefulServiceCLCT, write=True, read=False)
        self.stateless_srv_clct_ref = DCERef(StatelessServiceCLCT, write=True, read=False)

        self.service_to_add = StateVariable(value_cls=SrvWithPodName, default_val=None, help="需要添加的service信息")
コード例 #4
0
ファイル: guess_number.py プロジェクト: laigen/gs-framework
class GuessNumberAgent(Agent):
    """基于 rule base 做的一个猜数字的agent"""

    env = ObjectRef.bind_at_runtime()
    action = StateVariable(dtype=int, default_val=0, help="action")

    def __init__(self):
        super().__init__()
        self._upper_bound = 1000  # 这个可以认为是 agent 的内部变量,可以先不用成为 state variable , 更像是 model parameter
        self._lower_bound = 0

    @state_var_change_handler(state_vars="init_action_space", state_var_source=env)
    @pick_one_change
    def on_init_action_space(self, state_var_owner_pk: Any, state_var_name: str, state_var_value: Any):
        self._upper_bound = state_var_value.upper_bound
        self._lower_bound = state_var_value.lower_bound

    @state_var_change_handler(state_vars="state", state_var_source=env)
    @pick_one_change
    def on_env_state_changed(self, state_var_owner_pk: Any, state_var_name: str, state_var_value: Any):
        if state_var_value > 0:  # 猜的数字大了,调整上边界
            self._upper_bound = self.action.VALUE
            self.action.VALUE = get_random_int(self._lower_bound, self._upper_bound)
        elif state_var_value < 0:  # 猜的数字小了,调整下边界
            self._lower_bound = self.action.VALUE
            self.action.VALUE = get_random_int(self._lower_bound, self._upper_bound)
        else:
            self.action.VALUE = get_random_int(self._lower_bound, self._upper_bound)
        logger.info(f"[Agent] guess in range [{self._lower_bound},{self._upper_bound}]")

    @state_var_change_handler(state_vars="reward", state_var_source=env)
    def on_env_reward(self, state_var_owner_pk: Any, state_vars: Dict[str, Any],
                      triggering_state_var_names: List[str]):
        # do nothing , 做成 RL Model 时有用
        pass
コード例 #5
0
class TestEnv(Env):

    _test_var = StateVariable(dtype=int, help="test var")

    def __init__(self, _):
        super().__init__()

    @state_var_change_handler(state_vars=[_test_var, TestState.val])
    @pick_one_change
    def on_test_var_change(self, state_var_owner_pk: Any, state_var_name: str, test_var: int):
        print(f"{state_var_owner_pk} {state_var_name} {test_var}")

    @timer(interval=5.0)
    async def on_timer(self):
        test_val = 'abcde'
        test_val_object = create_stateful_object(self.pk, TestState)
        test_val_object[TestState.val].VALUE = test_val
        return StatefulObjectAndCommitStream(test_val_object, self.state_vars_storage.stream)

    @staticmethod
    async def run_test():
        import faust.types

        test_env = TestEnv("abcd")
        test_env_status_topic = faust.types.TP(topic="test_env", partition=1)
        test_env.bind(topic_define=test_env_status_topic)

        await test_env.start()

        print("started")
        test_env._test_var.VALUE = 1
        print("assigned")
        await test_env.commit_state_var_changes()
        print("published")
コード例 #6
0
ファイル: guess_number.py プロジェクト: laigen/gs-framework
class GuessNumberGameEnv(Env):

    agent = ObjectRef.bind_at_runtime()

    init_action_space = StateVariable(dtype=NumberRange, default_val=NumberRange(1, 100),
                                      help="初始状态,竞猜数字的最大范围")
    init_state_space = StateVariable(dtype=NumberRange, default_val=NumberRange(-1, 1),
                                     help="状态空间,-1 ~ 1 的值")
    state = StateVariable(dtype=int, default_val=0, help="-1:数字小了,0:随机猜一个,1:数字大了")
    reward = StateVariable(dtype=float, default_val=0., help="reward")

    def __init__(self):
        super().__init__()
        self._real_num: int = 0
        """真实的数字,可以不是 state variable,暂假定一个 episode 中 env inst 不会 deactivate"""

    def _reset(self) -> int:
        """模拟 gym.Env 的 reset """
        state_space = self.init_action_space.VALUE
        self._real_num = get_random_int(state_space.lower_bound, state_space.upper_bound)
        return 0

    @state_var_change_handler(state_vars=[Activatable.active])
    def on_active_flag_change(self, state_var_owner_pk: Any, state_vars: Dict[str, Any],
                              triggering_state_var_names: List[str]):
        v = state_vars['active']
        if v == 1:  # 标记 active 当做是 start new episode,后续可以单独做一个 episode 的 variable
            self.init_action_space.VALUE = NumberRange(1, 100)
            self.init_state_space.VALUE = NumberRange(-1, 1)
            self.state.VALUE = self._reset()
            logger.info(f"[Env] Game start... , real number is {self._real_num}")

    @state_var_change_handler(state_vars=["action"], state_var_source=agent)
    def on_agent_action(self, state_var_owner_pk: Any, state_vars: Dict[str, Any],
                        triggering_state_var_names: List[str]):
        action = state_vars['action']
        if action == self._real_num:
            self.reward.VALUE = 1000.
            logger.info(f"[Env] Bingo!")
        elif action > self._real_num:
            self.state.VALUE = 1
            self.reward.VALUE = -0.01  # 假设每猜错一次,有负的reward
            logger.info(f"[Env] Greater than real num . Guess num. : {action} , Real num. {self._real_num}")
        elif action < self._real_num:
            self.state.VALUE = -1
            self.reward.VALUE = -0.01
            logger.info(f"[Env] Less than real num . Guess num. : {action} , Real num. {self._real_num}")
コード例 #7
0
class WebPageMonitorEnv(Env):
    """该 Env 模拟监控用户浏览器上的 HTML 内容"""

    html = StateVariable(dtype=str, default_val=None, help="网页的html内容")

    @state_var_change_handler(state_vars=[Activatable.active])
    @pick_one_change
    def on_active_flag_change(self, state_var_owner_pk: Any,
                              state_var_name: str, state_var_value: Any):
        if state_var_value == 1:  # 标记 active 当做是 start new episode,后续可以单独做一个 episode 的 variable
            self.html.VALUE = "dummy"
            logger.info(
                f"[Env] {self.__class__.__qualname__} started, send out html value {self.html.VALUE}"
            )
コード例 #8
0
class HeartBeatMessage(State):

    sender = StateVariable(dtype=str,
                           default_val=None,
                           help="name of the sender")
    time = StateVariable(dtype=str, default_val=None, help="")
コード例 #9
0
class ColabPoolEnvState(Activatable):

    name = StateVariable(dtype=str, default_val=None, help="name of the pool")
コード例 #10
0
class ColabPoolEnvStateQueryResponseMessage(State):

    name = StateVariable(dtype=str, default_val=None, help="name of the pool")
    query_message_id = StateVariable(dtype=str,
                                     default_val=None,
                                     help="id of the query message")
コード例 #11
0
 class Yahoo(State):
     basic_info = StateVariable(dtype=PersonBasicInfo,
                                default_val=None,
                                help="basic person info from Yahoo")
コード例 #12
0
class URLBasedPerson(State):

    url = StateVariable(dtype=str,
                        default_val=None,
                        help="url identify the author")
コード例 #13
0
class TestState(State):

    val = StateVariable(dtype=str, default_val=None, help="val of test state")