- 50
- 92 324
Programmieren mit Pascal
Приєднався 10 лип 2023
Hey, ich bin Pascal und mache Programmiervideos. Ich erkläre Programmiersprachen, Algorithmen, Datenstrukturen und stelle hin und wieder auch mal ein Projekt vor. Viel Spaß auf meinem Kanal :)
Sudoku Löser in Python programmieren (Backtracking) | Tutorial Deutsch
Herzlich willkommen zu diesem neuen Video :) Heute werden wir einen vollständigen Sudoku-Löser in Python programmieren. Dafür verwenden wir den Backtracking Algorithmus. Viel Spaß mit dem Video :)
Erklärvideo zum Backtracking Algorithmus:
ua-cam.com/video/9I73elFoze8/v-deo.html
Der vollständige Code auf GitHub:
github.com/Programmieren-mit-Pascal/Sudoku-solver-backtracking/blob/main/sudoku%20solver%20backtracking.py
Sudoku solving Algorithms Wikipedia:
en.wikipedia.org/wiki/Sudoku_solving_algorithms
00:00:00 Einleitung
00:02:02 Repräsentation des Sudokus
00:05:18 Sudoku ausgeben
00:16:07 Nächstes freies Feld finden
00:22:04 Zeile und Spalte auf Zahl überprüfen
00:27:34 3x3 Box auf Zahl überprüfen
00:38:56 number_valid() fertigstellen und testen
00:42:47 Backtracking
00:54:11 Sudoku-Löser testen
00:57:35 Worst-Case-Sudoku
00:59:48 Mögliche Verbesserungen
01:01:11 Verabschiedung
Erklärvideo zum Backtracking Algorithmus:
ua-cam.com/video/9I73elFoze8/v-deo.html
Der vollständige Code auf GitHub:
github.com/Programmieren-mit-Pascal/Sudoku-solver-backtracking/blob/main/sudoku%20solver%20backtracking.py
Sudoku solving Algorithms Wikipedia:
en.wikipedia.org/wiki/Sudoku_solving_algorithms
00:00:00 Einleitung
00:02:02 Repräsentation des Sudokus
00:05:18 Sudoku ausgeben
00:16:07 Nächstes freies Feld finden
00:22:04 Zeile und Spalte auf Zahl überprüfen
00:27:34 3x3 Box auf Zahl überprüfen
00:38:56 number_valid() fertigstellen und testen
00:42:47 Backtracking
00:54:11 Sudoku-Löser testen
00:57:35 Worst-Case-Sudoku
00:59:48 Mögliche Verbesserungen
01:01:11 Verabschiedung
Переглядів: 3 832
Відео
Wie lösen Computer Sudokus? Der Backtracking Algorithmus erklärt (Deutsch)
Переглядів 43 тис.2 місяці тому
In diesem Video erkläre ich den Backtracking Algorithmus am Beispiel von Sudoku. Dabei werden uns sowohl das Konzept als auch den Python Code von Backtracking anschauen. Viel Spaß :) Hier erkläre ich, wie man einen kompletten Sudoku-Löser in Python programmiert: ua-cam.com/video/9Ox8dc6Ro5w/v-deo.html 00:00 Einleitung 01:30 Sudoku-Regeln 02:06 Menschliche Vorgehensweise 03:11 Die reine Brute Fo...
Einführung in Graphen | Graphentheorie (Deutsch)
Переглядів 4624 місяці тому
Herzlich willkommen zu dieser neuen Videoreihe, in der wir uns mit Graphen beschäftigen. Bei Graphen handelt es sich vereinfacht gesagt um Netzwerke. Sie sind ein großes und interessantes Thema sowohl in der Mathematik als auch in der Informatik. Dieses Video dient als Einführung in das Thema. Wir beschäftigen uns mit der Frage, was Graphen eigentlich sind, wo sie in unserer Welt zu finden sind...
Unbesiegbare Tic-Tac-Toe KI in Python programmieren #7 | Die Künstliche Intelligenz
Переглядів 8157 місяців тому
Herzlich willkommen zum siebten und damit zum letzten Teil in dieser Tutorialreihe. Heute programmieren wir die künstliche Intelligenz für unser Tic-Tac-Toe Spiel. Dafür beschäftigen wir uns zunächst mit dem Minimax Algorithmus. Das Video zum Minimax Algorithmus: ua-cam.com/video/ZJg5fOHSM5c/v-deo.html&t Der Code von der fertigen Tic-Tac-Toe KI: github.com/Programmieren-mit-Pascal/Tic-Tac-Toe-A...
Unbesiegbare Tic-Tac-Toe KI in Python programmieren #6 | Die KI vorbereiten
Переглядів 4587 місяців тому
Herzlich willkommen zum sechsten Teil in dieser Tutorialreihe, in der wir eine unbesiegbare Tic-Tac-Toe KI in Python programmieren. Bevor wir mit der KI starten können, müssen wir noch ein paar wichtige Dinge vorbereiten. Heute programmieren wir, dass das Programm in einer Spielsituation alle möglichen Züge bestimmen kann. Anschließend kümmern wir uns darum, dass Züge auch wieder rückgängig gem...
Unbesiegbare Tic-Tac-Toe KI in Python programmieren #5 | Gewinner bestimmen
Переглядів 3807 місяців тому
Herzlich willkommen zum fünften Teil in dieser Tutorialreihe, in der wir eine unbesiegbare Tic-Tac-Toe KI in Python programmieren. Heute programmieren wir, dass das Programm erkennt, wenn einer der beiden Spieler gewonnen hat oder wenn das Spiel unentschieden ausgegangen ist. Hier ist die gesamte Tutorialreihe in einer Playlist: ua-cam.com/play/PLPYSnTen2yeu219X1yy1gpBnwdDcR5HXG.html Der Code v...
Unbesiegbare Tic-Tac-Toe KI in Python programmieren #4 | Züge ausführen
Переглядів 4168 місяців тому
Herzlich willkommen zum vierten Teil in dieser Tutorialreihe, in der wir eine unbesiegbare Tic-Tac-Toe KI in Python programmieren. Heute beschäftigen wir uns damit, wie wir auf dem Spielfeld Züge ausführen können. Hier ist die gesamte Tutorialreihe in einer Playlist: ua-cam.com/play/PLPYSnTen2yeu219X1yy1gpBnwdDcR5HXG.html Der Code von der fertigen Tic-Tac-Toe KI: github.com/Programmieren-mit-Pa...
Unbesiegbare Tic-Tac-Toe KI in Python programmieren #3 | Kreuze und Kreise zeichnen
Переглядів 8108 місяців тому
Herzlich willkommen zum dritten Teil in dieser Tutorialreihe, in der wir eine unbesiegbare Tic-Tac-Toe KI in Python programmieren. Heute werden wir uns damit beschäftigen, Kreuze und Kreise auf das Spielfeld zu zeichnen, um den Spielstand zu visualisieren. Hier ist die gesamte Tutorialreihe in einer Playlist: ua-cam.com/play/PLPYSnTen2yeu219X1yy1gpBnwdDcR5HXG.html Der Code von der fertigen Tic-...
Unbesiegbare Tic-Tac-Toe KI in Python programmieren #2 | Den Spielstand visualisieren
Переглядів 5108 місяців тому
Herzlich willkommen zum zweiten Teil in dieser Tutorialreihe, in der wir eine unbesiegbare Tic-Tac-Toe KI in Python programmieren. Heute werden wir uns damit beschäftigen, wie wir den Spielstand repräsentieren und anschließend auf dem Fenster abbilden können. Hier ist die gesamte Tutorialreihe in einer Playlist: ua-cam.com/play/PLPYSnTen2yeu219X1yy1gpBnwdDcR5HXG.html Der Code von der fertigen T...
Unbesiegbare Tic-Tac-Toe KI in Python programmieren #1 | Das Spielfeld zeichnen
Переглядів 1,6 тис.8 місяців тому
In dieser neuen Tutorialreihe, werden wir eine KI in Python programmieren, die das Spiel Tic-Tac-Toe perfekt spielt. In diesem Video starten wir damit, das Spielfeld zu zeichnen. Viel Spaß :) Der Code von der fertigen Tic-Tac-Toe KI: github.com/Programmieren-mit-Pascal/Tic-Tac-Toe-Ai Das Pygame-Grundgerüst: gist.github.com/Programmieren-mit-Pascal/f1d75cf9a5c115c53afdad92e529a68b Die Snake-Tuto...
Alpha-Beta-Suche (Alpha-Beta-Pruning) | Erklärung auf Deutsch
Переглядів 1,4 тис.9 місяців тому
Das Video zum Minimax-Algorithmus: ua-cam.com/video/ZJg5fOHSM5c/v-deo.html In diesem Video geht es um die Alpha-Beta-Suche. Hierbei handelt es sich um ein verbessertes Verfahren vom Minimax-Algorithmus. Bei der Alpha-Beta-Suche werden Teile des Suchbaums weggeschnitten, die das Ergebnis nicht mehr beeinflussen können. Die Alpha-Beta-Suche liefert dasselbe Ergebnis wie der Minimax-Algorithmus, s...
Magische Methoden in Python (Magic/Dunder Methods) | Objektorientierte Programmierung in Python #4
Переглядів 1,8 тис.10 місяців тому
In diesem Video geht es um Magic Methods, auch Dunder Methods genannt. Dabei handelt es sich um spezielle Methoden in Python mit denen sich besonderes Verhalten von Objekten definieren lässt. Mit Magic Methods können wir definieren, wie unsere Objekte auf bestimmte Operatoren und built-in-functions reagieren sollen. Viel Spaß mit dem Video :) In der Python Dokumentation findet ihr alle Magic Me...
Vererbung in Python | Objektorientierte Programmierung in Python #3
Переглядів 2,1 тис.11 місяців тому
Herzlich willkommen zu diesem neuen Video. Heute geht es um Vererbung in Python. Dabei handelt es sich um ein wichtiges Konzept in der objektorientierten Programmieren. Viel Spaß mit dem Video :) Hier ist die gesamte Tutorialreihe in einer Playlist: ua-cam.com/play/PLPYSnTen2yevyrMpTv7IrYX6a6x1WhNEd.html 00:00 Einleitung 00:13 Was ist Vererbung? 00:58 Hund und Katze - Beispiel 05:18 Problem die...
Klassenvariablen in Python | Objektorientierte Programmierung #2
Переглядів 1,7 тис.11 місяців тому
Herzlich willkommen zu diesem neuen Video :) Heute erkläre ich Klassenvariablen in Python. Dabei handelt es sich um ein wichtiges Konzept in der objektorientierten Programmamierung. Wir werden uns anschauen, wozu man Klassenvariablen benötigt und wie man sie verwendet. Viel Spaß :) Hier ist die gesamte Tutorialreihe in einer Playlist: ua-cam.com/play/PLPYSnTen2yevyrMpTv7IrYX6a6x1WhNEd.html 00:0...
Objektorientierte Programmierung in Python #1 | Klassen und Objekte
Переглядів 7 тис.11 місяців тому
Die objektorientierte Programmierung ist ein Programmierstil, um sein Programm übersichtlich zu strukturieren. In diesem Video erfahrt ihr, was genau hinter diesem Konzept steckt. Wir werden uns im Detail anschauen, wie man in Python seine eigenen Klassen schreibt und daraus Objekte erzeugt. Viel Spaß :) Hier ist die gesamte Tutorialreihe in einer Playlist: ua-cam.com/play/PLPYSnTen2yevyrMpTv7I...
Der Selection Sort Algorithmus (Deutsch)
Переглядів 190Рік тому
Der Selection Sort Algorithmus (Deutsch)
Der Minimax-Algorithmus | Erklärung auf Deutsch
Переглядів 2 тис.Рік тому
Der Minimax-Algorithmus | Erklärung auf Deutsch
3D Raycasting Tutorial in Python #10 (Deutsch) | Das Ende
Переглядів 366Рік тому
3D Raycasting Tutorial in Python #10 (Deutsch) | Das Ende
Der Insertion Sort Algorithmus (Deutsch)
Переглядів 154Рік тому
Der Insertion Sort Algorithmus (Deutsch)
3D Raycasting Tutorial in Python #9 (Deutsch) | Entfernung zur Wand berechnen
Переглядів 180Рік тому
3D Raycasting Tutorial in Python #9 (Deutsch) | Entfernung zur Wand berechnen
3D Raycasting Tutorial in Python #8 (Deutsch) | Sichtstrahlen aussenden
Переглядів 231Рік тому
3D Raycasting Tutorial in Python #8 (Deutsch) | Sichtstrahlen aussenden
3D Raycasting Tutorial in Python #7 (Deutsch) | Die Mathematik hinter einem Sichtstrahl
Переглядів 332Рік тому
3D Raycasting Tutorial in Python #7 (Deutsch) | Die Mathematik hinter einem Sichtstrahl
Was ist die O-Notation #2 | Konstante Vorfaktoren und asymptotische Laufzeit von Algorithmen
Переглядів 190Рік тому
Was ist die O-Notation #2 | Konstante Vorfaktoren und asymptotische Laufzeit von Algorithmen
3D Raycasting Tutorial in Python #6 (Deutsch) | Die Sichtstrahl-Schleife
Переглядів 334Рік тому
3D Raycasting Tutorial in Python #6 (Deutsch) | Die Sichtstrahl-Schleife
Was ist die O-Notation? #1 | Zeitkomplexität erklärt | Die Grundlagen
Переглядів 248Рік тому
Was ist die O-Notation? #1 | Zeitkomplexität erklärt | Die Grundlagen
3D Raycasting Tutorial in Python #5 (Deutsch) | Bewegung des Spielers programmieren
Переглядів 412Рік тому
3D Raycasting Tutorial in Python #5 (Deutsch) | Bewegung des Spielers programmieren
3D Raycasting Tutorial in Python #4 (Deutsch) | Den Spieler programmieren
Переглядів 437Рік тому
3D Raycasting Tutorial in Python #4 (Deutsch) | Den Spieler programmieren
Das ist mein Kanal | Programmieren mit Pascal
Переглядів 1,9 тис.Рік тому
Das ist mein Kanal | Programmieren mit Pascal
3D Raycasting Tutorial in Python #3 (Deutsch) | Die Weltkarte programmieren
Переглядів 558Рік тому
3D Raycasting Tutorial in Python #3 (Deutsch) | Die Weltkarte programmieren
danke !
gut erklärt. Ich kannte den Begriff gar nicht, habe aber letztes Jahr mal testhalber aus Spaß ein Programm mit Rust geschrieben und das genau so gemacht. Im schlimmsten Fall (komplexes Sudoku) komme ich auf ca. 60.000 Iterationen. Läuft dann mit Rust auf meinem Laptop ca. 4 Millisekunden
😊👍
Hallo junger Mensch. Das, was du da ständig einträgst und wieder löschst, macht meine Generation im Kopf und trägt gleich die ermittelte Zahl ein. Man geht auch logisch ran, und beginnt in einem Feld oder einer Linie, mit den wenigsten Leerfeldern und beginnt dort. Sudoku ist Gedächtnistraining. Wozu soll ein Programm das lösen sollen? Ergibt absolut keinen Sinn!!
Bagtracking ist, wenn man den verlorenen Beutel sucht.
danke
Muss man bei der Variable bei der Addition zb, keine Klammer gesetzt? warum etwa nicht?
Verheiratet, das stimmt nicht?
Es muss auch ausgeschlossen werden dass nicht 2 oder mehrere gleiche Zahlen in der Liste stehen. Oder man muss den den Algorithmus so ändern dass mehrfache Indexe ausgeben kann. Z.B. ein Indexfeld.
Tolle Veranschaulichung, nach diesem Video sollte jeder den Back Tracking Algorithmus verstanden haben.
Top, wirklich ein Top Tutorial, für Anfänger aber auch Quereinsteiger in die Sprache. Auch die Herangehensweise an die Logik und das verdeutlichen von Fallstricken super. Danke für deine Arbeit und deine Zeit die du da einsetzt.
Klasse Video. Beeindruckend, wie klar und sicher du sprichst, verhedderst dich ja nie 😂 Ist Vier-Gewinnt nicht mittlerweile auch gelöst, sodass Computer den optimalen Zug errechnen können?
Keine Lösung ist doch gar nicht möglich?
Ist das Programm als Kopie da?
In diesen Video geht es um den Python Code von einem Sudoku-Löser: ua-cam.com/video/9Ox8dc6Ro5w/v-deo.html In der Videobeschreibung von dem verlinkten Video kannst du auch direkt auf den Code zugreifen.
?
hast du ein glück das kühe keine schlüpfer tragen
Hallo Pascal, vielen Dank für das Video, sehr erklärlich!
Großartiges Video! Grandios vorgetragen! Mir fehlen die Superlative um es zu beschreiben! Es ist prägnant und flüssig, aber keinesfalls zu schnell, vorgetragen. An diese Art des Vortragens kommen viele Profis bei weitem nicht ran, meiner Meinung nach. Danke dafür!
Ja, nur nerds können sowas.
@gaswirt Der Meinung bin ich gar nicht. Im Gegenteil. Ich habe die Erfahrung gemacht, dass Nerds manchmal eher Schwierigkeiten haben, ihr Wissen gut rüber zubringen. Wobei ich den Creator hier gar nicht als Nerd einstufen möchte. Ich sehe dafür keinen Grund.
Danke. Bin gespannt auf das nächste Video dazu.
Ich fand es auch super erklärt. Aber auch ein wenig zu ausführlich. Stattdessen hätte ich mir die Vorstellung der anderen Methoden gewünscht, die du genannt hattest. Aber das ist Jammern auf hohem Niveau 🙂
Selbst dein Brut-Force Ansatz mach Backtracking in Reinkultur. Der einzige Unterschied ist, ob Du je nach einer gesetzten Zahl testest, oder nach 50 gesetzten Zahlen. Auch beim Backtracking machst Du den Schritt "eine 1 reinschreiben - ach nee geht ja nicht - steht schon da", nur gleich vorab im Kopf und schreibst es nicht hin. Du nimmst das nicht als Backtracking, als Try&Error wahr.
Also ich würde auch als Mensch, immer sowas wie Backtracking machen um das zu lösen, aber ich bin ja auch Programmierer. Dieses "sieht man doch, dass da in die Mitte eine 9 kommt", halte ich für falsch. sieht man nicht. Sondern wenn man sich über 50 leere Kästchen nacheinander gedanken macht , kommt man drauf. Man macht als Mensch nie was anderes, als sich "alles" angucken und falsches ausschliessen. Nur manchmal ganz schnell und unbewußt.
Danke für dieses geniale Video. Ich bin gerade dabei nach und nach deine Videos zu schauen, da ich gemerkt habe, dass sie die Zeit auf jeden Fall wert sind. So auch in diesem Video. Ich bin mir sehr sicher, wer es gesehnt hat, der hat garantiert die Alpha-Beta-Suche verstanden. Die Art wie du sehr allgemein anfängst und in der Folge in der Wiederholung dessen immer weiter ins Detail gehst ist unglaublich hilfreich beim Lernen und Verstehen. Für mich war es der erste Kontakt mit diesem Thema und du hast mich dafür begeistert. Auch unter der Berücksichtigung, dass du da einen enormen Aufwand in deine Videos steckst möchte ich mich bei dir dafür bedanken. Eine Anmerkung nur: Was mir bei deiner Beschreibung schon aufgefallen ist und später in deinem Code gut sichtbar wurde ist, dass du in maximieren alpha und in minimieren beta aktualisierst, nur um es ggf wieder zu verwerfen falls es zum Cutoff kommt. Es wäre ggf. effektiver diese Bedingungen zu vertauschen, da diese Werte ja nur benötigt werden, wenn weitere Züge von dieser Ebene aus überprüft werden also es nicht zum Cutoff kommt. Wahrscheinlich ist es für den Programmablauf aber tatsächlich nicht relevant, nur eben unnötig. Bin gespannt auf die weiteren Videos von dir. Für dieses Video wünschte ich mir, es gäbe einen doppelten Daumen hoch. Von ganzen Herzen, vielen Dank!
Vielen Dank für dieses Video. Ich habe es sehr gern auch bis zum Schluss gesehen, auch wenn ich zwischendurch Lust hatte das selbst zu programmieren und dafür pausiert hatte. Deine Erklärungen und auch dein Code sind sehr einfach und verständlich und gut strukturiert gehalten, was auch das Zuschauen sehr angenehm macht. Einen Hinweis vielleicht: Wenn du ohnehin für Zeile und Spalte mit einer Laufvariable von 0 bis 8 arbeitest, wäre es sinnvoll dies in einer Schleife zusammenzufassen. Das Wiki-Sudoku konnte ich auf meinem Computer mit meinem C++-Programm in ca. 30 Sekunden lösen. Ich habe auch eine Lösung ohne Rekursion getestet, die allerdings dafür 48 Sekunden benötigt hat. Ich freue mich jetzt schon auf weitere Videos von dir.
Das mussten wir als SAT solver schreiben ... Eklig wie ich finde
Gutes Video, und gute Erklärung. Und ich stelle fest, dass von meinem Informatikunterricht in der Schule doch noch etwas hängen geblieben ist. ;) Leider ist das Video manchmal etwas langatmig, aber das ist der Natur der Sache geschuldet. Kleiner Tip: in einer Neuauflage des Videos zur Erklärung des Algorithmus einfach ein kleineres Sudoku nehmen, z.B. ein 6x6 mit den erlaubten Ziffern 1 bis 6 oder sechs verschiedenen Farben. Aber etwas anderes: immer, wenn ich ein Sudoku anschaue, sehe ich im Geiste ein Gleichungssystem vor mir: es gibt 81 Variablen, von denen einige bekannt sind, und man kann 27 Gleichungen (9 Zeilen, 9 Spalten, 9 Segmente) aufstellen, in denen jeweils 9 Variablen die Summe 45 ergeben müssen. Könnte man nicht einen Algorithmus bauen, der dieses Gleichungssystem löst, statt alles durchzuprobieren? Je nach Schwierigkeitsgrad des Sudoku sind eventuell mehr freie Felder (Unbekannte Variablen) als Gleichungen vorhanden. Dann müsste für einige der Variablen wahrscheinlich wieder auf die Methode des Ausprobierens zurückgegriffen werden, aber ich stelle mir das doch etwas einfacher vor, also mit weniger Rechenaufwand verbunden, als das reine Ausprobieren. Was sagst Du dazu?
Danke für deinen Kommentar! Ich finde die Idee mit dem Gleichungssystem sehr interessant :) Allerdings ist die Bedingung, dass die Summe 45 ergeben muss wahrscheinlich nicht ausreichend. Die Zahlen 1, 2, 3, 4, 5, 6, 6, 9, 9 ergeben zum Beispiel auch die Summe 45, aber sie sind keine gültige Lösung. Wir benötigen also zusätzlich noch die Bedingung, dass keine Zahlen doppelt vorkommen dürfen und das nur die Zahlen von 1 bis 9 verwendet werden dürfen. Es ist schwierig solche Bedingungen in einem gewöhnlichen Gleichungssystem unterzubringen. Es ist also leider dann doch nicht ganz so einfach - Aber eine sehr kreative Idee :)
@@Programmieren-mit-Pascal Ja, stimmt: an doppelte Zahlen habe ich nicht gedacht. Aber mich lässt dieser Gedanke an ein G-System einfach nicht los. Immer wieder klopft da dieser Gedanke an die Tür zum Hirn.😀 Ich habe heute beim Lösen eines Sudoku noch bemerkt, dass es viel mehr als 27 Gleichungen gibt: zusätzlich zu den Gleichungen, in denen die Summe 45 ergeben muss, gibt es ja auch noch die Gleichungen, bei denen die Summe (45 minus der Summe der fehlenden Zahlen in einer Reihe oder einem Quadrat) ergeben muss. Ich werde demnächst mal probieren, das auf dem Papier zu lösen. Leider kann ich so gar nicht programmieren, so dass ich das nicht in Code umsetzen kann. Aber... vielleicht kann das ja eine KI für mich übernehmen? 🤔 Und wenn ich darüber nachdenke: wäre das nicht auch eine Aufgabe für eine Tabellenkalkulation, Stichwort Zielwertsuche? Muss ich mir mal ansehen.
@@lupus.andron.exhaustus Der Gedanke ist wirklich interessant :) Vielleicht kann dir ChatGPT beim Code helfen :) Ich wünsche dir viel Erfolg😁
das Beispiel, das Du da zeigst, ist sooo leicht, allein die 1 und 9 , da bleibt ja immer nur 1 Feld.
Das Spiel heisst aber nicht Soduko, es heisst Sudoku
Hm wie kommt man auf 255000 Spielpositionen? Jedes Feld kann 3 Zustände annehmen. Das sind 3^9 also19683 verschiedene Brettzustände. Viele dieser Zustände sind aber nicht legal, so können sich ja nicht 8 Kreise und 1 Kreuz auf dem Brett befinden. Die Anzahl der möglichen Brettpositionen ist also deutlich geringer. Bei Wikipedia erscheint diese Zahl zwar auch wird aber auch nicht erklärt. Und wenn man Positionen zusammenfällt die sich durch eine oder zwei Drehungen ineinander überführen lassen schrumpft die Zahl aller möglich Brettpositionen nochmals drastisch. Wenn der erste Spieler in die Mitte setzt, dann hat Spieler 2 eigentlich nur 2 weitere Züge, nämlich die Ecke oder den Rand. Alle 4 Echpositionen sind rotationssymmetrisch, ebenso die Randpositionen. Ansonsten schönes Video, nur stört mich die Erwähnung "KI" etwas, weil intelligent ist die Vorgehensweise ja nicht. Da wird ja auch nichts gelernt, denn ein verlorenes Spiel ändert am Vorgehen nichts (ja ich weiss idealerweise kann keiner verlieren).
Hallo, danke für deinen Kommentar. Deine Fragen sind interessant und wichtig. Es gibt nicht 255000 verschiedenen Spielpositionen, sondern es gibt 255000 verschiedene _Spielverläufe_ . Viele dieser Spielverläufe enden in der gleichen Position. Ich kann zwei unterschiedliche Spiele spielen, die anschließend in der selben Position enden. Das hängt von der Reihenfolge ab, in der die Züge ausgeführt werden. Du bist nicht der Erste, der sich an dem Begriff "KI" stört und ich kann gut verstehen, warum der Begriff als irreführend empfunden wird. Allerdings betrachte ich den Begriff in diesem Kontext nicht als falsch. Auf Wikipedia steht zum Beispiel: "Der Minimax-Algorithmus ist ein Algorithmus, der im Bereich der _künstlichen Intelligenz_ und der Spieltheorie verwendet wird". KI ist ein sehr weit gefasster Begriff, und nicht jede KI muss lernen. Maschinelles Lernen ist nur ein Teilgebiet der KI. Es gibt auch KI-Systeme, die auf festgelegten Regeln basieren. Man kann sicher darüber streiten, ob ein Tic-Tac-Toe-Programm "intelligent" genug ist, um als KI bezeichnet zu werden. In Zukunft werde ich den Begriff vorsichtiger nutzen, insbesondere bei einfachen Algorithmen wie diesem. Nochmal vielen Dank für deinen Kommentar😁
@@Programmieren-mit-Pascal Moin, für mich wird der Begriff KI einfach viel zu inflationär benutzt. Wenn ein Mähroboter bei Regen in seiner Garage bleibt wird das als KI bezeichnet, hat damit aber rein gar nichts zu tun. Politik benutzt den Begriff um Inkompetenz zu überspielen und auf der anderen Seite ist das pures Marketing. Es gab mal einen Artikel in einer Computerzeitschrift für den Schneider CPC464 Computer. Da ging es um Räuberschach, sprich ein 4*4 Schachbrett mit 4 weißen und 4 schwarzen Bauern. Das Ding hat tatsächlich gelernt, indem es den Spielbaum verkleinert hat nur auf der Tatsache ob es verloren oder gewonnen hat. Wenn es verloren hat war der letzte Zug halt Mist und der Spielbaum wurde so von "unten" sukzessive beschnitten. Ich hatte gedacht dass du auf sowas hinaus willst. Das ganze hat der Autor dann in 38kByte gequetscht .
Hier ist ein Programm welches lernt, auf Seite 36. Der CPC war damals mein erster Computer 😊 www.homecomputerworld.at/magazine/cpc/CPCAI-86-12.pdf
Danke für das tolle Video! Super erklärt, da kann ich viel lernen!
Gut erklärt. In früheren Programmiersprachen wie FORTRAN und BASIC, die ich während des Studiums gelernt habe, wurden Listen als Arrays bzw. Felder bezeichnet und wurden als DIM() für Dimension geschrieben.
Ich hab im Web einen Löser gefunden und dort das Worst-Case-Sudoko eingetragen. Die Lösung war nach 0.08 Sekunden da. Das war dann wohl kein Backtracking oder?
Wahrscheinlich war das ein schnellerer Algorithmus oder es war eine verbesserte Version des Backtrackings :)
Klassenvariablen sind Klasse 🤗👍👍
Auch von mir eine Anmerkung (eigentlich zwei) zum an sich sehr guten Video. In der Funktion "def next_empty_field(sudoku):" sind sowohl die Klammern beim Return des Tuples von Zeile und Spalte als auch das abschließende "return None" nicht nötig. In Python liefert jede Funktion ein None zurück, sofern nichts anderes angegeben wird. Desweiteren ist es in diesem Algorithmus nicht nötig, die Variable "sudoku" als Funktionparameter zu übergeben, da alle Funktionen Zugriff auf die globale Variable "sudoku" haben.
Du bist echt ein helles Köpfchen! Was wirst du mal studieren? Bin mir nicht sicher, ob du in Informatik noch so super viel lernen wirst. Ich würde dir eher ein anderes MINT-Fach empfehlen: Mathematik, Elektrotechnik, Physik. Du wärst dadurch auf mehreren Feldern sehr fit und könntest enorm von deinen Informatik-Kenntnissen profitieren!
Danke für den netten Kommentar und für die Empfehlungen. Ich bin vor einer Woche umgezogen, um ein Informatikstudium zu beginnen 🤣
@@Programmieren-mit-Pascal Wie gesagt, denke ich, dass du dich langweilen wirst. Aber das musst du wissen. 😉
Kurz: 👍👏👌
Sehr schönes Video. Aber: Wieso sind die Linien der Kreuze an den Enden nicht rechteckig, sondern parallel zu den Kästchen abgeschnitten? Habe ich irgend etwas im Video übersehen?
Es freut mich, dass dir das Video gefällt 😄 Das ist einfach die Art und Weise wie Pygame eine diagonale Linie zeichnet. Falls das bei dir anders aussieht, liegt es vielleicht an der Pygame Version...
FRAGE: Damit ich einen Zug ausführen kann muss ich zuerst die Stellung kennen. Muss man da nicht auch die Stellung an die Maximierungsfunktion oder die Minimierungsfunktion übergeben?
Das ist richtig. Entweder übergibst du die Stellung an die Funktionen oder du hast die Stellung global gespeichert, sodass die Funktionen auf die Stellung zugreifen können.
@@Programmieren-mit-Pascal Wir haben gelernt es ist gut wenn man mit globalen Variablen so wenig wie möglich arbeitet. Da ist dann die Fehlerkorrektur einfacher. Daher sollte man die Stellung übergeben.
Sehr schön erklärte Programmierung
Vielen Dank :D
Danke für das Video. Am rechten Auge ein Veilchen? Interessant wäre noch der Code der Funktionen. LG
ich bin an sich elektriker. ich fine an sich programieren extrem langweilig. Manchmal doch praktisch was zu können. Hast du tipps die einen im Netzwerkberreich helfen können? Danke dir
Sehr informativ
Super Video. Egui.
Super Video! Sehr gut und interessant. Vielen Dank für dieses Video.
Alles prima erklärt, so war ich nach zehn Minuten so heiß drauf, endlich das Backtracking erklärt zu bekommen, dass ich besser mal danach gegoogled habe.
Jetzt verstehe ich in den Kommentaren die Anspielung aufs Programmieren mit Turbo Pascal ,-)
Backtracking schön einfach und mit vielen Wiederholungen erklärt. Ich habe in der Vergangenheit einen ähnlichen rekursiven Code programmiert allerdings habe ich mit einem zweiten Gitter gearbeitet. Ich habe also das ursprünglich eingegebene Gitter beibehalten und nur durch Definitive ergänzt. Es wurde überprüft, ob es nur eine Möglichkeit nach dem Ursprungsgitter gibt. In dem Fall wurde die Zahl nicht zurückgesetzt, sondern als Definitive dem Ursprungsgitter hinzugefügt und konnte in weiteren Schleifen dazu führen, dass weitere Zahlen fix gesetzt wurden. Das hat die Anzahl der Durchläufe insbesondere bei den angesprochenen "ungünstigen" Sudokus drastisch reduziert.
Bei einem Brute Force Angriff greift ein Angreifer auf eine Liste an häufigen Wörtern zurück und probiert sie der Reihe nach durch, bis eines funktioniert. Das heißt, ein Brute Force Angriff benutzt alles vorhandene Vorwissen, um den Suchraum einzuschränken. Deswegen ist es bei einem Brute Force Angriff auf Sudokus nicht sinnvoll, alle Felder mit einer 1 zu füllen. Backtracking ist eine sinnvolle Form von "Brute Force", bei der das Programm alle Möglichkeiten ausprobiert in der Reihenfolge "deap first search".
Danke für diese super Serie! Der Kanal hat echt viel mehr Abos verdient, ich hoffe das ändert sich noch!
Hallo Pascal, das Video ist gut, die Erklärungen sind on point, ich wollte nur Anmerken, dass das Backtracking nur eine mögliche Lösung findet.
Wenn nicht alles zehnmal wiederholt werden würde, wäre das Video statt 50min nur 15min lang
Top Video und sehr gute Erklärung. Gern mehr davon. Weiter so.