В моей настройке я использую stable-baselines , чтобы создать агента, который найдет хорошую политику для покупки и продажи на биржевом рынке.
С этой целью Я создал 3 вспомогательных файла для создания своего окружения.
Один - это спот-курсы данного обменного курса, один - действия клиента (Buy, Sell, Do nothing), а другой - суммы, используемые клиентами. в этой настройке.
Каждая строка в данных представляет день. и каждый столбец секунда в день. Таким образом, спотовая ставка [i, j] соответствует действию клиента и сумме i-го дня и j-й секунды.
Я хочу, чтобы мой агент отвечал на действия клиента. Поэтому, если клиент совершает покупку, для моего агента имеет смысл сделать ту же сумму, что и на продажу, чтобы уменьшить его воздействие или разбить сумму на более мелкие фрагменты с течением времени.
По сути, клиенты нарушают работу агент каждый раз.
Итак, я сделал функцию
def _client_action(self):
spot = spots[i,j]
amount = amounts[i,j]
action = actions[i,j]
# Disrupt the agent's variables with this function
transaction(spot, amount,action)
def _agent_action(self, action):
spot = spots[i,j]
transaction(spot, action[0], action[1])
def step(self, action):
_client_action()
agent_action()
reward = ...
obs = self._next_obs()
return obs, reward, done, {}
Возможна ли эта среда? Я начал это с парадигмы Альфа Go
Я хочу, чтобы моя система реагировала, когда против него предпринимаются действия. Но все, что я думаю, это делает случайные шаги. Я использую A2 C с MlpPolicy.
Затем приведенный ниже код тестирования должен быть скорректирован. Я предоставлю новые данные о споте, c_amount, c_action или поочередно предоставлю их, и агент должен вывести, что делать (купить X, продать X, ничего не делать).
obs = env.reset()
for i in range(0, len(client_amounts.index)):
for j in range(0, len(client_amounts.columns)):
c_amount = client_amounts.iloc[i,j]
c_action = client_actions.iloc[i,j]
action, _states = model.predict(obs)
obs, rewards, dones, info = env.step(action)
env.render()