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, [])
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, [])
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, [])
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, [])
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, [])
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, [])
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, [])
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, [])
def decide_salary(self, stats): self.salary = random.uniform(150, 250) return FirmLaborMarketAction(1, self.salary, [])
def decide_salary(self, stats): return FirmLaborMarketAction(1, self.current_salary, [])