Моя проблема в том, что я просто не понимаю, почему это не работает:
- Это потому, что я допустил глупую ошибку?
- Это потому, что моя модель не сходится, потому что я обновляю ее на каждом шагу?
- Это потому, что я не использую правильные гиперпараметры (эпсилон, альфа)?
Чтобы решить мои проблемы:
[*]Попробуйте множество способов уменьшения значения эпсилона, чтобы сбалансировать исследование-эксплуатацию моей жадной политики эпсилон (также попробуйте исправить значение эпсилона)
[*]Попробуйте несколько вариантов параметры скорости обучения для моей нейронной сети (от 0,1 до 0,0001)
[*]Попробуйте найти глупую ошибку (очень надеюсь, что это не так, лол)< /p>
[*]Попробуйте другой тип оптимизатора (Адам, SGD)
Я действительно хочу настоять на том, чтобы найти в Интернете алгоритм обучения DeepQ, который решает эту проблему, но они использовали пакетное обновление, я действительно хочу понять, почему мой алгоритм не улучшается.
Я кстати, используйте Pytorch для нейронной сети.
Буду признателен за идею, почему это не работает !!!
Спасибо за чтение и вот мой код

Нейронная сеть:
Код: Выделить всё
class Neural_Network(nn.Module):
def __init__(self,lr=0.1,input_dims=2,fc1_dims=512,fc2_dims=512,output_dims=3):
super().__init__()
self.lr=lr
self.input_dims=input_dims
self.fc1_dims=fc1_dims
self.fc2_dims=fc2_dims
self.output_dims=output_dims
self.fc1=nn.Linear(input_dims,fc1_dims)
self.fc2=nn.Linear(fc1_dims,fc2_dims)
self.fc3=nn.Linear(fc2_dims,output_dims)
return
def forward(self,x):
x = T.tensor(x,dtype=T.float)
x = F.relu( self.fc1(x) )
x = F.relu( self.fc2(x) )
x = self.fc3(x)
return x
Код: Выделить всё
class Agent_DeepQ:
def __init__(self,lr=0.01, states_dims=2,nbr_actions=3):
self.gamma = 0.99
self.epsilon = 1
self.NN = Neural_Network(lr=lr, input_dims= states_dims, output_dims = nbr_actions)
self.input_dims = states_dims
self.nbr_actions = nbr_actions
self.lr = lr
return
def choose_greedy_action(self,state):
Q_Values = self.NN(state).detach()
a=np.argmax(Q_Values)
return a
def choose_epsilon_action(self,state):
#epsilon policy
if np.random.rand()= 100 ):
moving_average.append( np.mean(reward_history[-100:] ))
x=np.arange(100,len(moving_average)+100)
plt.plot(x,moving_average)
plt.show()
return agent
Подробнее здесь: https://stackoverflow.com/questions/785 ... rstand-why