Помогите с 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

Ответы (0 шт):