Wie programmiert man das?

Robert9

Member
Themenstarter
Registriert
27 Juni 2022
Beiträge
59
Jeden Tag gibt es hier ähnliche Szenen. Die Küche ist ca. 5 mal 5 Meter groß. Rechts und links gibt es Arbeitsplatten.
Rechts stehen am Ende die Microwelle, am Anfang der Kühlschrank. In der Microwelle wird Milch erhitzt, die vorher aus dem Kühlschrank geholt wird. Auf der anderen Seite stehen am einen Ende der Wasserkocher und ein Glas für Kaffeepulver, das auch aus dem Kühlschrank geholt wird. Am anderen Ende steht der Wasserspender.

Jeden Tag mache ich sowas oder was ähnliches:

Milch und Kaffee aus dem Kühlschrank zum Wasserspender tragen. Dort Tasse mit Milch füllen, Glas mit Kaffeepulver füllen. Dann Milch und Kaffee zurück in den Kühlschrank bringen.

Tasse mit Milch 90 Sekunden in die Mikrowelle stellen. Wasserkocher einschalten, kochendes Wasser ins Glas gießen, herumrühren. Das Ergebnis in die Tasse mit Milch gießen. Ab und an muss auch Wasser in den Wasserkocher gefüllt werden. Nicht zu wenig, sonst muss ich dauernd nachfüllen, nicht zuviel, denn sonst erhitze ich ständig unnütz zu viel Wasser.

Weitere Umstände: Jedes Öffnen des Kühlschranks verbraucht Energie, hier sind 30 Grad. Je länger Milch und Kaffee draußen sind, desto wärmer werden sie. Je nachdem welche Reihenfolge ich einhalte, brauche ich mehr Weg in Metern und Zeit in Sekunden.

Mal davon abgesehen, dass diese Kaffeezubereitung nicht wirklich schmackhafte Ergebnisse liefert, überlege ich jeden Tag wie ich das alles optimieren könnte.

Einige Verhältnisse müsste man noch definieren bzw. alles in z.B. in Kosten umrechnen? Wege, Zeit, Trageleistung, Kühlleistung, Erhitzung usw.


Meine Frage nun, wie zur Hölle würde man sowas programmieren? Wo findet man Beispiele, Lehrbücher o.ä.

Vielen Dank vorab, falls jemand was nützliches hierzu beitragen kann.
 
Auf dem C64 gab es ein lustiges Basic mit Zeilennummern, traut sich jetzt mal wer an ein Stück Code?
 
Soll dir jemand einen Algorithmus für TSP programmieren? Wie hier schon geschrieben wurde, gibt's dafür keine allgemeingültige Lösung, sondern nur für Spezialfälle und/oder nur per Brute Force.
Deine Gewichtungen und das Aussortieren von nicht in Frage kommenden Lösungen musst du außerdem selbst vornehmen, das kann niemand für dich tun - und das musst du schon in irgendeiner mathematischen Schreibweise oder in Pseudo-Code erledigen. Dann kann man auch "echt programmiertes" daraus machen.
 
Also kann es keiner und/oder will keiner?
Die Frage ist und bleibt: Wie programmiert man sowas?

a) eine Liste mit Orten welcher Ort von welchem Ort erreichbar ist und wie lange der Weg ist. Liste ändert sich mit erreichten Zielen.
b) eine Liste mit Zielen, die erreicht oder nicht erreicht sind.
c) Regeln, dass der nächste Weg immer nur vom aktuellen Standort aus geführt werden darf.
d) Abbruchregeln für einen möglichen nächsten Schritt
e) Anzahl der maximalen Schritte, damit sich das nicht tot läuft?
f) Eine Speicherung von bisher ausgeführten Wegen, damit man sie nicht nochmals geht?
h) eine Wahrscheinlichkeit von 1/mögliche Ziele für den nächsten Weg

Schritt 1: Start = A, aktueller Ort = A; vor der Küche.
Wähle mit Wahrscheinlichkeit 1/4 Kühlschrank, Mikrowelle, Wasserkocher, Spüle
(Wasser für den Wasserkocher kommt später dazu, man muss den Wasserkocher erst erreicht haben für die Frage: Neues Wasser nötig.)

Angekommen: Wurde eines der Ziele erreicht? Dann Flag setzen.

Schritt 2 ...



Abbruch wenn
- schrittzahlMax erreicht.
- alleZiele erreicht

Man müsste aber auch schlechte Wegfolgen erkennen? Wie? Wie speichern?
Oder ist das erstmal egal, weil auch der C64, den wir emulieren müssten, innerhalb von einer Minute mit vielfach doppelten Wegfolgen alle Möglichkeiten versucht hat?

Und wie würde man doppelte Wege finden?

Und wie speichere ich das? Als char mit "ABDACB..."?

In der Regel steht das Wasserglas für Wasser plus Kaffee neben dem Wasserkocher. Die Tasse aber steht an der Spüle, so dass ein weiteres Punkt dazu käme. Wir haben nur zwei Hände. Dazu kommt der Standort vom Messbecher, um Wasser zu holen. Der sollte zwar am Wasserspender stehen (ein weiterer Ort!), aber tatsächlich steht er auch am Wasserkocher. Version zwei könnte solche Wahrscheinlichkeiten berücksichtigen wollen? 9:1 steht der Becher am Wasserkocher. Aber 7:3 bringe ich die Tasse aus dem Wohnzimmer mit und spüle sie nicht erst aus, also habe ich sie in der Hand, wenn ich in die Küche komme. So könnte ich zwar Wasser auf Verdacht mitnehmen, falls der Messbecher am Wasserspender steht, aber nicht Milch und Kaffee aus dem Kühlschrank holen. Außer, ich führe als weiteren Ort die Arbeitsplatte neben dem Kühlschrank ein.
Dann würde ich zumindest die Milch nur bis hierhin tragen, müsste aber zum Glas oder das Glas holen.


Y1: Wasserkocher ----- Spüle ---- Y-- Wasserspender -----\

------------------------------------------------------ Startpunkt mit 7:3 Tasse in der Hand, sonst Tasse bei Spüle.

Y2: Mikrowelle -------------------X- Kühlschrank ----------/

Y = möglicher Standort Wasserbecher, 9:1 Wasserbecher beim Wasserkocher
X = Möglicher Füllort anstatt bei Wasserkocher


Bei Startpunkt zu Punkten wird Y vernachlässigt, denn ich kann ja Y1 oder Y2 anfahren.
Y1 > Y2 3m
Wasserkocher > Spüle 3m
Spüle > Wasserspender 2m
Mikrowelle > Kühlschrank 4m
Die Diagonalen kann man leicht ausrechnen lassen.
Y und X sind 0,5 Meter von Wasserspender bzw. Kühlschrank weg.

Ziele:
Milch aus Kühlschrank
Milch in Tasse
Milch in Kühlschrank

Milch in Tasse in Mikrowelle (dauert 90 Sekunden)

Kaffee aus Kühlschrank
Kaffee in Glas
Kaffee in Kühlschrank

Wasser kochen im Wasserkocher (dauert eine Minute)
Ist kein Wasser im Wasserkocher, muss es mit dem Messbecher vom Wasserspender geholt werden. Leider ist das Ding lahm, das dauert 15 Sekunden.

Wasser ins Glas, nachdem Kaffee im Glas
Tasse in die Mikrowelle, nachdem Milch in Tasse

Wenn Kaffee plus Wasser im Glas und Milch erhitzt, muss die Kaffeebrühe in die Tasse.

Milch und Kaffee müssen nach 120 Sekunden wieder im Kühlschrank sein.


Ich kann mir jetzt vorstellen, wie ich das Programm maximal 30 Aktionen angehen lasse.
Und ich kann das 1000 mal durchlaufen lassen in der Hoffnung alle Möglichkeiten berechnet zu haben,
da wir nicht auf dem C64 sind und den auch nicht emulieren, sind auch 10.000 Versuche sicherlich kein Hexenwerk.

Aber das kann erst der Anfang sein.
Am Ende brauche ich alle Folgen mit vollständiger Zielerfüllung und dann sucht man sich die mit dem kürzesten Weg, alternativ mit der kürzesten Zeit, wobei noch die Zeit für die Wege fehlen.

Weitere Extras: Das Wasser soll kochen, wenn es eingeschenkt wird. Da mich das Gepiepse der Mikrowelle nervt, bin ich ganz gerne ganz kurz davor eben da.
Beitrag automatisch zusammengeführt:

Wir gehen nicht zur Mikrowelle, wenn wir keine Tasse Milch in der Hand haben oder die Milch in der Mikrowelle steht.
Wir gehen nicht zum Kühlschrank, wenn wir nicht mindestens Milch oder Kaffee in der Hand haben.
Milch abstellen, Milch nehmen, sind weitere Schritte.
Kaffee abstellen, Kaffee nehmen, sind weitere Schritte.

Standort Milch, Standort Kaffee.
Tragen kann ich maximal zwei Sachen.
Aber eigentlich will ich nichts herumtragen, wenn ich es nicht brauche? Es könnte den Weg verkürzen?

Wie verbindet man Fragen und Zustände?
 
Zuletzt bearbeitet:
Bei 30 Aktionen gibt es 30! mögliche Reihenfolgen. Das ist eine 32 stellige Zahl. 1000 sind zu wenig.
Du musst dir auch nicht die Wege notieren, sondern nur die Ziele.
Bei 3 Aktionen gibt es also 6 Möglichkeiten, in welcher Reihenfolge du die Ziele abläufst:
ABC, ACB, BAC, BCA, CAB, CBA.

Bei so einer großen Menge an Stationen wäre folgendes Vorgehen naiv aber halbwegs sinnvoll:
Erstelle 5 komplett zufällig Startpopulationen (einfach randomisierte Permutationen). Die schnellsten beiden nimmst du und randomisierte darin wieder Sequenzen, deren Position und Länge du entweder vorher bestimmst oder auch wieder randomisierst. Daraus (inkl. Der Ausgangspopulation) nimmst du wieder die besten Ergebnisse und randomisierst wieder Sequenzen...
Das Vorgehen (starte mit n, picke die besten m, randomisiert Sequenzen o Mal, picke die besten m...) wiederholst du maximal z.B. 5 Minuten.

Dabei kommst du entweder dem globalen Minimum sehr nahe oder verreist dich in ein lokales Minimum.

Eine Alternative wäre mindestens eine Startpopulation greedy (geizig - nimm immer den aktuell billigsten Weg) zu erstellen und auch greedy wieder zu randomisieren (bestimme die 5 billigsten Wege und picke zufällig einen davon).

Usw. Usf. Beschäftige dich mit heuristischen Algorithmen. Das ist 2. Semester Informatik. Das wird dir tatsächlich nur jemand, der entweder gerade Informatik studiert (hat) best möglich lösen können, oder jemand, der das beruflich macht.
 
In einem Teaser-Video heißt es, dass man das Rundreiseproblem mit einem anständigen Rechner aus 2023 ab einer gewissen Anzahl von Städten nicht lösen könne, weil die Rechenkapazität fehlen würde. Bei 35 Städten würde man Millionen von Jahren rechnen müssen.

Ich habe maximal fünf Stationen, aber kann/muss manche Station mehrfach besuchen. Wird das nicht auch viel zu umfangreich?
Andererseits habe ich Spielregeln, die das ganze deutlich einschränken.


Ich nehme mal an, dass ich erstmal keinen Rechner habe, nur eine Stoppuhr.
Nun versuche ich verschiedene Wegfolgen und schränke dabei die Möglichkeiten massiv ein.

Ich werde nicht zur Mikrowelle gehen ohne Tasse mit Milch in der Hand oder Mikrowelle bestückt und fertig.
Ich gehe nicht zum Wasserkocher ohne Wasser oder Kaffee oder Wasser kocht, falls Glas und Tasse da stehen.
Ich gehe auch nicht zur Spüle, wenn die Tasse in der Hand oder am Wasserkocher ist.

Und genau sowas muss ich dem Rechner erklären.

Z.B. indem ich jedem Ort eine Bitfolge zuweise.

Start: 00110 Mikrowelle, Wasserkocher, Kühlschrank, Wasserspender, Startpunkt

Wenn bestimmte Sachen erreicht sind, müssen die Bitfolgen verändert werden.
Sobald ich das erste Mal am Kühlschrank war, fällt der erstmal weg usw.

So sinkt die Anzahl der Möglichkeiten deutlich.

Wie aber setze ich die Regeln um?

Jeder Ort muss eine Liste mit Aktionen haben, wieder Bitfolge 0/1
Ein übergeordnetes Register speichert Zustände ohne Verbindung zu Orten (Milch, Kaffee im Kühlschrank 0/1)

Und es fehlt noch eine zeitliche Komponente, nämlich Wasser kocht nach einer Minute, Milch ist nach 90 Sekunden heiß.
Und die Funktion "Warte!". Dann müsste man noch eine Art Zeitstrahl mitloggen.



Alternativ und anschaulicher: Sprites von Zelda auf dem SNES müssten zu kriegen sein.
Link steht vor der Küche und rennt in Echtzeit zum Kühlschrank oder zum Wasserspender, erweitert: Tasse aus Spüle holen, Glas vom Wasserkocher holen, beides am Kühlschrank abstellen.

Wasserspender (+Wasser), Spüle (+Tasse), Wasserkocher (-Wasser, + Wasserkocher mit Wasser, + Glas), Wasserkocher einschalten,
Kühlschrank (-Glas, -Tasse, +Milch/Kaffee, Tasse mit Milch, Glas mit Kaffee), Milch/Kaffe in den Kühlschrank.
Mikrowelle (Tasse mit Milch, starten),

Jetzt habe ich nichts zu tun, warte 90 Sekunden.

Alternativ Glas zum Kocher, denn der müsste dann mal fertig sein. Einschenken.
Und dann wieder zur Mikrowelle.

Oder aber Milch, Kaffee bei der Mikrowelle einfüllen und die Wartezeit nutzen um das zurück zu bringen,
denn dumm herumstehen geht gar nicht. Ein Blitzt kommt vom Himmel, Spieler tot, Game Over.

Oder zur Spüle und Geschirr waschen? Was nicht gemacht werden muss, aber gemacht werden kann. Das gibt dann Bonus-Punkte.

Die Schwierigkeit sind wohl die Regeln, wie ich sie umsetze und das möglichst kurz, aber noch lesbar.


Du musst dir auch nicht die Wege notieren, sondern nur die Ziele.
Du magst recht haben, ich kann es mir nur nicht vorstellen. Denn der Ort bzw. Orte müssen mit dem Ziel verbunden sein.
Milch erwärmen geht nur in der Mikrowelle, aber Kaffee in Glas und Milch in Tasse gehen überall, wo Tasse bzw. Glas gerade sind.

Hmmm ...
Also nur Ziele aufschreiben?
Milch/Kaffee aus Kühlschrank holen
Milch in Tasse, wo ist Tasse? Milch zur Tasse oder Tasse zur Milch oder Tasse/Milch irgendwohin und dann Tasse/Milch ebenda hin?



Da fehlt noch das Attribut Ort für den Laufburschen und die Gegenstände.
 
Zuletzt bearbeitet:
Mit einem BWL-Studium in der Tasche solltest Du doch in der Lage sein, das Problem klar und verständlich zu formulieren. Damit könntest Du dann z.B. ChatGPT füttern.
 
Ich werfe mal einen Brute-force Ansatz ein:
5 Stationen --> Zahl der Permutionen = 5! --> 120 Möglichkeiten
Also das kannst du sogar als BWLer auf Papier lösen :)
 
So weit waren wir schon und dann waren es plötzlich 30 Stationen.

@Robert9 Wartezeiten gehören zur Wegstrecke. Du wirst wohl nicht stateless auskommen und dir eben merken müssen, dass du die Mikrowelle nicht ansteuern kannst, bevor du nicht am Kühlschrank warst, um Milch zu holen.
Trotzdem würde ich erstmal mit dem zugrunde liegenden Problem (TSL) anfangen und mich von da weiterarbeiten um den Ergebnissen Sinn zu verleihen.
Finde erst einen Algo, der dir mit hoher Wahrscheinlichkeit die beste oder eine sehr gute Wegstrecke ausrechnet und dann fange an Bedingungen einzufügen.
 
Ooops, überlesen ... so viel Text und kein Inhalt ... oder besser: Fragen, den jedes Einführungsbuch in Programmieren beantwortet.
 
Also kann es keiner und/oder will keiner?
Die Frage ist und bleibt: Wie programmiert man sowas?

a) eine Liste ...........................................

Und wie speichere ich das? Als char mit "ABDACB..."? .........Wie verbindet man Fragen und Zustände?
Jetzt antworte ich doch noch mal, Lösungsvorschlag nach einer kleinen Story. Ich hatte solche Probleme immer wieder mal beruflich zusammen mit Kunden zu lösen (70er 80er Jahre) - IT Mainframeplanung und Vernetzung, Filialnetz für Banken/Versicherungen bei damalige Leitungskosten, Standorte für Konzentratoren (Netz-Knotenrechner), usw.. Damals mit IBM MPSX+MIP/3... (FORTRAN-Basis) und IBM APL. Es ist zwar ein TSP Problem, aber mit Nebenbedingungen. Story:

Ich habe mir den Spaß gemacht, Googles Pilot etwas zu ärgern. Die erste Frage: "Kannst ein TSP Programm schreiben ?" "Nein leider nicht. Das TSP Problem ist nicht exakt lösbar. .... Noch eine neue Frage ??" Habe leider kein Screenshot gemacht und bei Wiederholung später hatte der schon dazu gelernt und mir für TSP den USA-Rentenplan zusätzlich angeboten *LOL*. Dann habe ich etwas spezifischer direkter in EN gefragt. Außer dem Rentenprogramm kam dann jetzt noch:
can you write a tsp program

Certainly! Here’s a simple implementation of the Traveling Salesman Problem (TSP) using a naive approach in Python. This program finds the minimum weight Hamiltonian Cycle (shortest route) that visits every city exactly once and returns to the starting point:
Den Text lasse ich weg, war die triviale Lösung alles nur einmal (fett gedruckt). Dann noch etwas weiter gebohrt und auf einmal:
You've reached the conversation limit for today.
Als ich mich vom Lachen erholt habe, einfach Firefox Restart (löscht alles an Cookies etc.) und noch mal Google Pilot. Also: Gedächtnis hatte er keines, aber jetzt wollte ich nicht mehr :) .

Lösungsvorschlag @robert: Du hast doch nur wenige Stationen in der Küche 5-6 oder 7, ich blätter nicht rückwärts. Dazu machst Du eine Matrix, sagen wir 7x7 Felder (Kühlschrank, Microwelle, Tisch, ..... als [Wege-]Knoten=Zeilen- und Spalten-Header). In jedes Matrix-Feld erst mal die Entfernung und Wegezeit formlos reinschreiben, alle Felder hin und rück, falls ein Weg ausgeschlossen wird, Null oder Marker rein. Dann schreibst Du für jeden Knoten und dessen Wege (falls kein Wege-Ausschluß) erst einmal formlos die Nebenbedingungen rein. Das können auch logische Bedingungen, Wartezeiten o.ä. sein. Z.B. Microwelle wait 3 Min. Rückweg <2min sonst Milch kalt, usw.

Danach hast Du erst einmal einen Überblick (formlos je Matrixfeld) und eine programmierbare Grundlage. Wie und mit welchen Mitteln dann programmiert wird, hängt von Deinen Möglichkeiten ab, d.h. welche Tools Dir verfügbar sind. MPSX/MIP sind für solche Matrix-Arbeiten inkl. >,<,= etc. Verknüpfungen als Beispiel bereits vorgesehen. Mit FORTRAN oder APL würde ich jetzt ansonsten die Matrix Feld für Feld abklappern, oder welche Programmsprache auch immer Dir geläufig ist (die Nebenbedigungen als Subroutinen relativ einfach ein zu binden) . Zwei Varianten sind möglich: alle Routen auflisten, die mit evtl. Schwellwerten (Gewichtung) die Nebenbedingungen erfüllen, oder als Sieb alles schlechtere ab einem Schwellwert rauswerfen und den Rest auflisten. Ergebnis sollte gleich sein, ist eine Frage der leichteren Programmierung. Es gibt dazu auch einiges im Netz. Aber ..... bevor man sich (ich zumindest) da durch sortiert hat, hat man es bei den paar Knoten auch selbst programmiert

Ich würde mit Nebenbedingungen kein eigenes Faß aufmachen, sondern die an den Weg oder an den Knoten binden (dann je nach Bedingung in mehrere entsprechende Matrix-Felder=Wege). Du arbeitest die Wege danach stur mit jedem Matrixfeld ab (Diagonale sollte leer sein)*1.

Bei der Knotenanzahl sollte das als "brute force"-Methode auf heutigen PCs klappen. Ansonsten frage einfach den Piloten von Google, der ist zumindest unterhaltsam und meldet Dich zur Not in USA zur Rente an *duck*.

Gruß Peter, viel Spaß und Grüße an Googles Piloten :) ....................

*1 natürlich in allen möglichen Reihenfolgen, geht mit verschachtelten loops, bei denen einzelne Ausschlüsse und Mehrfachwege mit programmiert werden können. Sorry, der Vollständigkeit halber nachgetragen.
 
Zuletzt bearbeitet:
Machen wir das mal anders, Euer Sohn kommt zu Euch und beschwert sich, dass der Informatikunterricht an der Privatschule voll lame sei. (Er meint langweilig.)

Stattdessen will der Sohnemann ein echtes Problem lösen, und da er Euren täglich Ablauf der Kaffeezubereitung kennt und sich immer mal wieder wundert, dass dieser Ablauf nicht wirklich strikt eingehalten wird, möchte er von Euch ganz konkret wissen wie man sowas programmiert.

Weil nicht dumm hat er schon einiges mit der Stoppuhr ausprobiert, und sich einen Zettel gemacht, was ihm dazu eingefallen ist.
Ein toller Vater setzt sich jetzt sicherlich mal fünf Minuten mit dem Sohnemann hin und überlegt wie man das mit seinen Mitteln angehen könnte.

Also nehmt das mal eine Runde ernster!

Startposition plus vier Anlaufstellen. Drei und zwei Objekte. Zwei Geräte. Ein Stall voller Regeln und Zuständen und Zielen.


PS:
Cobol, Fortran und Co will der Sohnemann nicht lernen, obwohl er neulich noch gehört haben will, dass Spezialisten hierfür rar seien und gesucht würden. Den C64 kennt er vom Hörensagen. Mit HTML und PHP kennt er sich schon ganz gut aus, gerne ohne den Klassenkram. Phyton wäre wohl die nächste denkbare Sprache zum Lernen. Java, C und sowas kann er gar nicht leiden.

In der Regel nutzt er PHP unter WSL auf Windows. Das sollte hierfür reichen, oder?
 
Zuletzt bearbeitet:
Stattdessen will der Sohnemann ein echtes Problem lösen, und da er Euren täglich Ablauf der Kaffeezubereitung kennt und sich immer mal wieder wundert, dass dieser Ablauf nicht wirklich strikt eingehalten wird, möchte der Sohnemann von Euch ganz konkret wissen wie man sowas programmiert.
Das gleich in den ersten Post und einiges wäre hier sicher anders formuliert worden, zumindest von mir.

Dein Sohnemann kommt um eine Matrix (Tabelle) nicht drum herum, die nach einem Graphenbild z.B. https://www.geeksforgeeks.org/traveling-salesman-problem-tsp-implementation/ alle Knoten als Zeilen- und Spaltenheader hat. Ich habe "formlos" geschrieben, weil man in die Felder sinnvollerweise die Nebenbedingungen schreibt. Anders kriegt man keinen sinnvollen Überblick für einen Algorithmus. Womit dann programmiert wird, ist herzlich wurscht. Die Tabellenfelder sind letzlich durchnummeriert ( bei meinem Beispiel 7x7 von 1-49 oder 1;1 bis 7;7) und die möglichen Reihenfolgen werden abgeklappert. Die Computer arbeiten auf unterstem Level immer noch sequentiell (pro processor), egal ob NP oder AI drüber steht. Mit der vorgeschlagenen Tabelle hast Du die Probleme sortiert und mußt jetzt nur noch die Reihenfolge der Wege festlegen bzw. auf dem PC durch spielen.

Das ist (war zumindest) auch gängige Methodik bei Zustandsdiagrammen von "finite machines", d.h. Programm- oder Nachrichtenabläufen in Netzwerken und deren Kontrollern (Netzknoten und Leitungen). So wie im post #27 kriegst Du das in keinen Rechner rein, auch nicht in den Piloten von Google (den ich ja zu meinem Vergnügen mal damit getratzt habe). Das ganze AI Geschwafel ist sinnlos, wenn ein mehrteiliges Problem nicht sauber zerlegt wird. Ich denke, so eine Tabelle kriegt ein 8jähriger problemlos hin. (Über Lehrer ...........hatte ich früher die Meinung Deines Sohnemannes :) , und nicht jeder Lehrer mochte das so richtig).

Wenn Du beruflich mit IT nichts am Hut hast, ist das durchaus schon normal. Freunde von mir, Bankdirektoren i.R. machen nicht einmal als gelernte Banker Online-Banking, sondern der Enkel hat den PC dafür geschenkt bekommen. Mein Frau faßt als gelernt Bankkaufmann/-frau den PC und TP auch nicht an.

Gruß Peter

PS wenn es außer Zeit- und Weglänge noch weitere numerische Werte pro Knoten/Weg gibt, macht man evtl. weitere deckungsgleiche (Zeilen/Spalten-)Tabellen, gilt auch für die Nebenbedingungen. Dann hast Du ein n-dimensionales Konstrukt, daß aber ähnlich programmiert wird. Damit wollte ich jetzt nicht einsteigen. So was N-dimensional zu programmieren ist leichter als einem "Unbeteiligten" zu erklären :) . Für das Frühstücksproblem würde ich alles in eine Tabelle mit viel Platz je Feld schreiben. Ist einfach übersichtlicher.

Als Hilfe (für Sohnemann) evtl: https://www.geeksforgeeks.org/array-data-structure-guide/?ref=lbp (array => Matrix => Tabelle)
 
Zuletzt bearbeitet:
Eine 7x7 Matrix erscheint mir als Laie ein seltsamer Weg zu sein, warum sollte ich mich mit 49 Feldern belasten, wenn ich nur 4 Punkte brauche?

Ich stelle mir das so vor:

Start=E, und ABCD. Die vier Punkte haben
- ein Register/Bitfolge für offene Wege zu den anderen Punkten.
- ein Register für ortsbezogene Zustände und anwesende Objekte.
- am Ende werden ABCD auf 0 und E auf 1 gesetzt.

Die Objekte Tasse, Glas, Kaffee, Milch, Wasserspender haben eine Variable für den aktuellen Ort.
Und ein Register für Zustände. Voll mit Milch, voll mit heißer Milch, voll mit heißer Milch und Kaffeewasser.

Ein weiteres Register speichert allgemeine Zustände? Was ist zu tun, was ist erledigt?
aktuellerOrt speichert den aktuellen Ort von mir.

Ich starte mit der Variablenzuweisung, laufe los.

Wo bin ich? E, wohin kann ich gehen, theorethisch ABCD, aber
ich gebe vor, dass nur A und B, Kühlschrank und Wasserspender möglich sind.
Mikrowelle ist nicht offen, weil leer und/oder ich keine Tasse mit Milch in der Hand habe.
Nachtrag: Ich könnte Glas und Tasse vom Wasserkocher holen.

Mit Wahrscheinlichkeit 1/3 erreiche ich A oder B oder D

Hmm, Orte müssen noch Handlungsanweisungen haben?
Oder aber die Objekte?
Oder die Schritte anhand der Vorgaben für Orte und Objekte und Zustände.

Wo bin ich jetzt? Bei A.
Gibt es Objekte bei A? Ja, Milch und Kaffee.
Welche Funktionen gibt es zu Milch und Kaffee?
Mitnehmen!

Also brauche ich noch ein Register: wasTrageIch
und eine Liste mit Funktionen wie:

Nehmen, Absetzen, Anschalten, Füllen.

Und Objekte brauchen eine Liste mit Wünschen:
Tasse will Milch
Glas will Kaffee, wenn leer
Glas mit Kaffee will kochendes Wasser.
Tasse will Milch,
Tasse mit heißer Milch, will Kaffeewasser

Hmmm ...

Gehe A
Bei A Kühlschrank durchlaufe?
Kaffee, Milch da, nehmen.
Kaffee, Milch in Hand, neben den Kühlschrank stellen oder mitnehmen und nächster Schritt.
* Verhindere unsinnige Aktionen wie: erst abstellen, dann mitnehmen, wenn sonst nichts passiert.

So in der Art, ich versuche den Rechner quasi wie eine Küchenhilfe anzulernen.

Jeder Ort und jedes Objekt müsste also eine Liste mit möglichen Schritten haben, die nach Werten in den Registern abgearbeitet werden, oder auch nicht.

Mal angenommen ich habe Milch und Kaffee in der Hand, E Start fällt aus, auch B Wasserspender fällt aus, den ich habe die Hände voll. Mikrowelle C fällt aus, denn Zustand der Tasse ist leer und nicht voll mit Milch.
Es bleiben A Kühlschrank (daneben abstellen) oder D Wasserkocher.
Ergebnis 1/2 Kühlschrank. Abgestellt.
Nehmen? Ja, dann zu Wasserkocher. Rest gesperrt.
Nein, mit leeren Händen weiter. Offen Wasserspender, denn mit nichts zum Wasserkocher laufen, wenn kein Wasser drin, passt nicht.
Alternativ eben mit Milch/Kaffee zum Wasserkocher.

Weil Glas und Tasse beim Wasserkocher stehen, die Spüle lasse ich erstmal weg.

Muss ich am aktuellenOrt die anwesenden Objekte durchgehen. Milch, leere Tasse - Tasse mit Milch füllen. Kaffee - leeres Glas, Glas füllen.
Beispielhaft Register setzen: Glas voll, Tasse voll, was zu A Kühlschrank wieder erreichbar macht, falls man Milch und Kaffee in der Hand hat.
Bzw. man kann Milch und Kaffee wieder nehmen, was dann A Kühlschrank wieder möglich macht.


Das ist ein Ansatz, der so wie ich glaube programmiert werden kann. Es bleibt die Frage, ob der Rechner das rechnen kann, ich denke schon, denn die Weg und Aktionen sind sehr stark beschränkt.

@albert66, verstehst Du meinen Ansatz?

Nicht zuletzt könnte man das zumindest theorethisch in UNITY angehen und dann auch anzeigen, was passiert.

Figur geht zu Kühlschrank oder Wasserspender. Nimmt Milch/Kaffee oder Wasser. Stellt Milch/Kaffee neben Kühlschrank ab oder geht zu Tasse/Glas beim Wasserkocher bzw. bringt Wasser zum Wasserkocher.

Nutzt man Link aus Zelda als Sprite hält der jede Menge Sachen hoch, Glas, Tasse, Milch+Kaffee kriegt man da mit bestehenden Sprites evtl. hin.

Für den ersten Schritt sehe ich zwei Möglichkeiten.*
Für den zweiten Schritt zwei oder eine.
...

Wasser holen oder Milch/Kaffee holen.
Wasser zum Wasserkocher bringen oder (Milch/Kaffee abstellen oder zum Wasserkocher bringen.)
Wasserkocher einschalten und/oder Milch/Kaffee in Tasse/Glas oder Tasse/Glas zum Kühlschrank, falls Milch und Kaffee dort stehen.


*Wobei ... man könnte D doch zulassen beim ersten Schritt, denn ich könnte auch gleich Tasse/Glas zum Kühlschrank bringen, dort füllen, Milch/Kaffee wieder wegstellen und dann (zur Mikrowelle und dann zum Wasserkocher oder umgekehrt.)

Ich muss wohl noch ein bisschen daran feilen. Ich ahne jedenfalls, dass das sehr speziell und ziemlich reguliert sein wird. Somit gibt es geschätzt vielleicht nur zwei Hände voll an Möglichkeiten.


Noch ein Nachtrag:

Ich ahne mal: Wasser bei B holen, zu C Wasserkocher, füllen, anschalten.
Tasse/Glas zum Kühlschrank, Milch/Kaffee raus, Tasse/Glas füllen, Milch/Kaffee in Küjhlschrank.
Mit Tasse/Glas zur Mikrowelle, Tasse rein, starten. Mit Glas zum Wasserkocher, Wasser sollte fertig werden, Wasser einfüllen.

Problem jetzt: Ca. eine Minute Wartezeit.

Dann zur Mikrowelle Tasse holen, zurück zum Wasserkocher, Brühe eingießen, fertig und zum Start E.
In der Minute könnte man den Messbecher wieder zum Wasserspender stellen.

Und ich habe vergessen, dass ich im realen Leben sehr oft mit der Tasse aus dem Wohnzimmer komme.
Was aber nichts ändert. Mit Tasse zum Wasserspender, Messbecher füllen, zum Wasserkocher, füllen, starten, Glas nehmen ...
 
Zuletzt bearbeitet:
Also nehmt das mal eine Runde ernster!
Echt jetzt? Das muss ich mir nicht geben. Ich bin raus. Ich habe dir und damit auch deinem Sohn alles an die Hand gegeben, was nötig ist. Vielleicht ist das auch einfach noch etwas zu hoch für ihn und er sollte mit Tic Tac Toe anfangen. Es ist wie gesagt Zweitsemester Informatik. Und nicht Mittelstufe Gymnasium.
In der Regel nutzt er PHP unter WSL auf Windows. Das sollte hierfür reichen, oder?
Sein Problem. PHP ist AFAIR Turing vollständig. Damit geht es also sicher. WSL keine Ahnung. Sollte aber auch.
 
Du hast 5 Orte (Ausgangspunkt zählt mit) und 4 Objekte (Wasserspender ist bereits als Ort verbucht, oder soll der auch nach Füllung bewertet werden?). Dazu kannst Du Dir aussuchen, ob Du eine 9x9 Tabelle nimmst, oder 5x5 plus in dritter Dimension mit 4 Objekten verknüpfst, dann wird es lustig.

Das ganze ist eine deterministische Prozedur, keine stochastische. Du mußt die Fälle gewichten. Dazu gehören Wahrscheinlichkeiten erst später. Du mußt alle Möglichkeiten erst durchlaufen und gewichten, bzw. "bemaßen". Ausschließen kannst Du nur objektiven Unsinn. Danach kannst Du ja entscheiden, was "wahrscheinlich" ist.

Es macht keinen Sinn, da jetzt noch "Zustände" mit rein zu bringen. Dann bist Du Null-Komm-Nichts beim Schachbrettproblem mit der Verdoppelung der Reiskörner. Ich würde erst einmal das Wegeproblem lösen (5x5). Dem Weg ist es wurscht, ob eine Person mit Milch oder Kaffee oder Wasser läuft, entscheidet sich am Ort (Knoten). Spiele doch einfach mal mit der 5x5 Matrix alles durch. Die 25 Wege (inkl. Pause in der Diagonale). Je nachdem wieviel Wege aneinander gereiht (auch wiederholt) werden müssen ............ da kannst Du immer noch unterschiedliche Objekte/Zustände zuordnen. Einfach mal anfangen auf dem Papier.
Das ist ein Ansatz, der so wie ich glaube programmiert werden kann. Es bleibt die Frage, ob der Rechner das rechnen kann, ich denke schon, denn die Weg und Aktionen sind sehr stark beschränkt.
Für ein Programm .......................... der Rechner lernt nicht, der macht was Du ihm vorschreibst, auch bei KI und NP braucht der Vorgaben (Algorithmen).

Microsoft:
Unter künstlicher Intelligenz (KI) verstehen wir Technologien, die menschliche Fähigkeiten.................... ergänzen und stärken.
Also muß erst mal was da sein ................................
Gruß Peter
 
Beim Einschlafen ist mir aufgefallen, dass es weitere Wege gibt. Mit Tasse den Messbecher holen, beides am Kühlschrank abstellen, Milch in Tasse zur Mikrowelle ... oder nur Tasse abstellen und mit Wasser zum Kocher ...

Heute morgen dann, die Erkenntnis, dass Dein Ansatz alles mögliche durchlaufen soll und mit Gewichtung, Filter, Variationen, was auch immer zu einer Lösung kommen soll, den Gedanken hatte ich ja zwischendurch. Während ich jetzt die sinnvollen Wege schon vorher durch Überlegung finden will, um sie dann nach irgendwelchen Kriterien zu vergleichen.

Somit also eine Spielfigur, der man bestimmte Wege erlaubt, und einer Spielfigur, die alles darf und man ausrechnet, was der beste Weg sein wird. Eine schöne Definition von Mensch, der schon vor dem Loslaufen ein paar Regeln aufstellt und dem Rechner, der in der Theorie einfach alles anschauen kann, eben auch mit leeren Händen zur leeren Mikrowelle rennt oder ohne Wasser den Wasserkocher besucht.

Der Unterschied liegt demnach in meiner Erfahrung als Mensch bzw. in meiner Vorstellungskraft. Umgekehrt kann ich mir nicht vorstellen wie ein Rechner sich sowas vorstellen soll, oder eben doch indem man ihn trainieren lässt, sprich alles durchspielen und die Ergebnisse abspeichern lässt.
Wenn der Rechner noch trainiert unterschiedliche Sachen zu bewerten, Bad putzen, Kaffee machen, könnte er sowas wie einen allgemeinen Erfahrungswert bekommen wie ohne Wasser nicht zum Wasserkocher, und ohne Putzmittel nicht ins Bad.

Was das Schachbrett angeht, mag ich mich täuschen, aber ich sehe bei meinem Ansatz nicht wirklich viele Möglichkeiten, eben weil ich verschiedene Register festlege und diese nach jedem Schritt ändere, und sei es nur den Schritt- und den Zeitzähler, womit auch die 90 Sekunden Milch und 60 Sekunden Wasser, erledigt sind. Wenn es nichts sinnvolles mehr gibt, heißt der nächste Schritt +10 Sekunden auf dem Zähler bzw. als Eintrag im Log.

Wir betrachten das unterschiedlich, wie oben angesprochen, Du baust etwas sinnvolles, denn man lässt den Rechner gute Wege aus allen Wegen finden, das ist nachher auf die Welt übertragbar. Ich gebe aber strikte Regeln vor, so dass es nur eine Handvoll Wege geben wird. Was auch immer dabei herauskommt, bringt die Welt nicht weiter, weil viel zu speziell, aber zum Lernen eine gute Sache, den Rest dann vielleicht später oder in einem zweiten Semester ...

Ansonsten bin mir sicher, dass ich alles sinnvolle in zwei Stunden real ausführen könnte. In der Regel kostet mich so ein Kaffee geschätzt drei Minuten inklusive irgendwas wegspülen.

Ich könnte Computer spielen und meine Wege/Schritte aufschreiben, und versuchen doppelte Wege/Schritte zu vermeiden ohne ganz dumme Sachen zu machen wie 30 mal was hinstellen, 30 mal was nehmen.
 
Zuletzt bearbeitet:
Du mußt Dich entscheiden, ob Du alle Varianten testen, prüfen oder was auch immer willst, oder nur 3-4 eigene Ideen vergleichen willst. Mit der Matrix machst Du paarweise (Knoten-Knoten) alle möglichen Wege fest. Danach mußt Du die Reihenfolgen festlegen und die beste suchen. Der Computer rödelt einfach nur schneller alle Reihenfolgen durch und gibt Dir Zahlen bzw. Werte für jede Variante.

Der denkt nichts, der macht nichts von sich aus, der bewerte auch nichts, lernt auch nichts ........... der ist so saudumm wie ein leeres Regenfaß, in das Du erst mal Wasser rein laufen lassen mußt. An Kreativität und Inspiration schlägt den der dümmste Hund. Sorry, mit Humor gemeint. Du überschätzt die Computerei total. Der kann nur schneller zusammenzählen und schneller Massen von Daten durchackern. Aber was und wie er es machen soll, mußt Du ihm per Programm beibringen.

Wir sind an einem Punkt, der mich allgemein heute so irritiert. Jeder, der per Smartphone von einer App "angeleitet" wird (oder sich läßt), macht genau das, was ein anderer festgelegt hat - für ihn gedacht hat. Ich frage jetzt mal richtig boshaft (bitte Humor einschalten): Wo läßt Du denn sonst noch so denken ??

:) Setzt Dich hin, mach die Matrix und spiele einfach mal ein paar Varianten durch. Wenn das nix ist, überlegen wir neu.

Gruß Peter
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben