pongfactory

AI Assignment I

Nov 27th, 2013
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.08 KB | None | 0 0
  1. import random
  2. import math
  3.  
  4. ##########Function##########
  5.  
  6. ## (2-6)
  7. def Vjl(weigth, dataInput, numOfHiden, x0):
  8.     vjHidenNode = [0 for i in range(numOfHiden)]
  9.     for i in range( numOfHiden ):
  10.         for j in range( len(dataInput)):
  11.             vjHidenNode[i] += weigth[j][i] * dataInput[j]
  12.         vjHidenNode[i] -= x0
  13.     return vjHidenNode
  14.  
  15. ## (2-7)
  16. def Yjl(n):
  17.     temp2 = []
  18.     for i in range(len(n)):
  19.         temp = 1/(1+math.exp(-n[i]))
  20.         temp2.append(temp)
  21.         #print temp
  22.     return temp2
  23.  
  24. ## (2-10)
  25. def Ej(Dj, Yj):
  26.     temp = [0 for i in range(len(Dj))]
  27.     for i in range(len(Dj)):
  28.         temp[i] = Dj[i]-Yj[i]
  29.         ##print temp[i]
  30.     return temp
  31.  
  32. ## (2-11)
  33. def Sj_L(Ej,Yj):
  34.     temp2 = []
  35.     for i in range(len(Ej)):
  36.         temp = (Ej[i]*Yj[i])*(1-Yj[i])
  37.         temp2.append(temp)
  38.     return temp2
  39.  
  40. ## (2-12)
  41. def Sj_Neural(Yj, Sk, Wkj):
  42.     temp2 = []
  43.     sumOf_Sk_Wj = 0.0
  44.    
  45.     for i in range(len(Yj)):
  46.         for j in range(len(Sk)):
  47.             sumOf_Sk_Wj += Sk[j]*Wkj[i][j]
  48.         temp = Yj[i]*( 1.0 - Yj[i])*sumOf_Sk_Wj
  49.         temp2.append(temp)
  50.         sumOf_Sk_Wj = 0.0;
  51.    
  52.     return temp2
  53.  
  54. ## (2-13)
  55. def Wji(Sj, Yil__1, A, N, Wjn, Wjn_1):
  56.     temp2 = [[0 for i in range(len(Wjn[0]))] for j in range(len(Wjn))]
  57.     for i in range(len(Wjn)):
  58.         for j in range(len(Wjn[0])):
  59.            temp = Wjn[i][j] + A*(Wjn[i][j] - Wjn_1[i][j]) + N*Sj[j]*Yil__1[i]
  60.            temp2[i][j] = temp
  61.            #print temp
  62.     return temp2
  63.  
  64. #
  65. def printArray( name, _array ):
  66.     print name
  67.     for i in range( len(_array) ):
  68.        print _array[i]
  69.     print "----------------------------------------------------"
  70.  
  71. def chackIO(_input, _output):
  72.     t = False
  73.     for i in range( len(_input) ):
  74.         if ( (_input[i]*1.0) != _output[i] ):
  75.             t = True
  76.             break
  77.     return t
  78.    
  79.  
  80. ############main############
  81.  
  82. numOfInputNode = 8
  83. numOfHidenNode = 3
  84. numOfNeuronNode = 8
  85. dataInput = [0, 0, 1, 0, 1, 0, 1, 0]
  86. weigthX0 = 0.9
  87. a = 0.9
  88. n = 0.9
  89. t = True;
  90. last_weigth_hiden_Neuron = [[0 for i in range(numOfNeuronNode)] for j in range(numOfHidenNode)]
  91. last_weigth_input_hiden = [[0 for i in range(numOfHidenNode)] for j in range(numOfInputNode)]
  92.    
  93. ## step 1. random weigth between input layer and hiden layer
  94. weigth_input_hiden = [[random.random() for i in range(numOfHidenNode)] for j in range(numOfInputNode)]
  95. printArray("Weigth input and hiden", weigth_input_hiden)
  96.  
  97. ## step 2. random weigth between hiden layer and output layer
  98. weigth_hiden_Neuron = [[random.random() for i in range(numOfNeuronNode)] for j in range(numOfHidenNode)]
  99. printArray("Weigth hiden and output", weigth_hiden_Neuron)
  100.  
  101. while(t):
  102.     ## step 3. Calculate Vj and Yj of Hiden node
  103.     vj_hidenNode = Vjl(weigth_input_hiden, dataInput, numOfHidenNode, weigthX0)
  104.     #print vj_hidenNode
  105.     yj_hidenNode = Yjl(vj_hidenNode)
  106.     #print yj_hidenNode
  107.    
  108.     ## step 4. Calculate Vj and Yj of Neuron Node
  109.     vj_neuronNode = Vjl(weigth_hiden_Neuron, yj_hidenNode, numOfNeuronNode, weigthX0)
  110.     #print vj_outputNode
  111.     yj_neuronNode = Yjl(vj_neuronNode)
  112.     #print yj_neuronNode
  113.  
  114.     ## step 5. Calculate Error of Signal from Neuron node
  115.     errorOfNeuron = Ej(dataInput, yj_neuronNode)
  116.     #print errorOfNeuron
  117.  
  118.     ## step 6. Calculate
  119.     Mj_L = Sj_L(errorOfNeuron, yj_neuronNode)
  120.     #print Mj_L
  121.  
  122.     ## step 7. Calculate
  123.     Mj_l = Sj_Neural(yj_hidenNode, Mj_L, weigth_hiden_Neuron)
  124.     #print Mj_l
  125.  
  126.     weigth1 = weigth_hiden_Neuron
  127.     weigth2 = weigth_input_hiden
  128.    
  129.     weigth_hiden_Neuron = Wji( Mj_L, yj_hidenNode, a, n, weigth_hiden_Neuron, last_weigth_hiden_Neuron )
  130.     weigth_input_hiden = Wji( Mj_l, dataInput, a, n, weigth_input_hiden, last_weigth_input_hiden )
  131.  
  132.     last_weigth_hiden_Neuron = weigth1
  133.     last_weigth_input_hiden = weigth2
  134.    
  135.     #printArray("Weigth hiden and output", weigth_hiden_Neuron)
  136.     #printArray("Weigth input and hiden", weigth_input_hiden)
  137.  
  138.     printArray("Input", dataInput)
  139.     printArray("Output", yj_neuronNode)
  140.  
  141.     t = chackIO(dataInput, yj_neuronNode)
Advertisement
Add Comment
Please, Sign In to add comment