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: von torsten.roehl
