-- your code goes here
--//neiro
local Neirons = {}
Neirons.__index=Neirons
local count = 0
function newNeiro(input,value,func,name,range,a)
n={}
n.range=range or 1
n.a = a or 1
n.input = input or {}
n.value = value or 0
n.func = func or sigma
n.weight = {}
math.randomseed (os.clock())
for i=1,#n.input do
n.weight[i]=math.random()*0.4+0.1
end
n.name = name or "neiro_"..count
count = count+1
return setmetatable(n,Neirons)
end
function Neirons:math()
local n = 0
if(#self.input>0) then
for i=1,#self.input do
self.input[i]:math()--пересчитываем входной нейрон
n = self.weight[i]*self.input[i].value+n
end
self.value = self.func(n,self.range,self.a)
end
end
--обновляем веса синапсов нейронов
function Neirons:newWeights(d)
for i=1,#self.input do
self.weight[i] = self.input[i].value*d + self.weight[i]
end
end
--среднее значение входных параметров
function porog(n,range,a)
if n > range then
return 1
else
return 0
end
end
function sigma(n,range,a)
local range = range or 1
local a = a or 1
return range*(2/(1+math.exp(-n*a-1)))
end
function line(n,range,a)
return n
end
local fn,sn=newNeiro(),newNeiro()
local add = newNeiro({fn,sn},0,line,nil,0.5,1)
local a_and={
{1.0,1.0,3.0},
{2.0,2.0,6.0},
{3.0,3.0,9.0},
{1.0,5.0,11.0},
}
for i=1,1000 do
local gErr = 0
for p=1,#a_and do
fn.value = a_and[p][1]
sn.value = a_and[p][2]
add:math()
local err = a_and[p][3] - add.value
add:newWeights(err*0.1)
gErr = math.abs(err)+gErr
end
if(gErr<0.0005) then
print(string.format("SLearned in %d iteration",i))
break
end
end
for p=1,20 do
fn.value = math.random(1,10)
sn.value = math.random(1,10)
add:math()
print(string.format("%.3f + 2*%.3f = %.3f",fn.value,sn.value,add.value))
end-- your code goes here
LS0geW91ciBjb2RlIGdvZXMgaGVyZQotLS8vbmVpcm8KCmxvY2FsIE5laXJvbnMgPSB7fQpOZWlyb25zLl9faW5kZXg9TmVpcm9ucwpsb2NhbCBjb3VudCA9IDAKZnVuY3Rpb24gbmV3TmVpcm8oaW5wdXQsdmFsdWUsZnVuYyxuYW1lLHJhbmdlLGEpCgluPXt9CgluLnJhbmdlPXJhbmdlIG9yIDEKCW4uYSA9IGEgb3IgMQoJbi5pbnB1dCA9IGlucHV0IG9yIHt9CgluLnZhbHVlID0gdmFsdWUgb3IgMAoJbi5mdW5jID0gZnVuYyBvciBzaWdtYQoJbi53ZWlnaHQgPSB7fQoJbWF0aC5yYW5kb21zZWVkIChvcy5jbG9jaygpKQoJZm9yIGk9MSwjbi5pbnB1dCBkbwoJCW4ud2VpZ2h0W2ldPW1hdGgucmFuZG9tKCkqMC40KzAuMQoJZW5kCgluLm5hbWUgPSBuYW1lIG9yICJuZWlyb18iLi5jb3VudAoJY291bnQgPSBjb3VudCsxCglyZXR1cm4gc2V0bWV0YXRhYmxlKG4sTmVpcm9ucykKZW5kCgpmdW5jdGlvbiBOZWlyb25zOm1hdGgoKQoJbG9jYWwgbiA9IDAKCWlmKCNzZWxmLmlucHV0PjApIHRoZW4KCQlmb3IgaT0xLCNzZWxmLmlucHV0IGRvIAoJCQlzZWxmLmlucHV0W2ldOm1hdGgoKS0t0L/QtdGA0LXRgdGH0LjRgtGL0LLQsNC10Lwg0LLRhdC+0LTQvdC+0Lkg0L3QtdC50YDQvtC9CgkJCW4gPSBzZWxmLndlaWdodFtpXSpzZWxmLmlucHV0W2ldLnZhbHVlK24KCQllbmQKCQlzZWxmLnZhbHVlID0gc2VsZi5mdW5jKG4sc2VsZi5yYW5nZSxzZWxmLmEpIAoJZW5kCmVuZAotLdC+0LHQvdC+0LLQu9GP0LXQvCDQstC10YHQsCDRgdC40L3QsNC/0YHQvtCyINC90LXQudGA0L7QvdC+0LIgCmZ1bmN0aW9uIE5laXJvbnM6bmV3V2VpZ2h0cyhkKQoJZm9yIGk9MSwjc2VsZi5pbnB1dCBkbwoJCXNlbGYud2VpZ2h0W2ldID0gc2VsZi5pbnB1dFtpXS52YWx1ZSpkICsgc2VsZi53ZWlnaHRbaV0KCWVuZAplbmQKLS3RgdGA0LXQtNC90LXQtSDQt9C90LDRh9C10L3QuNC1INCy0YXQvtC00L3Ri9GFINC/0LDRgNCw0LzQtdGC0YDQvtCyIApmdW5jdGlvbiBwb3JvZyhuLHJhbmdlLGEpCglpZiBuID4gcmFuZ2UgdGhlbgoJCXJldHVybiAxCgllbHNlCgkJcmV0dXJuIDAKCWVuZAplbmQKZnVuY3Rpb24gc2lnbWEobixyYW5nZSxhKQoJbG9jYWwgcmFuZ2UgPSByYW5nZSBvciAxCglsb2NhbCBhID0gYSBvciAxCglyZXR1cm4gcmFuZ2UqKDIvKDErbWF0aC5leHAoLW4qYS0xKSkpCmVuZApmdW5jdGlvbiBsaW5lKG4scmFuZ2UsYSkKCXJldHVybiBuCmVuZAoKCmxvY2FsIGZuLHNuPW5ld05laXJvKCksbmV3TmVpcm8oKQpsb2NhbCBhZGQgPSBuZXdOZWlybyh7Zm4sc259LDAsbGluZSxuaWwsMC41LDEpCgoKbG9jYWwgYV9hbmQ9ewp7MS4wLDEuMCwzLjB9LAp7Mi4wLDIuMCw2LjB9LAp7My4wLDMuMCw5LjB9LAp7MS4wLDUuMCwxMS4wfSwKfQoKZm9yIGk9MSwxMDAwIGRvCglsb2NhbCBnRXJyID0gMAoKCWZvciBwPTEsI2FfYW5kIGRvCgkJZm4udmFsdWUgPSBhX2FuZFtwXVsxXQoJCXNuLnZhbHVlID0gYV9hbmRbcF1bMl0KCQlhZGQ6bWF0aCgpCgoJCWxvY2FsIGVyciA9IGFfYW5kW3BdWzNdIC0gYWRkLnZhbHVlCgkJYWRkOm5ld1dlaWdodHMoZXJyKjAuMSkKCQlnRXJyID0gbWF0aC5hYnMoZXJyKStnRXJyCgllbmQKCglpZihnRXJyPDAuMDAwNSkgdGhlbgoJCXByaW50KHN0cmluZy5mb3JtYXQoIlNMZWFybmVkIGluICVkIGl0ZXJhdGlvbiIsaSkpCgkgCWJyZWFrIAoJZW5kCmVuZAoKZm9yIHA9MSwyMCBkbwoJCWZuLnZhbHVlID0gbWF0aC5yYW5kb20oMSwxMCkKCQlzbi52YWx1ZSA9IG1hdGgucmFuZG9tKDEsMTApCgkJYWRkOm1hdGgoKQoJCXByaW50KHN0cmluZy5mb3JtYXQoIiUuM2YgKyAyKiUuM2YgPSAlLjNmIixmbi52YWx1ZSxzbi52YWx1ZSxhZGQudmFsdWUpKQplbmQtLSB5b3VyIGNvZGUgZ29lcyBoZXJl