Помогите с Q-Обучением
Сижу такой, смотрю как моя нейросеть пытается играть в мою игру, уклоняется наверно, стреляет. Но это назвать нейросетью слабо, я даже её не обучал. По этому прошу, пожалуйста, объяснить как сделать Q-Обучение на луа, у меня есть своя база для нейросети, код ниже(предупреждение, много говна):
nb = {}
function nb.Create(inputs,hidden,outputs,random)
local neuro = {}
neuro.inputs = {}
neuro.hidden = {}
neuro.outputs = {}
neuro.weights = {}
neuro.weights2 = {}
for i=1,inputs do
neuro.inputs[i] = 0
for i2=1,hidden do
neuro.weights[i .. "_" .. i2] = math.rand(random[1],random[2])
end
end
for i=1,hidden do
neuro.hidden[i] = 0
for i2=1,outputs do
neuro.weights2[i .. "_" .. i2] = math.rand(random[1],random[2])
end
end
for i=1,outputs do
neuro.outputs[i] = 0
end
return neuro
end
function nb.Inputs(neuro,inputs)
neuro.inputs = inputs
end
function nb.Random(neuro,random)
for k,v in pairs(neuro.weights) do
neuro.weights[k] = v + math.rand(random[1],random[2])
end
for k,v in pairs(neuro.weights2) do
neuro.weights2[k] = v + math.rand(random[1],random[2])
end
end
function nb.Reward(reward,gamma)
end
function nb.Result(neuro)
for k,v in pairs(neuro.hidden) do
local result = 0
for k2,v2 in pairs(neuro.inputs) do
local d = v2 * neuro.weights[k2 .. "_" .. k]
result = result + d
end
neuro.hidden[k] = result
end
for k,v in pairs(neuro.outputs) do
local result = 0
for k2,v2 in pairs(neuro.hidden) do
local d = v2 * neuro.weights2[k2 .. "_" .. k]
result = result + d
end
neuro.outputs[k] = result
end
return neuro.outputs
end