-
Notifications
You must be signed in to change notification settings - Fork 0
/
GAnnInitializators.py
80 lines (61 loc) · 3.17 KB
/
GAnnInitializators.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from random import uniform as rand_uniform, gauss as rand_gauss
import numpy as np
def G1DConnInitializatorUniform(genome, **args):
""" Real initialization function of G1DConnections
This initializator accepts the *rangemin* and *rangemax* genome parameters.
"""
range_min = genome.getParam("rangemin", -50)
range_max = genome.getParam("rangemax", 50)
layers = genome.getParam("layers", [2,4,1])
bias = genome.getParam("bias", [1,1,0])
ndLayers=np.array(layers)
ndBias=np.array(bias)
if genome.genomeList == []:
totalConnections = int(np.sum([(layers[i]+1)*layers[i+1] for i in range(len(layers)-1)]))
genomeList1=[]
for ly in range(len(layers)-1):
for toNeurode in range(layers[ly+1]):
toNeurode += int(ndLayers[0:ly+1].sum()+ndBias[0:ly+1].sum())
for fromNeurode in range(layers[ly]+1):
fromNeurode +=int(ndLayers[0:ly].sum()+ndBias[0:ly].sum())
genomeList1.append((fromNeurode, toNeurode, rand_uniform(range_min, range_max)))
genome.genomeList = np.array(genomeList1, dtype=[('from','i'),('to','i'),('weight','f')])
else:
totalConnections = len(genome.genomeList)
if totalConnections != genome.genomeSize:
print "%% Warning: genome.genomeSize and the length of genome.genomeList mismatch!"
for conn in genome.genomeList:
conn[2] = rand_uniform(range_min, range_max)
def G1DConnInitializatorGaussian(genome, **args):
""" Real initialization function of G1DConnections
This initializator accepts the *rangemin* and *rangemax* genome parameters.
"""
range_min = genome.getParam("rangemin", -50)
range_max = genome.getParam("rangemax", 50)
mu = genome.getParam("gauss_mu", 0)
sigma = genome.getParam("gauss_sigma", 1)
# print "mu=", mu, "sigma=", sigma
layers = genome.getParam("layers", [2,4,1])
bias = genome.getParam("bias", [1,1,0])
ndLayers=np.array(layers)
ndBias=np.array(bias)
if genome.genomeList == []:
totalConnections = int(np.sum([(layers[i]+1)*layers[i+1] for i in range(len(layers)-1)]))
genomeList1=[]
for ly in range(len(layers)-1):
for toNeurode in range(layers[ly+1]):
toNeurode += int(ndLayers[0:ly+1].sum()+ndBias[0:ly+1].sum())
for fromNeurode in range(layers[ly]+1):
fromNeurode +=int(ndLayers[0:ly].sum()+ndBias[0:ly].sum())
weight = min(range_max, rand_gauss(mu, sigma))
weight = max(range_min, weight)
genomeList1.append((fromNeurode, toNeurode, weight))
genome.genomeList = np.array(genomeList1, dtype=[('from','i'),('to','i'),('weight','f')])
else:
totalConnections = len(genome.genomeList)
if totalConnections != genome.genomeSize:
print "%% Warning: genome.genomeSize and the length of genome.genomeList mismatch!"
for conn in genome.genomeList:
weight = min(range_max, rand_gauss(mu, sigma))
weight = max(range_min, weight)
conn[2] = weight