示例#1
0
def test_01_setup():
    """
    sample init init attr, state, action space
    :return:
    """
    names = ['gender', 'age']
    vals = {'gender': ['M', 'F', 'U'],
            'age': ['0-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70-*']}
    attr_set = AttrSet(names, vals)

    state_set = StateSet(['date', 'how'], ['discrete', 'discrete'],
                         [['2018-01-01', '2018-01-02'], list(range(168))])

    act_set = ActionSet(attr_set, max_bid=9.99, min_bid=0.01, max_mod=9.0, min_mod=0.1)

    return attr_set, state_set, act_set
示例#2
0
    def _load_settings(self):
        file_data_handler = FileDataHandler()
        settings_spec = file_data_handler.load_spec(os.path.join(""),
                                                    self.settings_spec_name)

        if settings_spec is None:
            sys.exit("Can't load experiment spec")

        self.save_history = settings_spec["save_history"]
        self.print_simulator_output = settings_spec["print_simulator_output"]
        self.processing = settings_spec["processing"]
        self.num_cores = settings_spec["num_cores"]
        self.master_seed = settings_spec["master_seed"]
        self.n_experiment_reps = settings_spec["n_experiment_reps"]

        # Initialize state set
        self.date_from = settings_spec.get("date_from", None)
        self.date_to = settings_spec.get("date_to", None)

        self.time_steps_df, self.dates_list = \
            self._get_time_steps_data(self.date_from, self.date_to)

        self.state_set = StateSet(
            ["date", "how"], ["discrete", "discrete"],
            [self.dates_list, list(range(168))])

        # Initialize attribute set
        names = settings_spec["attributes"]["names"]
        vals = settings_spec["attributes"]["vals"]
        self.attr_set = AttrSet(names, vals)

        # Initialize action set
        self.action_set = ActionSet(self.attr_set,
                                    max_bid=9.99,
                                    min_bid=0.01,
                                    max_mod=9.0,
                                    min_mod=0.1)

        return settings_spec
示例#3
0
        def setUp(self):
            from ssa_sim_v2.simulator.modules.auctions.auctions_base_module import AuctionsPoissonModule
            from ssa_sim_v2.simulator.modules.auction_attributes.auction_attributes_base_module import AuctionAttributesModule
            from ssa_sim_v2.simulator.modules.vickrey_auction.vickrey_auction_module import VickreyAuctionModule
            from ssa_sim_v2.simulator.modules.competitive_click_probability.competitive_click_probability_base_module import CompetitiveClickProbabilityTwoClassGeometricModule
            from ssa_sim_v2.simulator.modules.competitive_clicks.competitive_clicks_base_module import CompetitiveClicksBinomialModule
            from ssa_sim_v2.simulator.modules.conversion_rate.conversion_rate_base_module import ConversionRateFlatModule
            from ssa_sim_v2.simulator.modules.conversions.conversions_base_module import ConversionsBinomialModule
            from ssa_sim_v2.simulator.modules.revenue.revenue_base_module import RevenueGammaNoiseModule
            from ssa_sim_v2.simulator.modules.competitive_cpc.competitive_cpc_base_module import CompetitiveCPCVickreyModule

            from ssa_sim_v2.simulator.modules.auctions.auctions_date_how_module import AuctionsDateHoWModule
            from ssa_sim_v2.simulator.modules.auction_attributes.auction_attributes_date_how_module import AuctionAttributesDateHoWModule
            from ssa_sim_v2.simulator.modules.vickrey_auction.vickrey_auction_date_how_module import VickreyAuctionDateHoWModule
            from ssa_sim_v2.simulator.modules.competitive_click_probability.competitive_click_probability_date_how_module import CompetitiveClickProbabilityDateHoWModule
            from ssa_sim_v2.simulator.modules.competitive_clicks.competitive_clicks_date_how_module import CompetitiveClicksDateHoWModule
            from ssa_sim_v2.simulator.modules.conversion_rate.conversion_rate_date_how_module import ConversionRateDateHoWModule
            from ssa_sim_v2.simulator.modules.conversions.conversions_date_how_module import ConversionsDateHoWModule
            from ssa_sim_v2.simulator.modules.revenue.revenue_date_how_module import RevenueDateHoWModule
            from ssa_sim_v2.simulator.modules.competitive_cpc.competitive_cpc_date_how_module import CompetitiveCpcDateHoWModule

            self.seed = 1111

            self.date_from = "2018-01-01"
            self.date_to = "2018-01-02"

            self.tmp_df = pd.DataFrame(np.array(range(24)),
                                       columns=["hour_of_day"])
            self.tmp_df["key"] = 1
            self.dates = pd.DataFrame(pd.date_range(self.date_from,
                                                    self.date_to),
                                      columns=["date"])
            dates_list = self.dates["date"].tolist()
            self.dates["key"] = 1
            self.dates = pd.merge(
                self.dates, self.tmp_df, on=["key"],
                how="left")  # columns: ['date', 'hour_of_day']

            self.dates["hour_of_week"] = pd.to_datetime(self.dates[
                "date"]).dt.dayofweek * 24 + self.dates["hour_of_day"]
            self.dates["date"] = self.dates["date"].dt.strftime("%Y-%m-%d")
            self.dates = self.dates[["date", "hour_of_week"]]

            # Initialize state set
            self.state_set = StateSet(
                ["date", "how"], ["discrete", "discrete"],
                [dates_list, list(range(168))])

            # Initialize attribute set
            names = ['gender', 'age']
            vals = {
                'gender': ['M', 'F', 'U'],
                'age':
                ['0-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70-*']
            }
            self.attr_set = AttrSet(names, vals)

            attr_combinations = self.attr_set.get_all_attr_tuples()

            # Initialize action set
            self.action_set = ActionSet(self.attr_set,
                                        max_bid=9.99,
                                        min_bid=0.01,
                                        max_mod=9.0,
                                        min_mod=0.1)

            def initialize_priors(params, base_class):
                attr_combinations = list(self.attr_set.get_all_attr_tuples())
                priors = self.dates.copy()
                priors.loc[:, "prior"] = pd.Series(
                    [dict.fromkeys(attr_combinations, params)] * len(priors))

                base_classes = self.dates.copy()
                base_classes.loc[:, "base_class"] = base_class

                return priors, base_classes

            # Initialize auctions priors
            module_class = AuctionsPoissonModule
            Params = module_class.Params
            params = Params(auctions=100)
            priors = self.dates.copy()
            priors.loc[:, "prior"] = [{(): params}] * len(priors)
            base_classes = self.dates.copy()
            base_classes.loc[:, "base_class"] = module_class
            self.auctions_priors = priors
            self.auctions_base_classes = base_classes

            # Initialize auction_attributes priors
            module_class = AuctionAttributesModule
            Params = module_class.Params
            params = Params(p=1.0)  # Probabilities are normalized
            self.auction_attributes_priors, self.auction_attributes_base_classes \
                = initialize_priors(params, module_class)

            # Initialize vickrey_auction priors
            module_class = VickreyAuctionModule
            Params = module_class.Params
            params = Params()
            self.vickrey_auction_priors, self.vickrey_auction_base_classes \
                = initialize_priors(params, module_class)

            # Initialize competitive_click_probability priors
            module_class = CompetitiveClickProbabilityTwoClassGeometricModule
            Params = module_class.Params
            params = Params(n_pos=8, p=0.5, q=0.5, r_11=0.6, r_12=0.4, r_2=0.5)
            self.competitive_click_probability_priors, self.competitive_click_probability_base_classes \
                = initialize_priors(params, module_class)

            # Initialize competitive_clicks priors
            module_class = CompetitiveClicksBinomialModule
            Params = module_class.Params
            params = Params(noise_level=0.0, noise_type="multiplicative")
            self.competitive_clicks_priors, self.competitive_clicks_base_classes \
                = initialize_priors(params, module_class)

            # Initialize conversion_rate priors
            module_class = ConversionRateFlatModule
            Params = module_class.Params
            params = Params(cvr=0.02,
                            noise_level=0.0,
                            noise_type="multiplicative")
            self.conversion_rate_priors, self.conversion_rate_base_classes \
                = initialize_priors(params, module_class)

            # Initialize conversions priors
            module_class = ConversionsBinomialModule
            Params = module_class.Params
            params = Params(noise_level=0.0, noise_type="multiplicative")
            self.conversions_priors, self.conversions_base_classes \
                = initialize_priors(params, module_class)

            # Initialize revenue priors
            module_class = RevenueGammaNoiseModule
            Params = module_class.Params
            params = Params(avg_rpv=300.0, noise_level=100.0)
            self.revenue_priors, self.revenue_base_classes = initialize_priors(
                params, module_class)

            # Initialize competitive_cpc priors
            module_class = CompetitiveCPCVickreyModule
            Params = module_class.Params
            params = Params(n_pos=8, fee=0.01)
            self.competitive_cpc_priors, self.competitive_cpc_base_classes = \
                initialize_priors(params, module_class)

            # Module setup for the simulator
            self.mods = \
                {"auctions": AuctionsDateHoWModule(self.auctions_priors,
                                                   self.auctions_base_classes,
                                                   self.seed),
                 "auction_attributes": AuctionAttributesDateHoWModule(self.auction_attributes_priors,
                                                                      self.auction_attributes_base_classes,
                                                                      self.seed),
                 "vickrey_auction": VickreyAuctionDateHoWModule(self.vickrey_auction_priors,
                                                                self.vickrey_auction_base_classes,
                                                                self.seed),
                 "competitive_click_probability": CompetitiveClickProbabilityDateHoWModule(self.competitive_click_probability_priors,
                                                                                           self.competitive_click_probability_base_classes,
                                                                                           self.seed),
                 "competitive_clicks": CompetitiveClicksDateHoWModule(self.competitive_clicks_priors,
                                                                      self.competitive_clicks_base_classes,
                                                                      self.seed),
                 "conversion_rate": ConversionRateDateHoWModule(self.conversion_rate_priors,
                                                                self.conversion_rate_base_classes,
                                                                self.seed),
                 "conversions": ConversionsDateHoWModule(self.conversions_priors,
                                                         self.conversions_base_classes,
                                                         self.seed),
                 "revenue": RevenueDateHoWModule(self.revenue_priors,
                                                 self.revenue_base_classes,
                                                 self.seed),
                 "competitive_cpc": CompetitiveCpcDateHoWModule(self.competitive_cpc_priors,
                                                                self.competitive_cpc_base_classes,
                                                                self.seed)
                 }

            self.simulator = CompetitiveDateHowSimulator(self.state_set,
                                                         self.action_set,
                                                         self.attr_set,
                                                         self.mods,
                                                         self.date_from,
                                                         self.date_to,
                                                         income_share=1.0)