Exemple #1
0
    def decide_salary(self, stats):
        self.profit_change = change(self.profit, self.prev_profit)
        self.sales_change = change(self.sales, self.prev_sales)
        self.sold_change = change(self.sold, self.prev_sold)
        #self.workers_change = (len(self.workers) - self.prev_workers) / self.prev_workers if self.prev_workers > 0 else 0
        self.workers_change = len(self.workers) - self.prev_workers
        self.prev_salary = self.salary
        self.prev_price = self.price
        self.prev_plan = self.plan
        self.prev_sold = self.sold
        self.prev_workers = len(self.workers)
        self.prev_sales = self.sales
        self.prev_profit = self.profit
        #state = list(self.profit_change, self.sales_change, self.workers_change, self.sold_change)
        state = [self.sales_change, self.workers_change]
        self.salary *= (1 + self.get_parameter(self.rules_salary, state))
        self.salary = self.salary if self.salary > 0 else 0
        #self.price *= (1 + self.price_change)
        self.price = 1.05 * self.salary / self.efficiency_coefficient
        self.plan = (1 + self.get_parameter(self.rules_plan,
                                            state)) * self.plan - self.stock
        self.plan = self.plan if self.plan > 0 else 0
        self.salary_change = change(self.salary, self.prev_salary)
        self.price_change = change(self.price, self.prev_price)
        self.plan_change = change(self.plan, self.prev_plan)

        self.offer_count = math.floor(
            self.plan / self.efficiency_coefficient) - len(self.workers)
        while self.offer_count < 0:
            self.fire_worker(random.choice(list(self.workers)))
            self.offer_count += 1
        return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #2
0
 def decide_salary(self, stats):
     self.a, self.b, self.p1 = rls(numpy.array([self.a, self.b]), self.p1, numpy.array([1, self.sold]), self.price)
     self.offer_count = math.floor(stats.f * (self.a - self.salary / self.efficiency_coefficient/((stats.f + 1) * (-self.b * self.efficiency_coefficient))))- len(self.workers)
     while self.offer_count < 0:
         self.fire_worker(random.choice(list(self.workers)))
         self.offer_count += 1
     self.price = (self.a + stats.f * self.salary/self.efficiency_coefficient)/ (stats.f + 1)
     self.price = self.price if self.price > 0 else 0
     return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #3
0
 def decide_salary(self, stats):
     self.a, self.b, self.p1 = rls(numpy.array([self.a, self.b]), self.p1, numpy.array([1, self.sold]), self.price)
     self.d, self.p2 = rls(numpy.array([self.d]), self.p2, numpy.array([self.salary]), len(self.workers))
     self.plan = 0.5 * self.a / (-self.b + 1/ (self.efficiency_coefficient * self.efficiency_coefficient* self.d))
     self.plan = (self.plan - self.stock) // self.efficiency_coefficient * self.efficiency_coefficient
     self.plan = self.plan if self.plan >= 0 else 0
     self.offer_count = math.floor(self.plan / self.efficiency_coefficient) - len(self.workers)
     while self.offer_count < 0:
         self.fire_worker(random.choice(list(self.workers)))
         self.offer_count += 1
     self.price = self.a + self.b * self.plan
     self.price = self.price if self.price > 0 else 0
     self.salary = self.plan / (self.d * self.efficiency_coefficient)
     self.salary = self.salary if self.salary > 0 else 0
     return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #4
0
 def decide_salary(self, stats):
     self.plan = self.smoothing_coefficient * self.sold + (
         1 - self.smoothing_coefficient) * numpy.mean(self.history)
     self.history.append(self.sold)
     self.history = self.history[1:len(self.history)]
     self.offer_count = math.floor(
         self.plan / self.efficiency_coefficient) - len(self.workers)
     while self.offer_count < 0:
         self.fire_worker(random.choice(list(self.workers)))
         self.offer_count += 1
     if len(self.workers) < self.prev_workers + self.offer_count:
         self.salary *= 1.01
     self.price = 1.05 * self.salary / self.efficiency_coefficient
     self.price = self.price if self.price > 0 else 0
     return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #5
0
 def decide_salary(self, stats):
     self.update_state()
     self.prev_workers = len(self.workers)
     self.update()
     self.action = self.actions[argmax(self.q, self.state)]
     self.price *= (1 + self.action[0])
     self.price = self.price if self.price > 0 else 0
     self.plan += self.action[1]
     self.plan = (self.plan - self.stock) // self.efficiency_coefficient * self.efficiency_coefficient
     self.plan = self.plan if self.plan >= 0 else 0
     self.offer_count = math.floor(self.plan / self.efficiency_coefficient) - len(self.workers)
     while self.offer_count < 0:
         self.fire_worker(random.choice(list(self.workers)))
         self.offer_count += 1
     self.salary = 0.95 * self.price * self.efficiency_coefficient
     return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #6
0
    def decide_salary(self, stats):
        self.sales_change = change(self.sales, self.prev_sales)
        self.sold_change = change(self.sold, self.prev_sold)

        self.prev_sold = self.sold
        self.prev_sales = self.sales

        self.exp_sales = 0.5 * self.sales_change + 0.5 * stats.expected_sales_growth
        self.exp_sold = 0.5 * self.sold_change + 0.5 * stats.expected_sold_growth

        self.expected = (1 + self.exp_sales) * self.sales
        self.plan = (1 + self.exp_sold) * self.sold

        self.expected = self.expected if self.expected >= 0 else 0

        self.plan = (
            self.plan - self.stock
        ) // self.efficiency_coefficient * self.efficiency_coefficient
        self.plan = self.plan if self.plan >= 0 else 0

        self.price = self.expected / self.plan if self.plan > 0 and self.expected > 0 else self.price
        self.salary = 0.95 * self.price * self.efficiency_coefficient

        while not (check_margin(self.salary,
                                self.plan // self.efficiency_coefficient,
                                self.expected)) and self.expected != 0:
            if self.profit >= 0:
                self.salary *= 0.95
            else:
                self.plan = self.plan // self.efficiency_coefficient - 1
                self.price = self.expected / self.plan if self.plan > 0 and self.expected > 0 else self.price
                self.salary = 0.95 * self.price * self.efficiency_coefficient
        self.plan = self.plan if self.plan >= 0 else 0
        self.offer_count = math.floor(
            self.plan / self.efficiency_coefficient) - len(self.workers)
        while self.offer_count < 0:
            self.fire_worker(random.choice(list(self.workers)))
            self.offer_count += 1
        if self.salary == 0:
            for worker in self.workers:
                self.fire_worker(worker)
        return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #7
0
 def decide_salary(self, stats):
     if self.sold >= self.plan:
         self.plan = self.sold + math.floor(self.efficiency_coefficient)
         self.prev_price = self.price
         self.price *= 1.05
     else:
         if self.prev_price < self.price:
             self.prev_price = self.price
             self.price *= 0.95
         else:
             self.plan = self.sold
     self.plan = (
         self.plan - self.stock
     ) // self.efficiency_coefficient * self.efficiency_coefficient
     self.plan = self.plan if self.plan >= 0 else 0
     self.offer_count = math.floor(
         self.plan / self.efficiency_coefficient) - len(self.workers)
     while self.offer_count < 0:
         self.fire_worker(random.choice(list(self.workers)))
         self.offer_count += 1
     self.salary = 0.95 * self.price * self.efficiency_coefficient
     return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #8
0
 def decide_salary(self, stats):
     self.probabilities = update(self.probabilities, self.profit,
                                 self.actions.index(self.action))
     distribution = numpy.array(self.probabilities)
     indexes = [i for i in range(0, len(self.probabilities))]
     self.action = self.actions[numpy.random.choice(indexes,
                                                    replace=False,
                                                    p=distribution /
                                                    sum(distribution))]
     self.price *= (1 + self.action[0])
     self.price = self.price if self.price > 0 else 0
     self.plan += self.action[1]
     self.plan = (
         self.plan - self.stock
     ) // self.efficiency_coefficient * self.efficiency_coefficient
     self.plan = self.plan if self.plan >= 0 else 0
     self.offer_count = math.floor(
         self.plan / self.efficiency_coefficient) - len(self.workers)
     while self.offer_count < 0:
         self.fire_worker(random.choice(list(self.workers)))
         self.offer_count += 1
     self.salary = 0.95 * self.price * self.efficiency_coefficient
     return FirmLaborMarketAction(self.offer_count, self.salary, [])
Exemple #9
0
 def decide_salary(self, stats):
     self.salary = random.uniform(150, 250)
     return FirmLaborMarketAction(1, self.salary, [])
Exemple #10
0
 def decide_salary(self, stats):
     return FirmLaborMarketAction(1, self.current_salary, [])