Использование RL для моделирования среды компании

Чистая прибыль Berkshire Hathaway составила 81 миллиард долларов, Apple - 55 миллиардов долларов, 1 из 12 предприятий прекратил свою деятельность в этом году, а около 98 000 предприятий были навсегда закрыты из-за covid-19.

Так что же отличает такие крупные компании, как Berkshire Hathaway и Apple, от других 1 из 12 предприятий, закрывающихся ежегодно? Как сделать так, чтобы компании заработали как можно больше денег, чтобы не допустить их банкротства?

Почему бы не использовать ИИ? [Вставьте анекдот о стартапах в области ИИ, которые безумно финансируются венчурными капиталистами]

Вот что я сделал. Используя обучение с подкреплением, я смоделировал среду компании, чтобы оптимизировать заработанные для компании деньги.

Первый…

Что такое обучение с подкреплением?

Обучение с подкреплением похоже на то, как учатся люди или собаки. Обучение с подкреплением вознаграждает агента, когда он что-то делает правильно, и наказывает его, когда он что-то делает неправильно.

Обучение с подкреплением работает с 5 основными вещами: агент, награда, состояние, действие и среда.

Действия - это то, что делает агент. Это могут быть такие вещи, как: движение влево, движение вправо, движение вперед и т. Д. Обычно они сочетаются с более крупными действиями, такими как бег по лабиринту или движение в гору.

Агент - это ИИ, который предсказывает, какие действия предпринимать, а какие не предпринимать. Агент узнает, что он сделал и какую награду получил от них.

состояние - это состояние агента в среде. Например, если ваш агент играет в видеоигру с дисплеем, это будет кадр в игре.

Вознаграждение - это то, что заставляет агента делать то, что он делает. Он показывает вашему агенту, какие действия следует предпринять, поощряя желаемые действия и наказывая нежелательные.

Среда определяет, что происходит. Когда выполняется действие, среда выполняет это действие. Среда рассчитывает, должен ли агент получить вознаграждение, и выдает его. Короче говоря, среда - это игра, в которую играет агент.

Используя эти 5 принципов, вы можете создать систему обучения с подкреплением.

Теперь, когда мы знаем, что такое обучение с подкреплением, я могу объяснить:

Как я использовал обучение с подкреплением для моделирования среды компании

Целью моей среды было оптимизировать заработанные компанией деньги, чтобы предотвратить их банкротство из-за денег. Итак, я начал с того, что сделал одного начальника и четырех рабочих

Рабочие

Рабочие были разными, чтобы представлять разнообразие сотрудников, как это обычно бывает в компании. У всех сотрудников есть два действия, которые они могут предпринять: зарабатывать деньги или ничего не делать. Если они ничего не сделают, ничего не произойдет, если они зарабатывают деньги, а компания зарабатывает деньги. Сумма денег, которую они зарабатывают, моделируется следующим уравнением:

self.company_money += worker_1_skill + worker_1_pay_motivation - worker_1_endurance

Это говорит о том, что нужно добавить уровень квалификации работника + уровень мотивации к оплате труда - ценность выносливости работника к общей стоимости денег компании и установить это на новую ценность денег компании. Рабочие действуют случайным образом и не являются агентами из-за недостатка мощности компьютера (что я выяснил на собственном горьком опыте).

Перечисленные выше переменные зависят от трех переменных, которые меняются между работниками: уровень квалификации, уровень выносливости и уровень денежной мотивации.

Уровень квалификации рабочих влияет на то, сколько денег они напрямую зарабатывают для компании, и имеет значение от 1 до 5. Это означает, что чем выше уровень квалификации, тем больше денег они приносят компании за то же время.

Уровень мотивации заработной платы работника косвенно влияет на размер заработка компании. Уровень мотивации заработной платы работника представляет собой значение от 0 до 1. Это значение умножается на заработную плату работника, чтобы получить мотивацию к оплате, которая добавляется к уравнению действия зарабатывания денег. Это означает, что чем выше уровень денежной мотивации, тем больше они мотивированы деньгами.

self.worker_1_pay_motivation = (self.worker_1_pay * worker_1_money_motivation_level)

Уровень выносливости работника также косвенно влияет на уравнение действий по зарабатыванию денег. Уровень выносливости - это значение от 0 до 5, которое влияет на это уравнение для расчета выносливости. Значения в приведенном ниже уравнении были получены на основе очень большого размера выборки, потому что немногие люди хотят ответить, сколько дней требуется для перерыва и сколько дней. Но если вы хотите помочь, вот форма помощи с данными. Используя эти переменные и умножив количество рабочих дней на уровень выносливости, я рассчитал выносливость. Это означает, что чем выше уровень выносливости, тем легче они устают.

self.worker_0_endurance = ((0.4641588837 * (1.165914401) ** self.worker_0_day_on) * (self.worker_0_endurance_level))

Ценности воркера показаны ниже:

Босс

Босс является агентом этой системы обучения с подкреплением. У босса есть 22 действия, которые он может выполнить; но их можно суммировать с четырьмя основными вещами: платить сдачу, заставлять рабочих брать выходной, ничего не делать и зарабатывать деньги.

У босса 22 действия, потому что он выполняет каждое действие для каждого рабочего и платит сдачи разной величины.

Все его действия: рабочий_0 выходной, рабочий_1 выходной, рабочий_2 выходной, рабочий_2 выходной, ничего не делать, зарабатывать деньги (босс зарабатывает 20 долларов за каждое действие), worker_0 повышение зарплаты на 1 доллар, worker_0 повышение зарплаты на 2 доллара, worker_0 - Изменение заработной платы на 1 доллар, изменение заработной платы worker_0 на -2 доллара, повышение заработной платы worker_1 на 1 доллар, повышение заработной платы worker_1 на 2 доллара, изменение заработной платы worker_1 на 1 доллар, изменение заработной платы worker_1 на -2 доллара, повышение заработной платы worker_2 на 1 доллар, повышение заработной платы worker_2 на 2 доллара, worker_2 изменение заработной платы на -1 доллар, изменение заработной платы worker_2 на -2 доллара, повышение заработной платы worker_3 на 1 доллар, повышение заработной платы worker_3 на 2 доллара, изменение заработной платы worker_3 на -1 доллар и, наконец, изменение заработной платы worker_3 на -2 доллара. Если вы все это читаете - безумный респект!

Мы поговорим об ИИ и о том, как он работает позже, но действие решает ИИ.

Используя эти действия, переменные и множество другого кода, среда собирается воедино.

Агент

Позже сейчас! Итак, давайте поговорим о том, как работает ИИ. Для этой среды я использовал DQN, чтобы предсказать значения. Короче говоря, DQN - это сеть Deep Q, которая сочетает в себе глубокое обучение и обучение с подкреплением. Q соответствует значению Q, которое является наивысшим значением, которое он может найти. Таким образом, DQN пытается найти максимально возможное значение. Более подробное объяснение здесь.

Я использовал последовательную модель с 4-мя плотными слоями, как показано здесь.

model = Sequential()
model.add(Dense(1, input_dim = (1), activation=relu))
model.add(Dense(150, activation=relu))
model.add(Dense(120, activation=relu))
model.add(Dense(self.action_space, activation=linear))
model.compile(loss="mse", optimizer=Adam(lr=self.lr))

Поскольку с RL набор данных постоянно меняется и должен создаваться по мере продвижения, чтобы предсказать, я использовал память воспроизведения для итерации по набору данных после каждого действия, предпринимаемого DQN. Обучение его предсказанному состоянию и реальному состоянию, показанному здесь:

def replay(self):
   if len(self.memory) < self.batch_size:
   return
   sample = random.sample(self.memory, self.batch_size)
   states_boss = np.array([i[0] for i in sample])
   actions_boss = np.array([i[1] for i in sample])
   rewards_boss = np.array([i[2] for i in sample])
   next_states_boss = np.array([i[3] for i in sample])
   dones_boss = np.array([i[4] for i in sample])
   Qtargets = rewards_boss + self.gamma*(np.amax(self.model.predict_on_batch(next_states_boss), axis=1))*(1-dones_boss)
   Qtarget = self.model.predict_on_batch(states_boss)
   batch_size_array = np.array([i for i in range(self.batch_size)])
   self.model.fit(states_boss, Qtarget, epochs=1, verbose=0)

Полученные результаты

Несмотря на все это, окончательные результаты после многократного запуска моделирования выглядят следующим образом.

В целом, наибольшая прибыль приходилась на периоды, когда человеку с наибольшими навыками платили намного больше, чем в среднем, а людям с более низким уровнем квалификации - гораздо меньше, чем высококвалифицированному рабочему, но все же в три раза больше, чем необходимо. Также у людей с низкими навыками было больше всего выходных, а у людей с высокими навыками почти не было выходных.

Однако одним исключением, который оказался наиболее прибыльным, был тот, который платил всем рабочим как можно меньше и предоставлял много выходных для низкоквалифицированных рабочих и изрядное количество выходных для высококвалифицированных рабочих.

Будущий потенциал

Я знаю, что сейчас это очень фундаментальная модель компании, и, вероятно, ее нужно будет специализировать для конкретной компании, чтобы обеспечить ей большую ценность. Кроме того, имея больше времени и вычислительных мощностей, эта программа может быть расширена еще больше такими функциями, как:

  • Несколько компаний (браконьерство, уровень лояльности)
  • Комиссии против зарплаты
  • Несколько боссов
  • Рабочие - это агенты (гораздо больше вычислительной мощности)
  • Больше вакансий и специализация вакансий

Если вам интересно, я привел сюда свой код



Если вам понравилась эта статья, то, вероятно, вам понравятся и другие мои, так что подпишитесь на меня на Medium, а пока вы это делаете, подписывайтесь на меня в Twitter, Linkedin и подпишитесь на мою информационный бюллетень .