forked from MrBly/WalnutiQ
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBigNervousSystem.java
More file actions
116 lines (97 loc) · 5.16 KB
/
BigNervousSystem.java
File metadata and controls
116 lines (97 loc) · 5.16 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package model.MARK_II;
import model.MARK_II.connectTypes.AbstractSensorCellsToRegionConnect;
import model.MARK_II.region.Column;
import model.MARK_II.region.Region;
import model.MARK_II.sensory.BigRetina;
import model.MARK_II.sensory.SensorCell;
import model.MARK_II.util.HeapTracker;
import java.awt.*;
import java.io.IOException;
/**
* PROBLEM: When a user wants to create a NervousSystem object that is too large for
* the Java Heap. This is usually when you want to build a NervousSystem with 0.5+ million Neurons.
*
* SOLUTION: This class provides a easy to use API for creating your NervousSystem as separately
* saved JSON files.
*
* @author Q Liu (quinnliu@vt.edu)
* @version 6/15/2015.
*/
public class BigNervousSystem {
private final double MAX_HEAP_USE_PERCENTAGE;
private BigNeocortex bigNeocortex;
private HeapTracker heapTracker;
private BigRetina bigRetina;
public BigNervousSystem(int maxSizeOfBigNervousSystemInMB, BigNeocortex bigNeocortex, Dimension retinaDimension,
AbstractSensorCellsToRegionConnect opticNerve,
String[] retinaConnectionParameterListInOrder,
String pathAndRetinaFileName) throws IOException {
this.heapTracker = new HeapTracker(false);
double maxHeapSizeInMB = (double) this.heapTracker
.getHeapMaxSizeInBytes() / 1000000;
this.MAX_HEAP_USE_PERCENTAGE = (double) maxSizeOfBigNervousSystemInMB
/ maxHeapSizeInMB;
if (this.MAX_HEAP_USE_PERCENTAGE > 1.0) {
throw new IllegalArgumentException("maxSizeOfBigNervousSystemInMB " +
"is too large making MAX_HEAP_USE_PERCENTAGE > 1.0");
}
this.bigNeocortex = bigNeocortex;
this.heapTracker.updateHeapData();
System.out.println("AFTER: this.bigNeocortex = bigNeocortex;");
// create Retina
this.bigRetina = new BigRetina((int) retinaDimension.getHeight(), (int) retinaDimension.getWidth(), pathAndRetinaFileName);
this.heapTracker.updateHeapData();
System.out.println("AFTER: BigRetina bigRetina = new BigRetina((int) retinaDimension.getHeight(), (int) retinaDimension.getWidth(), pathAndRetinaFileName);");
// connect Retina
AbstractSensorCellsToRegionConnect opticNerveConnectType = opticNerve;
for (int i = 0; i < retinaConnectionParameterListInOrder.length; i = i+7) {
SensorCell[][] sensorCells = this.bigRetina.getVisionCells(new model.MARK_II.util.Rectangle(
new Point(
Integer.valueOf(retinaConnectionParameterListInOrder[i]),
Integer.valueOf(retinaConnectionParameterListInOrder[i+1])),
new Point(
Integer.valueOf(retinaConnectionParameterListInOrder[i+2]),
Integer.valueOf(retinaConnectionParameterListInOrder[i+3]))));
Region region = this.bigNeocortex.getRegion(
retinaConnectionParameterListInOrder[i+4]);
this.heapTracker.updateHeapData();
System.out.println("AFTER: Region region = this.bigNeocortex" +
".getRegion(\n" +
" " +
"retinaConnectionParameterListInOrder[i+4]);");
Column[][] regionColumns = region.getColumns();
int numberOfColumnsToOverlapAlongXAxisOfSensorCells =
Integer.valueOf(retinaConnectionParameterListInOrder[i+5]);
int numberOfColumnsToOverlapAlongYAxisOfSensorCells =
Integer.valueOf(retinaConnectionParameterListInOrder[i+6]);
opticNerveConnectType.connect(sensorCells, regionColumns,
numberOfColumnsToOverlapAlongXAxisOfSensorCells,
numberOfColumnsToOverlapAlongYAxisOfSensorCells);
// resave used region in BigNeocortex since each Region has been changed
this.bigNeocortex.saveRegion(region);
if (this.heapTracker.isUsedHeapPercentageOver(this
.MAX_HEAP_USE_PERCENTAGE)) {
throw new IllegalArgumentException("your parameters for " +
"optic nerve connect type are using too much of the " +
"heap and must be decreased");
}
this.heapTracker.updateHeapData();
System.out.println("AFTER: opticNerveConnectType.connect" +
"(sensorCells, regionColumns,\n" +
" " +
"numberOfColumnsToOverlapAlongXAxisOfSensorCells,\n" +
" " +
"numberOfColumnsToOverlapAlongYAxisOfSensorCells);");
String pathToExperiment_1_folder = "./src/test/java/model/experiments/vision/MARK_II" +
"/experiment_1/";
this.heapTracker.printAllHeapDataToFile(pathToExperiment_1_folder
+ "heapSizeLogData_BigNervousSystem.txt");
}
}
public BigNeocortex getBigNeocortex() {
return this.bigNeocortex;
}
public BigRetina getBigRetina() {
return this.bigRetina;
}
}