4027 Neuro Neuronale Logikschaltung
Kategorie:Biologie
Klasse:schwer
Eingabe:String
Ausgabe:siehe Spez
Abzugebende Files: Neuro.txt, Main.java, Neuro/*.java , 1052.txt, 1286.txt

Kurzbeschreibung:

Die Definition für eine neuronale Logikschaltung, (entspricht der Verknüpfung von Nervenzellen) sowie Wertebelegungen der Schaltungseingänge sind einzulesen, danach soll das Ergebnis der Verknüpfung ausgegeben werden.

Allgemeine Hinweise:

Aufgabenstellung:

Die Aufgabe besteht darin, eine (einfache) Verknüpfung von Nervenzellen zu simulieren.
Eine Nervenzelle arbeitet in gewissem Sinne auch digital, das heißt, sie kann entweder einen Impuls weiterleiten oder nicht. Sie besitzt mehrere Eingänge und einen Ausgang. Es gibt (in dieser Simulation) zwei Arten von Eingängen:
  1. Verstärkende Eingänge -> sie sind dafür, daß die Nervenzelle einen Impuls ausgibt, wenn sie angesteuert werden.
  2. Abschwächende Eingänge -> sie sind gegen die Abgabe eines Impulses, wenn sie angesteuert werden.

Wird ein Eingang nicht angesteuert, so verhält er sich neutral.
Die Nervenzelle kann genau dann einen Impuls ausgeben, wenn die Anzahl der angesteuerten positiven Eingänge gegenüber der Anzahl der angesteuerten negativen Eingänge überwiegt. Das bedeutet, daß mindestens ein verstärkender Eingang mehr angesteuert werden muß als abschwächende Eingänge angesteuert werden.
Anleitung :
=> Nervenzelle gibt Impuls ab; wobei (E+) = (angesteuerter) verstärkender Eingang und (E-) = (angesteuerter) abschwächender Eingang).
Das Programm soll zuerst Daten einlesen, die eine einfache Verknüpfung von Nervenzellen aufbauen. Diese Verknüpfung soll eine baumförmige Struktur haben, die Nervenzelle, die das Ergebnis liefert, soll als erste Eingabe definiert werden, danach folgen die anderen (so es welche gibt). Jede Nervenzelle darf beliebig viele Eingänge besitzen, die jeweils Verstärker oder Abschwächer sein können. Die maximale Eingangszahl beschränkt sich wegen der notwendigen Summierung auf den Integer - Bereich. Es dürfen in der Verknüpfung keine Rückkopplungen definiert werden, da die Schaltsimulation statisch sein soll; jedoch dürfen nachfolgende Nervenzellen auch übersprungen werden. Wichtig ist, daß alle Ausgänge letztendlich in die Stammnervenzelle münden.
Zur Veranschaulichung eine kleine Graphik:

Nach der Definition der Nervenzellen müssen noch die Eingangsgrößen an die Startnervenzellen übergeben werden. Bei der Übergabe wird auch gleich festgelegt, ob dieses Signal nun abschwächt oder verstärkt. So viele Eingangsgrößen einer Nervenzelle übergeben werden, so viele Eingänge besitzt sie automatisch.

Eingabedaten:

Bei jedem neuen Datensatz muß die Ausgangsnervenzelle automatisch definiert sein; sie bekommt automatisch die Nummer 1.
Lesen Sie zuerst alle anderen Nervenzellen in Form von Strings ein. Diese Strings sollen Befehlssequenzen erhalten, die wie folgt festgelegt sind:
N[Nervenzellennummer]:=[+/-]N[Nummer der Zielnervenzelle].

[Nervenzellennummer] steht für die Identifikationsnummer der neu definierten Zelle. Diese darf nicht den Wert 1 haben, da der für die (bereits definierte) Ausgangsnervenzelle reserviert ist. Auch ist darauf zu achten, daß jede Nummer nur einmal vorkommt (Jede Zelle braucht ihre eigene Nummer).
Bei unzulässigen Zahlenangaben ist eine Fehlermeldung (siehe Fehlerbehandlung) auszugeben.

[+/-] steht für Verstärker (+) oder Abschwächer (-) in der Zielnervenzelle. [Nummer der Zielnervenzelle] gibt die Identifikationsnummer der Nervenzelle an, in die der Ausgang dieser Nervenzelle münden soll (1 steht für die Ausgangsnervenzelle). Es muß überprüft werden, ob es eine Zelle mit dieser Nummer überhaupt gibt.
Beide Zahlenangaben müssen ganzzahlig und größer 0 sein.

Als Beispiel sei die Nervenzelle N2 aus der Graphik definiert mit: N2:=+N1 Sind alle Nervenzellen definiert worden, dann müssen die Eingangssignale der Schaltung übermittelt werden. Die Syntax dieser Befehlssequenz lautet:

E[0/1]:=[+/-]N[Nummer der Zielnervenzelle] Der Buchstabe "E" bedeutet soviel wie "Eingang", gefolgt von einer 0 (kein Signal) oder einer 1 (Signal).

[+/-] ist wie oben mit Abschwächung oder Verstärkung definiert; [Nummer der Zielnervenzelle] gibt die Zelle an, die mit diesem Signal belegt werden soll. Es müssen alle Anfangsnervenzellen mit mindestens einem Eingangssignal belegt werden.

Nach dieser Definition muß nun angegeben werden, daß der Datensatz zu Ende ist. Dies erfolgt mit dem Abschlußzeichen "=". Die oben dargestellte Verknüpfung sieht wie folgt aus, wenn wir e3 und e5 mit 0; alle anderen Eingänge mit 1 belegen:

N2:=+N1 N3:=+N1 N4:=+N2 E1:=+N4 E1:=-N4 E0:=+N2 E1:=-N1 E0:=+N3 E1:=+N3 =

Ausgabedaten:

Das Programm muß jetzt die einzelnen Eingangssignale gemäß der Schaltung miteinander verknüpfen. Den Beginn müssen die zuletzt definierten Nervenzellen machen, die übergeben ihr Ergebnis an ihre Nachfolger, u.s.w, bis die Ausgangsnervenzelle erreicht ist (Anmerkung: Die Aufgabe ist rekursiv am elegantesten zu lösen). Diese gibt dann entweder das Zeichen "1" für Signal oder "0" für kein Signal, gefolgt von einem Zeilenvorschub aus.

Fehlerbehandlung:

Fehler können syntaktischer Art sein (jegliche Abweichung der unter "Eingabedaten" beschriebenen Form ist als unzulässig zu betrachten), oder logischer Art (unzulässige Zellennummer, beziehungsweise eine Neudefinition einer Nervenzelle nach der Angabe der Eingangssignale).
Tritt ein solcher Fall auf, so ist die Meldung "FALSCHE EINGABE" gefolgt von einem Zeilenvorschub auszugeben.

Beispiele:

Eingabedaten
N2:=+N1 N3:=+N1 N4:=+N2 E1:=+N4 E0:=-N4 E0:=+N2 E1:=-N1 E0:=+N3 E1:=+N3 =

N2:=+N1 N3:=+N1 N4:=+N2 E1:=+N4 E1:=-N4 E0:=+N2 E1:=-N1 E0:=+N3 E1:=+N3 =

Ausgabedaten
1

0


Testen:

Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java Main < Neuro.i1 > Neuro.out1

Das erzeugte File Neuro.out1 können Sie dann mit dem mitgelieferten Outputfile Neuro.o1 vergleichen.