µit - März

  • So hab jetzt mein Script mal überarbeitet und es ist viel schneller, als vorher :)
    jedoch löse ich z.z. nichtmal die Hälfte der Sudokus :(

    Aber es ist ja noch etwas Zeit ;)

    Mein aktueller Benchmark:

    Spoiler anzeigen

    Sudoku Logisch 1 Richtig - Benötigte Zeit: 65.7804274006892
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 64.5132272397749
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 64.5336208931582
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 64.9691511071938
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 64.7501288571592
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 130.012613334935
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 128.90465128948
    Sudoku Logisch 8 Falsch
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 161.216579202105
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 129.80336886392

    Ergebnis Logisch: Zeit gesammt: 1135.98124901349 Zeit Durchschnitt: 113.598124901349

    Sudoku Backtrack 1 Falsch
    Sudoku Backtrack 2 Falsch
    Sudoku Backtrack 3 Falsch
    Sudoku Backtrack 4 Falsch
    Sudoku Backtrack 5 Falsch
    Sudoku Backtrack 6 Falsch
    Sudoku Backtrack 7 Falsch
    Sudoku Backtrack 8 Falsch
    Sudoku Backtrack 9 Falsch
    Sudoku Backtrack 10 Falsch

    Ergebnis Logisch: Zeit gesammt: 1135.98124901349 Zeit Durchschnitt: 113.598124901349
    Ergebnis Backtrack: Zeit gesammt: 2610.95502361334 Zeit Durchschnitt: 261.095502361334
    Ergebnis gelöste Sudokus: 9

    Ich hoffe, ich bekomme auch Logisch Nr.8 noch hin, ohne viel an Speed einzubüßen!

    Und bei den anderen muß ich mir sowieso noch was überlegen...

    lgE

  • Hi

    Zwischenbericht:
    Das schon angesprochene Grmblfxx#!" - Sudoku habe ich durch ein anderes ersetzt, um den Backtracktest durchlaufen zu lassen. Langsam komme ich mir bescheuert vor....
    Hier gibts eine Datei mit über 40tausend 17er Sudokus, viel Spass damit^^

    Spoiler anzeigen

    Sudoku Logisch 1 Richtig - Benötigte Zeit: 65.8351829631978
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 64.2542557783182
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 79.0393751161111
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 64.5319447024692
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 80.4716800598959
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 90.5534083242423
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 98.0253076857534
    Sudoku Logisch 8 Richtig - Benötigte Zeit: 155.620057856515
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 89.1680367197507
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 159.228617044904

    Ergebnis Logisch: Zeit gesammt: 946.727866251158 Zeit Durchschnitt: 94.6727866251158

    Sudoku Backtrack 1 Richtig - Benötigte Zeit: 623.722568091755
    Sudoku Backtrack 2 Richtig - Benötigte Zeit: 1263.49577949153
    Sudoku Backtrack 3 Richtig - Benötigte Zeit: 273.728364917888
    Sudoku Backtrack 4 Richtig - Benötigte Zeit: 1143.01678006562
    Sudoku Backtrack 5 Richtig - Benötigte Zeit: 722.552726673362 ersetzt
    Sudoku Backtrack 6 Richtig - Benötigte Zeit: 311.141220462377
    Sudoku Backtrack 7 Richtig - Benötigte Zeit: 141.844005313524
    Sudoku Backtrack 8 Richtig - Benötigte Zeit: 711.674528466607
    Sudoku Backtrack 9 Richtig - Benötigte Zeit: 308.267391526018
    Sudoku Backtrack 10 Richtig - Benötigte Zeit: 1297.18358059474

    Ergebnis Logisch: Zeit gesammt: 946.727866251158 Zeit Durchschnitt: 94.6727866251158
    Ergebnis Backtrack: Zeit gesammt: 6796.62694560342 Zeit Durchschnitt: 679.662694560342
    Ergebnis gelöste Sudokus: 20


    2,5 ghz amd 4850

  • Ich hab auch Probleme mit dem 5ten BT-Sudoku!
    Kannst du deins bitte posten, dann tausch ich es beim Benchmark aus.

    lgE

    EDIT: Ich hab jetzt einfach das 5 (4 in der Ini) gelöscht und hinten ein leeres angehängt.
    Es ist ja auch interessant, wie lange ein BT hierfür braucht...

    Neue INI:

    Spoiler anzeigen

    [LG]
    0=000670900360005028805002100020506004009407000700100583070054261000703000084090050
    1=628009000109056004500872001900510467807000030060020900004907103000201709091000280
    2=076930000000108400300026000045080130010567090200310058068002005704000982020003710
    3=120500360300009020007208004019000873403897001002350400000000087850016900200980140
    4=906020100020050460000009730004260070700030608030871204800700041213000090490308006
    5=007000300050908004900030060070004080102070900000500006800010000000000405060007000
    6=060070008900104070003000500200007000008050906030900020000600010805000000000030007
    7=000000000005010700070602090009020800060835010004070500030408020001090400000000000
    8=004010050050900208300006000020000100000403000005000060000700005901004030070060900
    9=500000006004902010070050900020004060900060803007100000000080200401000000000006070
    [BT]
    0=000000103000050000000000800060020070001000000000300000000001460720000050000800000
    1=100050000006009000080200004040030008007000060900000100030800002000004050000010700
    2=000300800640800050805000001500070206000090000209080005400000709020008013007005000
    3=050060001004800070800000052200057030000000000030690005790000008010006500500030060
    4=000000000005010700070602090009020800060835010004070500030408000001090400000000000
    5=060090050000050609000362000006005700982030546003600100000246000601070308050010060
    6=007000000000010000000040005000008900400000000906007000008609000000000050030000040
    7=530070000600005000098000060800060003400803001700020006060000280000400005000080079
    8=100050000006009000080200004040030008007000060900000100030800002000004050000010700
    9=000000000000000000000000000000000000000000000000000000000000000000000000000000000

    Mein aktueller Benchmark:

    Spoiler anzeigen

    Sudoku Logisch 1 Richtig - Benötigte Zeit: 75.3657238559649
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 74.6170253481937
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 75.222409552052
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 75.9213810693817
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 74.7234634569477
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 159.986534601465
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 158.99925828562
    Sudoku Logisch 8 Richtig - Benötigte Zeit: 183.081648645289
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 157.39235014506
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 157.207410439036

    Ergebnis Logisch: Zeit gesammt: 1192.51720539901 Zeit Durchschnitt: 119.251720539901

    Sudoku Backtrack 1 Richtig - Benötigte Zeit: 1246.10585982297
    Sudoku Backtrack 2 Richtig - Benötigte Zeit: 4943.8973389076
    Sudoku Backtrack 3 Richtig - Benötigte Zeit: 377.846905123416
    Sudoku Backtrack 4 Richtig - Benötigte Zeit: 4305.27231812982
    Sudoku Backtrack 5 Richtig - Benötigte Zeit: 327.588562233468
    Sudoku Backtrack 6 Richtig - Benötigte Zeit: 186.952811041627
    Sudoku Backtrack 7 Richtig - Benötigte Zeit: 1707.07869296237
    Sudoku Backtrack 8 Richtig - Benötigte Zeit: 248.017275938702
    Sudoku Backtrack 9 Richtig - Benötigte Zeit: 4948.56944108818
    Sudoku Backtrack 10 Richtig - Benötigte Zeit: 779.482029140575

    Ergebnis Logisch: Zeit gesammt: 1192.51720539901 Zeit Durchschnitt: 119.251720539901
    Ergebnis Backtrack: Zeit gesammt: 19070.8112343887 Zeit Durchschnitt: 1907.08112343887
    Ergebnis gelöste Sudokus: 20

    lgE

  • Leute, ich scheide aus xD
    Fühl mich hier schon ganz, ganz klein :rolleyes:

    Spoiler anzeigen

    Ergebnis Logisch: Zeit gesammt: 8187.18244916603 Zeit Durchschnitt: 818.718244916603
    Ergebnis Backtrack: Zeit gesammt: 1013529.34493071 Zeit Durchschnitt: 101352.934493071

    Brauche nur für die Backtracks über ne Viertelstunde...
    Ich glaub' ich hab' den Sinn von Backtrack nicht verstanden - bei mir ist das einfach Bruteforce ? :pinch:

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • BackTrack:

    Man probiert für jedes Feld jede mögliche Zahl und überprüft, ob diese Zahl den Regeln entspricht (darf nur 1 mal in einer Reihe vorkommen usw.)
    Wenn dies nicht der Fall ist, dann 1 Schritt zurück.
    Diese Funktion sollte (muß) rekursiv sein.
    Wenn man mit Hilfe der logischen Algo´s die Anzahl der Möglichkeiten schon reduziert hat, dann ist auch der BT-Algo schneller...

    Zur Geschwindigkeit allgemein: Man hat doch für jedes Feld eine Variable, welche die noch möglichen Zahlen beinhaltet.
    Dazu kann man einen String oder ein Array nehmen; Oder auch eine andere Möglichkeit, wie ich sie verwende (wird aber noch nicht verraten ;))
    Hier kann man viel Geschwindigkeit rausholen.

    lgE

  • Zitat

    Leute, ich scheide aus xD
    Fühl mich hier schon ganz, ganz klein

    Limette, du sprichst mir aus der Seele^^
    Ich habe mich auch zu einem Wettrennen zu "wer hat den Größten" hinreissen lassen...shame on me.....
    Viel wichtiger sollte doch sein, gemeinsam an einem Projekt zu arbeiten bzw zu diskutieren und zum guten Schluss hat jeder noch etwas gelernt.
    limette, sieh es einfach so, dabeisein ist alles! Frage, und dir wird geantwortet...

    Aber zum Thema:

    Zitat

    Brauche nur für die Backtracks über ne Viertelstunde...
    Ich glaub' ich hab' den Sinn von Backtrack nicht verstanden - bei mir ist das einfach Bruteforce ?

    Ja, genau! Die Vorgehensweise solltest du begriffen haben, ansonsten würde dein Rechner nicht ne Viertelstunde, sondern nen Viertelmonat brauchen^^.

    Ich geh mal ins OffTopic.Ganz, ganz "früher" gabs nur "arschlahme" Rechner, wenn eine Software also trotzdem viele Daten verarbeiten musste, dann war erste Priorität, auch ein schnelles Programm zu schreiben. Ein "langsames" Programm war auch auf Rechnern der neuesten Generation langsam. Wer mal Programme nach der Anzahl der Takte der einzelnen Prozessorbefehle optimieren musste, vergisst das nicht mehr ;( .....und will sowas auch nie mehr machen :rock:
    Heutzutage kann jeder für kleines Geld eine Maschine kaufen, die es vor 10-15 Jahren lockerst unter die TOP500 der Supercomputer geschafft hätte. Damit ist auch "langsame" Software plötzlich schnell :D

    limette, sieh es mal so, wenn wir diese Aufgabenstellung in einer "schnellen" Programmiersprache machen würden, dann hätte dein Algorithmus den kompletten Benchmark in (ich phantasiere jetzt mal) 460 Millisekunden erledigt und der "Gewinnercode" hätte halt nur 120 Millisekunden gebraucht. Und jetzt ganz ehrlich und aufrichtig, ob man eine Aufgabe nun 340ms früher oder später erledigt hat, ist idr völlig Schnurz.
    Wenn es dich trotzdem fuchst (hehe ?( ), dann lass dir helfen. Schön ist jedenfalls, dass du mitmachst.

    Ich bin mittlerweile so weit, dass ich nur noch alternative Ideen zur Beschleunigung von "speziellen" Lösungen verfolge. Mir fehlt erstens das AutoIt-Knowhow, und auch von Programmierung bzw Informatik(z.B. StringRegExp ) habe ich keine bis nur wenig Ahnung. Andererseits habe ich in den Weiten des Inet mittlerweile viel zuviel zur Problematik vom Lösen von Sudokus u.Ä. gelesen.
    Normalerweise kennt man sein Problem vorher, kann es analysieren und dementsprechende Software schreiben. Ob aber ein Sudoku von deinem Programm schnell oder langsam gelöst wird, dass weisst du erst nachher! Auch ob es günstiger ist logisch zu lösen oder mit dem Backtracker, weiss man erst wenn man jede der Varianten probiert hat....
    Das "Backtracking" ist in ca 80 Zeilen Code völlig erledigt, der Rest von meinen 1500 Spaghetti-Zeilen (jaja, Kommentare sind auch dabei :rolleyes: ) verteilt sich auf die einfachen logischen Lösungsansätze und bissl drumherum......

    Aber als Tip, mit der Kombination Logische Lösung, Zufallsschuss und Backtracking lassen sich mit bissl "Glück" auch die härtesten Sudokus sehr schnell knacken.

    HAUT REIN!!!!

    Andy

  • Hehe ^^
    Kleiner Roman ;)

    Hm ja, mein Backtrack ist schon diese Kombination aus Ausprobieren und der 1. logischen Methode, dem Ausstreichen
    der Möglichkeiten...

    Zitat

    Die Vorgehensweise solltest du begriffen haben, ansonsten würde dein Rechner nicht ne Viertelstunde, sondern nen Viertelmonat brauchen^^.


    :D
    Hab aus Spaß mal ein reines Bruteforce geschrieben, also durchrattern aller Möglichkeiten..
    Wobei die erste die wäre, dass jedes Feld die "1" besitzt, also halt richtiges Ausprobieren mit Check nach Einsetzen des letzten Feldes ;)
    Naja, meine Programme sind nicht die schnellsten, aber bei 1000 ausprobierten Lösungen pro Sekunde würde das immerhin ...
    9^(9^2) / 1000 = 9^81 / 1000 = 1.9662705 × 10^74 Sekunden dauern.
    Sagt mal, entweder ich bin irgendwie schlecht in Mathe, oder das sind tatsächlich 6.23073524 × 10^66 Jahre xD

    Zitat

    Wer mal Programme nach der Anzahl der Takte der einzelnen Prozessorbefehle optimieren musste, vergisst das nicht mehr


    Woha. Das ist natürlich hart :rolleyes:

    Zitat

    wenn wir diese Aufgabenstellung in einer "schnellen" Programmiersprache machen würden


    Dann könnte man aber auch die eigentliche Qualität des Algos nicht mehr so gut bestimmen ;)
    Wobei AutoIt wirklich nicht unbedingt die schnellste ist, wie ich bereits feststellen musste, als ich mal das
    Sieb des Eratosthenes (wem das nichts sagt: suche nach Primzahlen) umgesetzt habe:
    In AutoIt sowie in C++ ... :rofl:
    Kein Vergleich. ^^

    Zitat

    Und jetzt ganz ehrlich und aufrichtig, ob man eine Aufgabe nun 340ms früher oder später erledigt hat, ist idr völlig Schnurz.


    Jau. Aber ob es nun 15 min oder 15 sec dauert, das ist dann doch relevant ... ;)

    @euka:
    Freaks ;)
    Ich werde mir hinterher auf jeden Fall eure Skripte reinziehen,- wenn ich da nichts lernen kann, ..... =)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Zitat

    also halt richtiges Ausprobieren mit Check nach Einsetzen des letzten Feldes

    das ist natürlich auch bissl arg^^
    Wenn du aber beim Setzen des Feldes erstmal nachschaust, ob diese Zahl in Zeile, Spalte, 9erKasten enthalten ist, dann reduzieren sich die Möglichkeiten gewaltig. Wie lange brauchst du denn, um ein völlig leeres Sudoku zu füllen?

  • Hallo,

    außer ein paar Testskripten wird dies eigentlich mein erstes AutoIt-Programm. Ganz schön heftig so als Einstieg.
    Habe schon ein paar einfache Strategien implementiert, konnte aber selbst ein einfaches Testsudoku damit nicht lösen, bis meine Frau da gestern draufgeguckt hat und meinte: "Wieso steht denn in der Zeile zweimal die 9?".
    Zuerst der Schock: Trägt mein Programm ungültige Zahlen als Lösung ein? Dann die Erlösung: Nein, zum Glück nur die Aufgabenstellung falsch eingegeben.
    Mit der richtigen Aufgabenstellung ging's. Für einfache Sudokus geht's also schon.

    Die eigentliche Herausforderung liegt für mich in der Implementierung der Strategien. Backtracking also auf gut Deutsch "ausprobieren" finde ich als Lösungsweg nicht wirklich ansprechend. Werde das aber natürlich auch implementieren, um sicherzugehen, dass das Programm auch heftige Sudokus lösen kann.

    Als Beispiele habe ich die Sudokus von der von Euch angegebenen Seite genommen (http://www.scanraid.com/Daily_Sudoku) und dabei ist auch eine kleine Zwischenablage-Sudoku-Konvertier-Funktion entstanden:

    Spoiler anzeigen
    [autoit]


    func _clipboardSudoku2String()
    local $clip

    [/autoit] [autoit][/autoit] [autoit]

    $clip = ClipGet()
    $clip = StringRegExpReplace($clip, "\t\ ", "0"); Tab+Space -> 0
    $clip = StringRegExpReplace($clip, "\ {2}", "0"); doppelte Leerzeichen -> 0
    $clip = StringRegExpReplace($clip, "\D", ""); restliche Füllzeichen löschen
    ; String in Zwischenablage
    ClipPut($clip)
    endfunc

    [/autoit]


    So kann man eine Sudokuproblemstellung (als Tabelle) in die Zwischenablage kopieren und erhält nach Anwendung der Funktion einen String im gewünschten Format. Ist nichts Aufregendes aber vielleicht ganz nützlich...

    Gruß BlackMail.

    2 Mal editiert, zuletzt von BlackMail (15. April 2009 um 14:23)

  • So jetzt habe ich auch ein paar Ergebnisse, liege aber weitab von Euren traumhaften Zeiten :(

    Spoiler anzeigen

    Sudoku Logisch 1 Richtig - Benötigte Zeit: 397.280939337262
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 336.928855483029
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 365.825544866736
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 382.229305679912
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 343.574392834844
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 471.423043990228
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 463.328439787738
    Sudoku Logisch 8 Falsch
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 497.662691766691
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 467.835437185452

    Ergebnis Logisch: Zeit gesammt: 4561.68256021366 Zeit Durchschnitt: 456.168256021366

    Gruß BlackMail

  • Ich wünschte, meine Ergebnisse wären am Anfang so gut gewesen wie deine....

    zzt. lasse ich die schon hier angesprochenen 17er Sudokus in 1000er-Packs durchlaufen. Hauptsächlich, um den Backtrack noch zu optimieren, aber da stecke ich grade in einem Dilemma.
    Manchmal spart ja eine einzige durch Logik entfernte Ziffer einige Minuten an Backtrackzeit. Gelöst bekomme ich jetzt alle Sudokus, aber Backtracken alleine ist m.E. bei "ungünstigen" Puzzles viel zu langsam.

    Bin jedenfalls gespannt wie ein Flitzebogen auf die Scripte der AutoIt-Profis....

  • Zitat

    Wenn du aber beim Setzen des Feldes erstmal nachschaust, ob diese Zahl in Zeile, Spalte, 9erKasten enthalten ist, dann reduzieren sich die Möglichkeiten gewaltig. Wie lange brauchst du denn, um ein völlig leeres Sudoku zu füllen?

    Naja, das wär dann ja schon fast 'n vernünftiges Backtrack ;) Wollte damit ja das ganz extreme ausprobieren ^^

    Für ein leeres Sudoku brauche ich... viel zu lange.. ^^
    Bin aber bisher auch nicht dazu gekommen, das zu optimieren. Mal sehen, mach die Funktion vielleicht nochmal ganz neu..
    Denn rund 50 sec sind nicht schnell.. x)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Wie funktioniert eigentlich das trennen der beiden Lösungswege Logisch/Backtrack?
    Zzt. gibt es ja nur eine Funktion _solvesudoku, und bei mir fängt das backtracken natürlich erst dann an, wenn alle logischen Lösungen ausgereizt sind. D.h. fürs backtracken hätte ich gegenüber einem "reinen" Backtracker schon einen ziemlichen Vorsprung an bereits gelösten Feldern.
    Zumindest bei mir ist es nämlich so, dass der logische Löser einige Faktoren schneller ist wie mein Backtrack-Algorithmus. Unfair?!

    ciao
    andy

    Hallo,

    Diese Frage von andy ist meiner Meinung nach unbeantwortet geblieben.
    Ich verstehe das so, das jeder seine Algorithmen implementiert und die Skripte auf alle 20 Sudokus losgelassen werden, also keine Trennung logische Sudokus nur mit logischen Strategien und BT-Sudokus mit Backtrack.
    Die BT-Sudokus lassen sich sicherlich auch logisch lösen, nur muss man dann diverse Strategien mehr implementieren.

    Gruß BlackMail.

  • Zitat

    Ich verstehe das so, das jeder seine Algorithmen implementiert und die Skripte auf alle 20 Sudokus losgelassen werden, also keine Trennung logische Sudokus nur mit logischen Strategien und BT-Sudokus mit Backtrack.

    Ich würde sogar noch weiter gehen und vorschlagen, dass jeder Interessierte eine Handvoll "seiner" Sudokus zur Verfügung stellt, damit aus allen gesammelten Sudokus eine "Suite" zusammengestellt werden kann. Das könnten ruhig hundert Sudokus oder auch mehr werden!
    Logisch lösbare könnte man noch unterscheiden in "einfache" und "schwere", aber ob das unbedingt sein muss sei dahingestellt. Ich wage zu behaupten, daß bei diesen Sudokus selbst ein "langsamer" logischer Lösungsalgorithmus immer schneller sein wird wie ein Backtracker.

    Daß es, je nach verwendetem Backtrack-Algorithmus, günstige und weniger günstige Sudokus gibt, wird jedem klar sein. Ich habe beim Durchrechnen von den schon von mir angesprochenen ca 36000 Sudokus in der Liste eine Handvoll gefunden, die meinem Algorithmus garnicht schmecken ^^.Landet so einer zufällig in der Auswahlliste, dann hab ich verschi******......
    Andererseits, ist die Liste vorher bekannt, dann besteht natürlich die Gefahr, seinen Algorithmus darauf zu "optimieren". Dieses Spielchen gibts ja, seit gebenchmarkt wird.

    ciao
    Andy

  • Wir hatten das Thema zwar schon, aber ich bin eigentlich dafür, dass wir nur Sudokus nehmen, die eine eindeutige Lösung haben.

    Gruß BlackMail

  • Dafür, daß es sich um den März-Wettbewerb handelt, einigen wir uns doch ziemlich bald :rofl:

    Wer macht eigentlich die Auswertung?
    Dieser Jemand soll dann Sudokus für die Analyse auswählen.
    Und auch entscheiden, nach welchen Kriterien bewertet werden soll.

    Ich denke, es wird keinen "besten" Solver geben, sondern mehrere...
    Den Solver mit der schönsten Strategie (unabhängig von der Geschwindigkeit)
    Den Solver, der im Durchschnitt am schnellsten löst
    Den programmiertechnisch schnellsten Solver
    Den schönsten, reinen Backtracker
    usw...

    Und daraus kombinieren wir dann die besten Elemente zu einem gescheiten Solver.

    lgE

  • ...es geht dem Ende zu :D
    Keine Ahnung ob gut oder schlecht, aber hier mal mein "Kurzvorschlussergebnis". Die Sudokus habe ich der schon von mir verlinkten Liste entnommen und auf einer 2,3GHZ-Maschine durchrauschen lassen

    Spoiler anzeigen

    Die 2 nicht gelösten Sudokus werden zwar auch gelöst, allerdings "leidet" dann die Gesamtzeit etwas^^ d.h. Verlängerung um einige Minuten.

    Man erkennt die Strategietreffer, d.h. gezählt wurde die Elimination von Möglichkeiten innerhalb eines Feldes bzw. der Treffer auf eine Möglichkeit.
    Ungefähr 1/6 der Sudokus sind nicht mit meinen einfachen Strategien zu lösen (im Schnitt dauert damit die Lösung 100ms), das "Backtracken" dieser 5206 Puzzles braucht aber 80% der Gesamtzeit!
    Weiterhin sind geschätzte 80% der backgetrackten (oder heisst das gebacktrackten ?!) Sudokus innerhalb der ersten 2-3 Sekunden gelöst.
    Ich sitze gerade am finetuning, da holt man bei einigen Sudokus eben mal den Faktor 3 an Zeit raus mit ändern eines "kleinen" Parameters innerhalb der Rekursion.

    Wie siehts bei euch aus?

    eukalyptus
    Wir könnten den bereits bekannten SudokuBenchMark.au3 verwenden und mit einigen Sudokus erweitern, ich denke insgesamt 40-50 Stück sollten reichen. Man könnte diese ja in verschiedene "Schwierigkeitsstufen" einteilen. So wäre für jeden etwas dabei. Oder wir wählen aus der großen Liste einfach per Zufall 50 Stück aus und jeder von uns stellt noch 2-3 seiner "bösesten" Sudokus zur Verfügung^^


    Andy

  • Sehr interessant, deine Ergebnisse und Erkenntnisse!

    Zitat

    paarimkasten :524896
    paarinreihe :53758
    nakedpair : 25898

    Aber sind paarimkasten und paarinreihe nicht auch nakedpairs? Ist nakedpair dann gleich paarinspalte? :)

    Ich bin leider immer noch nicht fertig.
    Immerhin konnte ich meine Benchmarkergebnisse deutlich verbessern. Dafür musste ich aber fast alles auch nochmal neu machen :cursing:

    Benchmark vorher:

    Spoiler anzeigen


    Sudoku Logisch 1 Richtig - Benötigte Zeit: 397.280939337262
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 336.928855483029
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 365.825544866736
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 382.229305679912
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 343.574392834844
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 471.423043990228
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 463.328439787738
    Sudoku Logisch 8 Falsch
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 497.662691766691
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 467.835437185452

    Ergebnis Logisch: Zeit gesammt: 4561.68256021366 Zeit Durchschnitt: 456.168256021366

    Benchmark nachher:

    Spoiler anzeigen


    Sudoku Logisch 1 Richtig - Benötigte Zeit: 58.6876265000161
    Sudoku Logisch 2 Richtig - Benötigte Zeit: 55.8774928098404
    Sudoku Logisch 3 Richtig - Benötigte Zeit: 54.832108550109
    Sudoku Logisch 4 Richtig - Benötigte Zeit: 59.6000329650836
    Sudoku Logisch 5 Richtig - Benötigte Zeit: 56.0040452068629
    Sudoku Logisch 6 Richtig - Benötigte Zeit: 98.2295235847014
    Sudoku Logisch 7 Richtig - Benötigte Zeit: 94.1323548104578
    Sudoku Logisch 8 Richtig - Benötigte Zeit: 157.23646441098
    Sudoku Logisch 9 Richtig - Benötigte Zeit: 95.2906025765844
    Sudoku Logisch 10 Richtig - Benötigte Zeit: 102.87704163518

    Ergebnis Logisch: Zeit gesammt: 832.767293049815 Zeit Durchschnitt: 83.2767293049815

    Gruß BlackMail.

  • Als ich angefangen habe, wusste ich nicht was naked, hidden oder sonstwie bei Andrew Stuart bezeichnete Strategien sind, ich habe einfach versucht die Strategie "wie auf dem Papier" programmtechnisch umzusetzen. Und auch die Funktion so genannt^^

    Ich könnte "paarinreihe" natürlich in "pointing pairs" umbenennen, das habe ich bei den "hidden pairs" auch gemacht, aber einfach nur deswegen, weil mir mein eigener Name der Funktion noch bescheuerter vorkam :o)

    Zitat

    Durchschnitt: 83.2767293049815

    beeindruckend, aber ich befürchte, da geht noch was^^

  • Hab mal nachgelegt^^

    Spoiler anzeigen