Snakenet.rb now applies modifications to the weights in both directions (e.g. positive and negative), creating two new AIs.
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit is contained in:
parent
1418d519d5
commit
38aa654c54
@ -244,31 +244,45 @@ class AI
|
||||
|
||||
def evolve
|
||||
w = @weights.dup
|
||||
action = rand(5)
|
||||
if action==0 #swap
|
||||
i1 = rand(network_size())
|
||||
i2 = rand(network_size())
|
||||
temp = w[i1]
|
||||
w[i1] = w[i2]
|
||||
w[i2] = temp
|
||||
elsif action==1 #change single value
|
||||
action = rand(4)
|
||||
#if action==0 #swap
|
||||
# i1 = rand(network_size())
|
||||
# i2 = rand(network_size())
|
||||
# temp = w[i1]
|
||||
# w[i1] = w[i2]
|
||||
# w[i2] = temp
|
||||
if action==0 #change single value
|
||||
i = rand(network_size())
|
||||
w[i] = rand() * 2 - 1.0
|
||||
elsif action==2 #invert single value
|
||||
diff = rand() * 0.2 - 0.1
|
||||
w2 = w.dup
|
||||
w[i] += diff
|
||||
w[i] = 1.0 if w[i]>1.0
|
||||
w[i] = -1.0 if w[i]<-1.0
|
||||
w2[i] -= diff
|
||||
w2[i] = 1.0 if w2[i]>1.0
|
||||
w2[i] = -1.0 if w2[i]<-1.0
|
||||
return [AI.new(w), AI.new(w2)]
|
||||
elsif action==1 #invert single value
|
||||
i = rand(network_size())
|
||||
w[i] *= -1.0
|
||||
elsif action==3
|
||||
elsif action==2
|
||||
(0...network_size()).each do |i|
|
||||
w[i] = rand() * 2 - 1.0 if rand(5)==0
|
||||
end
|
||||
else #change multiple values
|
||||
w2 = w.dup
|
||||
(0...network_size()).each do |i|
|
||||
if (rand(5)==0)
|
||||
w[i] += rand() / 5.0 - 0.1
|
||||
diff = rand() * 0.2 - 0.1
|
||||
w[i] += diff
|
||||
w[i] = 1.0 if w[i]>1.0
|
||||
w[i] = -1.0 if w[i]<-1.0
|
||||
w2[i] -= diff
|
||||
w2[i] = 1.0 if w2[i]>1.0
|
||||
w2[i] = -1.0 if w2[i]<-1.0
|
||||
end
|
||||
end
|
||||
return [AI.new(w), AI.new(w2)]
|
||||
end
|
||||
|
||||
return AI.new(w)
|
||||
@ -389,6 +403,7 @@ loop do
|
||||
10.times do
|
||||
ais << AI.new
|
||||
end
|
||||
ais = ais.flatten
|
||||
round+=1
|
||||
end
|
||||
rescue SystemExit, Interrupt
|
||||
|
Loading…
Reference in New Issue
Block a user