View difference between Paste ID: cYANUPF5 and WvjneNsu
SHOW: | | - or go back to the newest paste.
1
class MenuState extends FlxState
2
{
3
	
4
	private var inputParams:Array<Array<Int>> = [[0, 0], [0, 1], [1, 0], [1, 1]];
5
	private var rightAnswers:Array<Int> = [0, 1, 1, 0];
6
	
7
	private var echo:Int = 100000;
8
	private var weightSave:Array<Float>;
9
	private var errorMSE:Float = 1;
10
	
11
	override public function create():Void
12
	{
13
		super.create();
14
		
15
		//start
16
		var weight:Array<Float> = new Array<Float>();
17
			for (j in 0...6){
18
				weight[j] = Math.random()*10 - 5;
19
			}
20-
			//iteration
20+
21-
			//weight generation
21+
22-
			//Заново генерируем случайный массив весов
22+
23-
			var weight:Array<Float> = new Array<Float>();
23+
24
			//Обнуляем временную ошубку
25
			var errorFinal:Float = 0;
26
			
27
			//Проводим итерацию, проверяем результат на входные данные с текущими весами
28
			//и сравниваем их с идеальными результатами
29
			for (h in 0...inputParams.length - 1){
30
				var h1Input:Float = inputParams[h][0] * weight[0] + inputParams[h][1] * weight[2];
31
				var h1Output:Float = sigma(h1Input);
32
				
33
				var h2Input:Float = inputParams[h][0] * weight[1] + inputParams[h][1] * weight[3];
34
				var h2Output:Float = sigma(h2Input);
35
				
36
				var oInput:Float = h1Output * weight[4] + h1Output * weight[5];
37
				var oOutput:Float = sigma(oInput);
38
				
39
				errorFinal += Math.pow(rightAnswers[h] - oOutput, 2);
40
			}
41
			
42
			//Окончательынй расчет ошибки по всем четырем итерациям
43
			errorFinal = errorFinal / 4;
44
45
		}
46
		
47
		//test neuro system
48
		trace("Error min: " + errorMSE);
49-
			//Если ошибка среди прочих итераций минимальна
49+
50-
			//то запоминаем массив весов
50+
51-
			if (errorFinal < errorMSE){
51+
52-
				errorMSE = errorFinal;
52+
53-
				weightSave = weight;
53+
54
	}
55
	
56
	private function goTest(num1:Int, num2:Int):Float {
57
		var h1Input:Float = num1 * weightSave[0] +  num2 * weightSave[2];
58
		var h1Ouput:Float = sigma(h1Input);
59
		
60
		var h2Input:Float = num1 * weightSave[1] +  num2 * weightSave[3];
61
		var h2Ouput:Float = sigma(h2Input);
62
		
63
		var oInput:Float = h1Ouput * weightSave[4] + h2Ouput * weightSave[5];
64
		var oOutput:Float = sigma(oInput);
65
		
66
		return oOutput;
67
	}
68
	
69
	private function sigma(innerNum:Float):Float	{
70
		return 1 / (1 + Math.exp(-innerNum));
71
	}