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:
-
Das Beispiel dieser Runde objektorientiert und als package zu lösen. Nachdem Sie das Programm mittels Dialogprogramm abgegeben haben, gehen Sie zu einem Tutor. Der Tutor überprüft, ob Sie Ihr Programm spezifikationsgemäß programmiert haben.
-
Unmittelbar nach der erfolgreichen Abgabe am Dialogprogramm können sie bereits die nächste Runde abholen.
-
Sie haben Lösungen (und Spezifikationen) aus der 3. Runde von anderen Studenten erhalten. Testen Sie alle mitgelieferten Lösungen und wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil,
Korrektheit und Verwendbarkeit am besten erscheint.
- Merken Sie sich die Lösungsnummer des ausgewählten Beispieles für die Abgabe. Diese Nummer müssen Sie bei der Abgabe angeben. Geben Sie nur jene Lösungsnummer an, die Sie auch wirklich ausgewählt haben.
-
Erstellen Sie für alle Lösungen zu diesem Beispiel (siehe: "Abzugebende Files") ein File mit dem Namen <number>.txt. und schreiben in dieses File ein Review (=Kritik) zu der Lösung. Diese Reviews erhalten dann die TeilnehmerIn von dem/der die Lösung stammt. Beachten Sie das bitte bei der Form Ihrer Kritik.
-
Sie können für die Lösung der gewählten Aufgabe eine oder mehrere Klassen programmieren. Die Klasse main.java muß aber die Methode main enthalten. Weiters müssen alle anderen abgegebenen Klassenfiles in Verzeichnis Neuro vorliegen, Pfadangaben sind nicht gestattet.
-
Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei
Klassen und Methoden!
-
Falls Ihre Lösung einen Exit Code zurueckliefert, so
achten Sie darauf, dass dieser den Wert 0 hat.
Bei allen anderen Werten können Probleme bei der Bewertung und in weiterer
Folge unbeabsichtigte Punkteabzüge auftreten.
- Ihre Lösung darf nur genau jene Ausgabedaten liefern, die in der
Spezifikation verlangt werden. Die Ausgaben Ihrer Lösung werden automatisch mit Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
- Testen Sie Ihre Lösung vor der Abgabe mit der mitgelieferten Eingabedatei. Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihrer Lösung mit der ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihre Lösung auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Klassen, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.3.1_1) verwenden, können von uns
nicht getestet werden und werden daher mit 0 Punkten bewertet!
- Schreiben Sie Ihre Klasse(n) möglichst allgemein und kommentieren
Sie diese gut. Erstellen Sie weiters eine übersichtliche und
verständliche Dokumentation. Damit erhöhen Sie Ihre Chancen,
daß andere Studenten in der nächsten Runde Ihre Lösung
wählen und Ihnen damit zu Zusatzpunkten verhelfen!
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:
- Verstärkende Eingänge -> sie sind dafür, daß die Nervenzelle einen
Impuls ausgibt, wenn sie angesteuert werden.
- 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 =
|
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.