Beispiel #1
0
    def act(self, state, data=None):
        """
        Returns an action given state.

        :return: An action chosen by the policy.
        """

        # This example method returns a random bid in the range of [min_bid, max_bid]

        b_max = self.action_set.max_bid
        b_min = self.action_set.min_bid
        mod_max = self.action_set.max_mod        # maximum valid value of a modifier
        mod_min = self.action_set.min_mod        # minimum valid value of a modifier

        bid = self.rng.uniform(low=b_min, high=b_max)       # note: use self.rng instead of numpy.random

        action_inc = Action(bid)                            # note: underspecified action (modifiers not defined at all)
        # action_inc = Action(bid, {'gender': {'M': 1.1, 'F': 1.2}})  # underspecified modifiers
        action = self.action_set.validify_action(action_inc)     # this function fills in unspecified modifiers

        # Example how you can access provided default values
        if hasattr(self.stp, "cvr_default"):
            print(self.stp.cvr_default)
        if hasattr(self.stp, "rpv_default"):
            print(self.stp.rpv_default)

        # The following way you can make the simulator save your policy
        # variable values into the output csv file.
        # Save is made after both learn and act methods are invoked.
        self.history.update({"bid": action.bid})

        return action
Beispiel #2
0
        def test_run_simulation_method(self):
            print("----------------------------------------")
            print(
                "CompetitiveDateHowSimulator sample run_simulation method run")

            N = 48

            for n in range(N):
                print("Round={}".format(n))
                actions = [
                    Action(
                        2.0, {
                            attr_name: {
                                attr_value: np.random.uniform(0.5, 1.5)
                                for attr_value in
                                self.attr_set.attr_sets[attr_name]
                            }
                            for attr_name in self.attr_set.attr_names
                        }) for _ in range(3)
                ]

                for action in actions:
                    print(action)
                print("state={}".format(self.simulator.state))

                results = self.simulator.step(actions)

                # print(results)

            self.assertTrue(True)

            print("")
        def test_sanity(self):
            print("VickreyAuctionDateHoWModule class sample run -------------")

            from ssa_sim_v2.simulator.modules.vickrey_auction.vickrey_auction_module import VickreyAuctionModule

            date_range = pd.DataFrame(pd.date_range("2017-01-05",
                                                    "2017-01-06"),
                                      columns=["date"])
            date_range["key"] = 1
            hours = pd.DataFrame(np.array(range(24)), columns=["hour_of_day"])
            hours["key"] = 1
            priors = pd.merge(date_range, hours, how="left", on="key")
            priors["hour_of_week"] = priors["date"].dt.dayofweek * 24 + priors[
                "hour_of_day"]
            priors.loc[:, "date"] = priors["date"].dt.strftime("%Y-%m-%d")
            priors = priors[["date", "hour_of_week"]]

            base_classes = priors.copy()

            priors.loc[:, "prior"] = None
            base_classes.loc[:, "base_class"] = None

            i = 0

            for index, row in priors.iterrows():

                Params = VickreyAuctionModule.Params
                priors.loc[index, "prior"] = [{
                    (0, 0): Params(),
                    (0, 1): Params(),
                    (1, 0): Params(),
                    (1, 1): Params()
                }]

                base_classes.loc[index, "base_class"] = VickreyAuctionModule

                i = (i + 1) % 24

            vickrey_model = VickreyAuctionDateHoWModule(priors,
                                                        base_classes,
                                                        seed=9)

            actions = [
                Action(2.0, [[np.random.uniform(0.5, 1.5) for _ in range(2)]
                             for _ in range(2)]) for _ in range(3)
            ]
            t = 0

            while t < len(priors):
                results = vickrey_model.get_auction_results(
                    actions=actions,
                    date=priors["date"][t],
                    how=priors["hour_of_week"][t])
                print("date={} how={} result={}".format(
                    priors["date"][t], priors["hour_of_week"][t], results))
                t = t + 1

            self.assertTrue(True)

            print("")
    def act(self, state, data=None):
        """
        Returns an action given state.

        :param State state: The current state.
        :param Union[pd.DataFrame, dict] data: Input data.
        :return: An action chosen by the policy.
        :rtype: Action
        """

        if self.online:
            action_index = dhl.randargmax(
                self.ip.mu + self.udp.discount_factor /
                (1 - self.udp.discount_factor) * self.ip.kg_nu,
                rng=self.rng)
        else:
            action_index = dhl.randargmax(self.ip.kg_nu, rng=self.rng)

        base_bid_amount = self.index_to_bid_amount(action_index)
        action_inc = Action(
            base_bid_amount
        )  # note: underspecified action (modifiers not defined at all)
        # action_inc = Action(bid, {'gender': {'M': 1.1, 'F': 1.2}})  # underspecified modifiers
        action = self.action_set.validify_action(
            action_inc)  # this function fills in unspecified modifiers

        self.history.update({"bid": action.bid})
        #self.history.update({"bid": self.action_set[action_index].bid})

        return action
    def _prepare_numerical_action(self, action):
        """
        Prepares a numerical action (with numerical modifiers in the form
        of a list of lists of floats) abusing the Action class definition.
        Must be removed in future versions.

        :param Action action: Action.
        :return: Action with a list of lists of float modifiers instead of dicts.
        :rtype: Action
        """

        modifiers = [[action.modifiers[attr_name][attr_value]
                      for attr_value in self.attr_set.attr_sets[attr_name]]
                     for attr_name in self.attr_set.attr_names]
        numerical_action = Action(action.bid, modifiers)

        return numerical_action
Beispiel #6
0
    def act(self, state, data=None):
        """
        Returns an action given state.

        :param StateSet.State state state: The current state.
        :param Union[pd.DataFrame, dict] data: Input data.
        :return: An action chosen by the policy.
        :rtype: Action
        """

        del state, data  # Used to suppress PyCharm warning

        action = self.action_set.validify_action(Action(bid=1.0))

        # An example of how to store data in the history.
        # It will get saved in the csv file from the simulation.
        self.history.update({"bid": action.bid})

        return action
Beispiel #7
0
    def act(self, state, data=None):
        """
        Returns an action given state.

        :param State state: The current state.
        :param Union[pd.DataFrame, dict] data: Input data.
        :return: An action chosen by the policy.
        :rtype: Action
        """

        Policy.act(self, state, data)
        try:
            randomized_mu = np.array([
                self.rng.normal(self.ip.mu[idx], self.ip.sigma[idx])
                for idx in range(round(self.action_set.max_bid))
            ])
        except:
            print('error !!!!!')
            print(self.action_set.max_bid)
            print(len(self.ip.mu))
            print(len(self.ip.sigma))
            print('length of mu = {}, length of sigma = {}').format(
                len(self.ip.mu), len(self.ip.sigma))

        action_index = dhl.randargmax(randomized_mu, rng=self.rng)
        base_bid_amount = self.index_to_bid_amount(action_index)
        action_inc = Action(
            base_bid_amount
        )  # note: underspecified action (modifiers not defined at all)
        # action_inc = Action(base_bid_amount, {'gender': {'M': 1.1, 'F': 1.2}})  # underspecified modifiers
        action = self.action_set.validify_action(
            action_inc)  # this function fills in unspecified modifiers

        self.history.update(
            {"bid": action.bid}
        )  # TODO: we should keep not just the base bid, but the entire bid for all attrs

        return action
Beispiel #8
0
        def test_sanity(self):
            print("VickreyAuctionModule class sample run -------------")

            from ssa_sim_v2.simulator.action import Action

            print("Example 1")

            actions = [
                Action(2.0, [[np.random.uniform(0.5, 1.5) for _ in range(2)]
                             for _ in range(2)]) for _ in range(3)
            ]

            for action in actions:
                print(action)

            print("")

            vickrey_auction = VickreyAuctionModule(
                prior={
                    (0, 0): VickreyAuctionModule.Params(),
                    (0, 1): VickreyAuctionModule.Params(),
                    (1, 0): VickreyAuctionModule.Params(),
                    (1, 1): VickreyAuctionModule.Params()
                })

            # vickrey_auction.determine_effective_modifiers(actions,segment=(0, 1, 2))

            results = vickrey_auction.get_auction_results(actions=actions)

            for key, value in results.items():
                print("{}: {}".format(key, value))

            print("")

            print("Example 2")

            actions = [
                Action(2.0, [[np.random.uniform(0.5, 1.5) for _ in range(5)]
                             for _ in range(7)]) for _ in range(10)
            ]

            for action in actions:
                print(action)

            print("")

            vickrey_auction = VickreyAuctionModule(
                prior={
                    (0, 0, 0): VickreyAuctionModule.Params(),
                    (0, 0, 1): VickreyAuctionModule.Params(),
                    (0, 0, 2): VickreyAuctionModule.Params(),
                    (0, 1, 0): VickreyAuctionModule.Params(),
                    (0, 1, 1): VickreyAuctionModule.Params(),
                    (0, 1, 2): VickreyAuctionModule.Params(),
                    (0, 2, 0): VickreyAuctionModule.Params(),
                    (0, 2, 1): VickreyAuctionModule.Params(),
                    (0, 2, 2): VickreyAuctionModule.Params(),
                    (1, 0, 0): VickreyAuctionModule.Params(),
                    (1, 0, 1): VickreyAuctionModule.Params(),
                    (1, 0, 2): VickreyAuctionModule.Params(),
                    (1, 1, 0): VickreyAuctionModule.Params(),
                    (1, 1, 1): VickreyAuctionModule.Params(),
                    (1, 1, 2): VickreyAuctionModule.Params(),
                    (1, 2, 0): VickreyAuctionModule.Params(),
                    (1, 2, 1): VickreyAuctionModule.Params(),
                    (1, 2, 2): VickreyAuctionModule.Params(),
                    (2, 0, 0): VickreyAuctionModule.Params(),
                    (2, 0, 1): VickreyAuctionModule.Params(),
                    (2, 0, 2): VickreyAuctionModule.Params(),
                    (2, 1, 0): VickreyAuctionModule.Params(),
                    (2, 1, 1): VickreyAuctionModule.Params(),
                    (2, 1, 2): VickreyAuctionModule.Params(),
                    (2, 2, 0): VickreyAuctionModule.Params(),
                    (2, 2, 1): VickreyAuctionModule.Params(),
                    (2, 2, 2): VickreyAuctionModule.Params(),
                })

            # vickrey_auction.determine_effective_modifiers(actions,segment=(0, 1, 2))

            results = vickrey_auction.get_auction_results(actions=actions)

            for key, value in results.items():
                print("{}: {}".format(key, value))

            print("")

            self.assertTrue(True)