ein_neuronales_netz_fuer_den_nxt_roboter
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
ein_neuronales_netz_fuer_den_nxt_roboter [2024/01/26 11:11] – [Quellcode] torsten.roehl | ein_neuronales_netz_fuer_den_nxt_roboter [2024/01/26 11:20] (aktuell) – [Quellcode] torsten.roehl | ||
---|---|---|---|
Zeile 123: | Zeile 123: | ||
public class Main { | public class Main { | ||
- | public static Methods bpn = new Methods(); | + | public static Methods bpn = new Methods(); |
- | public static void main(String args[]) throws InterruptedException { | + | public static void main(String args[]) throws InterruptedException { |
- | // | + | // |
| | ||
- | TouchSensor s1 = new TouchSensor(SensorPort.S1); | + | TouchSensor s1 = new TouchSensor(SensorPort.S1); |
- | | + | |
- | | + | |
- | // | + | // |
- | // und des Input- und Output-Vektors | + | |
| | ||
- | int i, white; | + | int i, white; |
- | int inp[] = { 0, 0, 0 }; | + | |
- | int out[] = { 0, 0 }; | + | |
- | Sound.beep(); | + | Sound.beep(); |
- | | + | |
- | // Trainieren des bpn (Backpropagation-Netzwerks) in 500 Epochen | + | // Trainieren des bpn (Backpropagation-Netzwerks) in 500 Epochen |
- | for (i = 0; i < 500; i++) { | + | |
- | | + | bpn.train(1); |
- | | + | System.out.println(bpn.trainedEpochs); |
+ | } | ||
- | } | + | Sound.twoBeeps(); |
- | + | ||
- | Sound.twoBeeps(); | + | |
| | ||
- | // | + | // |
| | ||
- | white = s2.readValue(); | + | white = s2.readValue(); |
- | Motor.A.setSpeed(300); | + | Motor.A.setSpeed(300); |
- | | + | |
+ | | ||
- | Sound.twoBeeps(); | + | while (!Button.ENTER.isPressed()) { |
- | while (!Button.ENTER.isPressed()) { | + | |
- | + | | |
- | | + | inp[0] = 1; // Sensor 1 an |
+ | | ||
+ | inp[0] = 0; // Sensor 1 aus | ||
- | if (s1.isPressed()==true) | + | if (s2.readValue() > white + 15) |
- | inp[0] = 1; // Sensor | + | |
- | | + | |
- | inp[0] = 0; // Sensor | + | |
- | if (s2.readValue() > white + 15) | + | if (s3.isPressed()==true) |
- | inp[1] = 1; // Sensor | + | |
- | | + | |
- | inp[1] = 0; // Sensor | + | |
- | if (s3.isPressed()==true) | + | bpn.test(inp, out); |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
+ | | ||
+ | | ||
+ | Motor.A.backward(); | ||
- | if (out[0] == 1) | + | |
- | | + | Motor.C.forward(); |
- | | + | else |
- | | + | Motor.C.backward(); |
- | if (out[1] == 1) | + | Thread.sleep(500); |
- | | + | |
- | | + | |
- | | + | |
- | | + | } |
- | + | ||
- | } | + | |
| | ||
- | Motor.A.stop(); | + | Motor.A.stop(); |
- | | + | |
- | | + | |
| | ||
- | Button.ESCAPE.addButtonListener(new ButtonListener() { | + | Button.ESCAPE.addButtonListener(new ButtonListener() { |
- | | + | public void buttonPressed(Button b) { |
- | | + | |
- | } | + | } |
- | | + | |
- | | + | |
- | } | + | |
- | }); | + | } |
+ | | ||
| | ||
} | } | ||
+ | |||
+ | |||
</ | </ | ||
Zeile 223: | Zeile 223: | ||
| | ||
| | ||
- | + | | |
- | + | ||
| | ||
| | ||
Zeile 232: | Zeile 231: | ||
| | ||
| | ||
- | |||
| | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
| | ||
byte i, j; | byte i, j; | ||
Zeile 250: | Zeile 244: | ||
| | ||
- | for(int i=0; i | + | |
- | | + | learn( data1[0], data1[1] ); |
- | | + | learn( data2[0], data2[1] ); |
- | | + | learn( data3[0], data3[1] ); |
- | | + | learn( data4[0], data4[1] ); |
- | | + | trainedEpochs++; |
- | } | + | } |
} | } | ||
Zeile 262: | Zeile 256: | ||
| | ||
int i, j; | int i, j; | ||
- | | + | |
- | + | ||
// Initialisieren der Input-Vekoren | // Initialisieren der Input-Vekoren | ||
Zeile 273: | Zeile 266: | ||
| | ||
- | } | + | |
- | + | ||
// Berechnen der Output-Werte | // Berechnen der Output-Werte | ||
Zeile 282: | Zeile 274: | ||
| | ||
} | } | ||
- | |||
- | |||
- | |||
Zeile 312: | Zeile 301: | ||
// Anpassen der Gewichte w1 | // Anpassen der Gewichte w1 | ||
| | ||
- | } | + | |
- | + | ||
| | ||
Zeile 333: | Zeile 321: | ||
// Berechnen der Output-Werte | // Berechnen der Output-Werte | ||
| | ||
- | |||
sum = 0; | sum = 0; | ||
| | ||
- | |||
| | ||
Zeile 343: | Zeile 329: | ||
// Übertragen des Outputs auf das Array out[] | // Übertragen des Outputs auf das Array out[] | ||
- | for(i=0; i= 0.5 ) | + | for(i=0; i= 0.5 ) |
- | | + | |
- | | + | |
- | | + | |
} | } | ||
| | ||
Zeile 356: | Zeile 342: | ||
</ | </ | ||
+ | <WRAP center round info 60%> | ||
+ | FIXME Der Quellcode enthält noch Fehler | ||
+ | </ | ||
+ | ==== Quellen ==== | ||
+ | * Download des orginales Artikels erschienen in JavaWorld 2005 | ||
+ | * [[https:// | ||
ein_neuronales_netz_fuer_den_nxt_roboter.1706267469.txt.gz · Zuletzt geändert: 2024/01/26 11:11 von torsten.roehl