Hallo,
aus den 1950er Jahren stammt ein Puzzle, wo 4 x 4 Teile
so aneinander zu legen sind, dass alle Übergänge passen.
Der Schöpfer (Hans Bouwmeester aus den Niederlanden?!)
beschrieb es mit 16 Pappkärtchen, wo auf jedem ein bestimmtes
Muster aus vier Nullen/Einsen abgebildet war. Jede der
2 hoch 4 Möglichkeiten kam genau einmal vor.
Schon vor einiger Zeit habe ich dieses Puzzle mit LEGO-Steinen
realisiert:
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
doktorjoerg , Custer , Cran , Seeteddy , Legomichel , Dirk1313 , renrew , Legobecker , Plastik , MARPSCH , fannie1981 , Lukutus , cimddwc , doe , uefchen , Titus , naseneis , nvneuss , JuL (19 Mitglieder)
Hi, Ingo,
vielen Dank für die Idee. Hab sie gleich abgekupfert in rot/schwarz und auf Platten bzw. auf "Unten-Drunter-Fliesen" gelegt. So ein Spiel kann ich zur Erweiterung meines Repertoires immer brauchen, denn ich bin ja immer auf der Suche nach etwas, mit dem man Ausstellungsgäste unterhalten kann. Ob und welche Lösungen große und kleine Gäste mit diesem neuen Spiel finden werden, ist dabei völlig unerheblich: Es geht um die Faszination, das von dem Material ausgeht. Denn die allermeisten sind völlig überrascht, wenn sie sehen, was man auch daraus machen kann.
Hinzu kam, dass ich noch ein Kästchen übrig hatte, in das genau 16 Kärtchen passen.
Bis bald
Andreas
Mit Gruß und Dank
Zypper
Hallo Andreas,
Zypper hat geschrieben:
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
Hallo, Ihr Tüftler gross und klein,
cimddwc hat geschrieben:
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
Hallo,
Ingo hat mich vor ein paar Tagen auf das Lego Puzzle aufmerksam gemacht. Wir kennen uns schon lange, seit ich mich vor vielen Jahren mit dem Eternity-Puzzle beschäftigt habe https://de.wikipedia.org/wiki/Eternity-Puzzle. Davon gibt es eine neue Variante, Eternity 2, und die hat sehr viel Ähnlichkeit mit dem 4-Farben-Lego Problem. Aus diesem Grund empfehle ich http://cs.brown.edu/peopl...Papers/v3/eternity.pdf , viele Ideen daraus lassen sich auf das Lego-Problem übertragen.
Die Reihe-für-Reihe Strategie ist für Eternity 2 sehr gut. Beim Lego-Problem gibt es im Gegensatz zu Eternity 2 keinen definierten "Rand", füllen wir die z.B. die erste Reihe, haben wir fast nur 1-Seiten-Constraints. Eine Strategie, die immer größere Quadrate beginnend in einer Ecke konstruiert hat schneller 2-Seiten-Constraints und müsste theoretisch besser sein.
Das lässt sich mit dem 2-Farben-Lego Problem leicht beweisen, statt ca. 80000 haben wir nur noch ca. 70000 Versuche. Der Vorteil für das 4-Farben Lego sollte größer sein.
Aus Eternity 1 haben wir gelernt, das es sich lohnt, am Anfang die Suche einzuschränken, wenn dafür am Schluss "besser zusammenpassende" Teile übrigbleiben. Nehmen wir z.B. das 9x9er 3-Farben Problem:
Wenn wir am Anfang nur die 16 Teile mit den ersten beiden Farben verbauen (Eine Lösung des 4x4er 2-Farben Problems) bleiben nur Teile übrig, die alle die dritte Farbe haben und theoretisch mit höherer Wahrscheinlichkeit zusammenpassen. Das ganze lässt sich analog auf das 4-Farben Problem mit vordefiniertem 9x9er übertragen.
Auch die Frage, ob es sich lohnt in Assembler zu programmieren, oder ob eine Programmiersprache wie z.B. Java reicht, war vor 16 Jahren in Bezug auf Eternity 1 schon aktuell. Nur 3 Personen konnten das Puzzle lösen, einer davon (Günter Stertenbrink) benutzte Assembler. Allerdings war dann später ein Java Programm in der Lage, schneller weitere Lösungen zu berechnen.
Für das Lego 2-Color Problem haben wir 2ms für 80000 Versuche für Assembler, mein Java-Programm braucht 2.5 ms. Da man in Java leichter neue Ideen (wie die oben beschriebenen) ausprobieren kann, scheint auch hier der Assembler-Vorteil überschaubar, zumal wir es heute in der Regel mit Multi-Thread Prozessoren zu tun haben. Die Parallelisierung der Suche lässt sich in Assembler nur schwer realisieren.
Mir gefällt das Lego-Problem besonders, weil es neben dem "schwierigen" 4-Farben Problem die lösbare 3-Farben Variante gibt. Die kann man benutzen, um Ideen in Bezug auf Verbesserungen des Suchverfahrens zu testen.
Für das 4-Farben Problem habe ich bis jetzt übrigens auch nur mehrere 254er Teillösungen gefunden. Durch betrachten der Suchergebnisse in Tiefe 79-81 des 3-Farben-Problems versuche ich jetzt, Ideen für eine Verbesserung zu finden. 253 Teile war übrigens auch mein bestes Ergebnis mit der einfachen Reihe-für-Reihe Strategie.
Grüsse Dietmar
Hallo Dietmar,
willkommen bei den AFoLs (adult fans of LEGO).
Wenn Du Dich etwas umschaust, wirst Du nicht nur
1000 LEGO-Steine entdecken, sondern auch 1000 Köpfe und
1000 Ideen.
Meine Spezialität ist es, aus wenigen Teilen irgendetwas
ganz anderes zu bauen. Siehe etwa
http://www.1000steine.de/...amp;id=360048#id360048
Gruss, Ingo.
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
Noch ein paar Ergänzungen/Hinweise:
1) Warum ist es gut, möglichst früh starke Constraints zu haben?
Stärkere Constraints versursachen einen kleineren Suchbaum. Um so früher, um so kleiner.
Beispiel: Stellen wir uns einen Baum der Höhe 10 mit zwei Kindern an der Wurzel vor,
die Knoten der anderen Ebenen haben je ein Kind. Das sind 19 Knoten. Ist die Verzweigung erst auf der neunten Ebene,
sind es 11 Knoten. Es ist also besser, die Suche möglichst früh einzuschränken.
2) Abbruch der Suche
Wir erzeugen viele zufällige 3-Farben Lösungen und zählen jeweils die Versuche bis wir Tiefe 78 erreicht haben, um ein Gefühl
dafür zu bekommen, wann es sich lohnt bei dieser Suchtiefe die Suche abzubrechen.
Die Zahl der Versuche in einer Suchtiefe variiert sehr stark von Lösung zu Lösung.
Stellen wir zum Beispiel fest, das sich bei 10% der Lösungen bei Suchtiefe 78 die Zahl der Versuche weniger als 2% der durchschnittlichen
Versuchszahl an dieser Tiefe ergibt, dann erhalten wir schneller Lösungen, wenn wir nach 2% der durchschnittlichen Versuche bei Tiefe 78 abbrechen. Nämlich durchnittlich 5 mal so viele bei vorgegebener Suchzeit. Diese Methode lässt sich auf andere Suchtiefen übertragen.
Beim 4-Farben Problem haben wir zunächst nur Versuchszahlen bei Tiefe <= 254. Trotzdem können wir versuchen, die Ergebnisse aus dem 3-Farben Problem (mit vollständigen Lösungen) zu übertragen um abzuschätzen, wann wir eine Suche abbrechen sollten.
3) Variation der Suche
Das Abbrechen funktioniert natürlich nur, wenn jede Suche jedesmal anders verläuft. Man kann z.B. die Reihenfolge der Steine ändern.
Arbeitet man mit einer vorgegebenen 3-Farben Lösung die man erweitert, so sollte man darauf achten viele 3-er Lösungen mit verschiedenen
Aussenkanten zu verwenden (ich selbst hatte ca. 16000 3er Lösungen generiert).
4) Lösung
Inzwischen habe ich eine (potentielle) Lösung gefunden, vielleicht kann jemand anderes versuchen, sie zu verifizieren?
Die 256 Teile sind folgendermassen numeriert (beginnend bei 0, die Farben sind von 0-3 kodiert):
0: [0, 0, 0, 0]; 1: [1, 0, 0, 0]; 2: [2, 0, 0, 0]; 3: [3, 0, 0, 0]; 4: [0, 1, 0, 0]; 5: [1, 1, 0, 0]; 6: [2, 1, 0, 0]; 7: [3, 1, 0, 0]; 8: [0, 2, 0, 0]; 9: [1, 2, 0, 0]; 10: [2, 2, 0, 0]; 11: [3, 2, 0, 0]; 12: [0, 3, 0, 0]; 13: [1, 3, 0, 0]; 14: [2, 3, 0, 0]; 15: [3, 3, 0, 0]; 16: [0, 0, 1, 0]; 17: [1, 0, 1, 0]; 18: [2, 0, 1, 0]; 19: [3, 0, 1, 0]; 20: [0, 1, 1, 0]; 21: [1, 1, 1, 0]; 22: [2, 1, 1, 0]; 23: [3, 1, 1, 0]; 24: [0, 2, 1, 0]; 25: [1, 2, 1, 0]; 26: [2, 2, 1, 0]; 27: [3, 2, 1, 0]; 28: [0, 3, 1, 0]; 29: [1, 3, 1, 0]; 30: [2, 3, 1, 0]; 31: [3, 3, 1, 0]; 32: [0, 0, 2, 0]; 33: [1, 0, 2, 0]; 34: [2, 0, 2, 0]; 35: [3, 0, 2, 0]; 36: [0, 1, 2, 0]; 37: [1, 1, 2, 0]; 38: [2, 1, 2, 0]; 39: [3, 1, 2, 0]; 40: [0, 2, 2, 0]; 41: [1, 2, 2, 0]; 42: [2, 2, 2, 0]; 43: [3, 2, 2, 0]; 44: [0, 3, 2, 0]; 45: [1, 3, 2, 0]; 46: [2, 3, 2, 0]; 47: [3, 3, 2, 0]; 48: [0, 0, 3, 0]; 49: [1, 0, 3, 0]; 50: [2, 0, 3, 0]; 51: [3, 0, 3, 0]; 52: [0, 1, 3, 0]; 53: [1, 1, 3, 0]; 54: [2, 1, 3, 0]; 55: [3, 1, 3, 0]; 56: [0, 2, 3, 0]; 57: [1, 2, 3, 0]; 58: [2, 2, 3, 0]; 59: [3, 2, 3, 0]; 60: [0, 3, 3, 0]; 61: [1, 3, 3, 0]; 62: [2, 3, 3, 0]; 63: [3, 3, 3, 0]; 64: [0, 0, 0, 1]; 65: [1, 0, 0, 1]; 66: [2, 0, 0, 1]; 67: [3, 0, 0, 1]; 68: [0, 1, 0, 1]; 69: [1, 1, 0, 1]; 70: [2, 1, 0, 1]; 71: [3, 1, 0, 1]; 72: [0, 2, 0, 1]; 73: [1, 2, 0, 1]; 74: [2, 2, 0, 1]; 75: [3, 2, 0, 1]; 76: [0, 3, 0, 1]; 77: [1, 3, 0, 1]; 78: [2, 3, 0, 1]; 79: [3, 3, 0, 1]; 80: [0, 0, 1, 1]; 81: [1, 0, 1, 1]; 82: [2, 0, 1, 1]; 83: [3, 0, 1, 1]; 84: [0, 1, 1, 1]; 85: [1, 1, 1, 1]; 86: [2, 1, 1, 1]; 87: [3, 1, 1, 1]; 88: [0, 2, 1, 1]; 89: [1, 2, 1, 1]; 90: [2, 2, 1, 1]; 91: [3, 2, 1, 1]; 92: [0, 3, 1, 1]; 93: [1, 3, 1, 1]; 94: [2, 3, 1, 1]; 95: [3, 3, 1, 1]; 96: [0, 0, 2, 1]; 97: [1, 0, 2, 1]; 98: [2, 0, 2, 1]; 99: [3, 0, 2, 1]; 100: [0, 1, 2, 1]; 101: [1, 1, 2, 1]; 102: [2, 1, 2, 1]; 103: [3, 1, 2, 1]; 104: [0, 2, 2, 1]; 105: [1, 2, 2, 1]; 106: [2, 2, 2, 1]; 107: [3, 2, 2, 1]; 108: [0, 3, 2, 1]; 109: [1, 3, 2, 1]; 110: [2, 3, 2, 1]; 111: [3, 3, 2, 1]; 112: [0, 0, 3, 1]; 113: [1, 0, 3, 1]; 114: [2, 0, 3, 1]; 115: [3, 0, 3, 1]; 116: [0, 1, 3, 1]; 117: [1, 1, 3, 1]; 118: [2, 1, 3, 1]; 119: [3, 1, 3, 1]; 120: [0, 2, 3, 1]; 121: [1, 2, 3, 1]; 122: [2, 2, 3, 1]; 123: [3, 2, 3, 1]; 124: [0, 3, 3, 1]; 125: [1, 3, 3, 1]; 126: [2, 3, 3, 1]; 127: [3, 3, 3, 1]; 128: [0, 0, 0, 2]; 129: [1, 0, 0, 2]; 130: [2, 0, 0, 2]; 131: [3, 0, 0, 2]; 132: [0, 1, 0, 2]; 133: [1, 1, 0, 2]; 134: [2, 1, 0, 2]; 135: [3, 1, 0, 2]; 136: [0, 2, 0, 2]; 137: [1, 2, 0, 2]; 138: [2, 2, 0, 2]; 139: [3, 2, 0, 2]; 140: [0, 3, 0, 2]; 141: [1, 3, 0, 2]; 142: [2, 3, 0, 2]; 143: [3, 3, 0, 2]; 144: [0, 0, 1, 2]; 145: [1, 0, 1, 2]; 146: [2, 0, 1, 2]; 147: [3, 0, 1, 2]; 148: [0, 1, 1, 2]; 149: [1, 1, 1, 2]; 150: [2, 1, 1, 2]; 151: [3, 1, 1, 2]; 152: [0, 2, 1, 2]; 153: [1, 2, 1, 2]; 154: [2, 2, 1, 2]; 155: [3, 2, 1, 2]; 156: [0, 3, 1, 2]; 157: [1, 3, 1, 2]; 158: [2, 3, 1, 2]; 159: [3, 3, 1, 2]; 160: [0, 0, 2, 2]; 161: [1, 0, 2, 2]; 162: [2, 0, 2, 2]; 163: [3, 0, 2, 2]; 164: [0, 1, 2, 2]; 165: [1, 1, 2, 2]; 166: [2, 1, 2, 2]; 167: [3, 1, 2, 2]; 168: [0, 2, 2, 2]; 169: [1, 2, 2, 2]; 170: [2, 2, 2, 2]; 171: [3, 2, 2, 2]; 172: [0, 3, 2, 2]; 173: [1, 3, 2, 2]; 174: [2, 3, 2, 2]; 175: [3, 3, 2, 2]; 176: [0, 0, 3, 2]; 177: [1, 0, 3, 2]; 178: [2, 0, 3, 2]; 179: [3, 0, 3, 2]; 180: [0, 1, 3, 2]; 181: [1, 1, 3, 2]; 182: [2, 1, 3, 2]; 183: [3, 1, 3, 2]; 184: [0, 2, 3, 2]; 185: [1, 2, 3, 2]; 186: [2, 2, 3, 2]; 187: [3, 2, 3, 2]; 188: [0, 3, 3, 2]; 189: [1, 3, 3, 2]; 190: [2, 3, 3, 2]; 191: [3, 3, 3, 2]; 192: [0, 0, 0, 3]; 193: [1, 0, 0, 3]; 194: [2, 0, 0, 3]; 195: [3, 0, 0, 3]; 196: [0, 1, 0, 3]; 197: [1, 1, 0, 3]; 198: [2, 1, 0, 3]; 199: [3, 1, 0, 3]; 200: [0, 2, 0, 3]; 201: [1, 2, 0, 3]; 202: [2, 2, 0, 3]; 203: [3, 2, 0, 3]; 204: [0, 3, 0, 3]; 205: [1, 3, 0, 3]; 206: [2, 3, 0, 3]; 207: [3, 3, 0, 3]; 208: [0, 0, 1, 3]; 209: [1, 0, 1, 3]; 210: [2, 0, 1, 3]; 211: [3, 0, 1, 3]; 212: [0, 1, 1, 3]; 213: [1, 1, 1, 3]; 214: [2, 1, 1, 3]; 215: [3, 1, 1, 3]; 216: [0, 2, 1, 3]; 217: [1, 2, 1, 3]; 218: [2, 2, 1, 3]; 219: [3, 2, 1, 3]; 220: [0, 3, 1, 3]; 221: [1, 3, 1, 3]; 222: [2, 3, 1, 3]; 223: [3, 3, 1, 3]; 224: [0, 0, 2, 3]; 225: [1, 0, 2, 3]; 226: [2, 0, 2, 3]; 227: [3, 0, 2, 3]; 228: [0, 1, 2, 3]; 229: [1, 1, 2, 3]; 230: [2, 1, 2, 3]; 231: [3, 1, 2, 3]; 232: [0, 2, 2, 3]; 233: [1, 2, 2, 3]; 234: [2, 2, 2, 3]; 235: [3, 2, 2, 3]; 236: [0, 3, 2, 3]; 237: [1, 3, 2, 3]; 238: [2, 3, 2, 3]; 239: [3, 3, 2, 3]; 240: [0, 0, 3, 3]; 241: [1, 0, 3, 3]; 242: [2, 0, 3, 3]; 243: [3, 0, 3, 3]; 244: [0, 1, 3, 3]; 245: [1, 1, 3, 3]; 246: [2, 1, 3, 3]; 247: [3, 1, 3, 3]; 248: [0, 2, 3, 3]; 249: [1, 2, 3, 3]; 250: [2, 2, 3, 3]; 251: [3, 2, 3, 3]; 252: [0, 3, 3, 3]; 253: [1, 3, 3, 3]; 254: [2, 3, 3, 3]; 255: [3, 3, 3, 3];
Dann ist eine (potentielle) Lösung - p:t bedeutet Teil t ist an Position p, wobei die Positionen Reihe für Reihe durchnumeriert sind:
|0:4|1:17|2:64|3:16|4:17|5:37|6:137|7:38|8:149|9:77|10:47|11:163|12:140|13:35|14:184|15:218|16:80|17:84|18:81|19:17|20:33|21:34|22:18|23:72|24:6|25:49|26:216|27:122|28:210|29:120|30:187|31:135|32:5|33:21|34:85|35:65|36:8|37:34|38:164|39:161|40:128|41:12|42:55|43:205|44:23|45:93|46:75|47:50|48:0|49:20|50:69|51:1|52:32|53:168|54:170|55:138|56:2|57:48|58:252|59:243|60:244|61:245|62:193|63:60|64:160|65:148|66:97|67:144|68:88|69:90|70:106|71:146|72:96|73:156|74:79|75:31|76:111|77:143|78:3|79:44|80:154|81:102|82:169|83:166|84:165|85:133|86:41|87:150|88:105|89:182|90:241|91:196|92:57|93:226|94:176|95:232|96:86|97:73|98:26|99:74|100:42|101:130|102:40|103:134|104:25|105:94|106:127|107:211|108:124|109:203|110:14|111:59|112:101|113:129|114:36|115:145|116:104|117:162|118:152|119:98|120:132|121:53|122:237|123:183|124:119|125:115|126:240|127:236|128:102|129:66|130:24|131:70|132:9|133:10|134:22|135:89|136:82|137:108|138:171|139:190|140:215|141:109|142:175|143:155|144:246|145:209|146:100|147:177|148:208|149:112|150:212|151:117|152:229|153:185|154:234|155:174|156:151|157:121|158:250|159:214|160:95|161:119|162:233|163:158|164:71|165:45|166:167|167:189|168:235|169:142|170:43|171:186|172:198|173:61|174:255|175:231|176:197|177:29|178:91|179:118|180:225|181:34|182:58|183:222|184:107|185:178|186:200|187:30|188:83|189:76|190:15|191:27|192:51|193:228|194:181|195:253|196:251|197:194|198:28|199:103|200:102|201:110|202:147|203:116|204:213|205:113|206:224|207:180|208:51|209:11|210:46|211:191|212:239|213:131|214:52|215:201|216:54|217:249|218:230|219:141|220:39|221:173|222:187|223:206|224:179|225:192|226:56|227:254|228:219|229:114|230:220|231:99|232:188|233:223|234:123|235:242|236:248|237:202|238:62|239:195|240:126|241:227|242:172|243:159|244:87|245:125|246:247|247:217|248:78|249:7|250:13|251:63|252:207|253:19|254:92|255:67
Hallo Dietmar,
ich kann Deine Lösung bislang nur teilweise bestätigen: Die 256 Bauteilesind zumindest schon einmal eindeutig (aber das war ja auch der einfache Teil).
Die Lösung als solche kann ich leider bislang noch nicht bestätigen, da mir nicht ganz klar ist, wie Du die Teile anordnen möchtest.
Sehe ich das Richtig: Das Spielfeld sieht wie folgt aus:
0 | 1 | 2 | 3 ...
16 | 17 | 18 | 19 ...
32 | 33 | 34 | 35 ...
Wenn ich jetzt das erste Teil legen möchte, sieht das nach Deiner Lösung wie folgt aus:
Teil: 4: [0, 1, 0, 0]
Position: |0:4|
Die obere linke Ecke müßte daher wie folgt aussehen:
0 1
0 0
Daran schließt dann das nächste Teil an:
Teil: 17: [1, 0, 1, 0]
Position: 1:17
0 1 | 1 0
0 0 | 1 0
Schon beim 2. Teil klappt's also nicht. Oder verwendest Du eine andere Anordnung?
Gruß
Thomas
\\//_ Build long and ℘rosper!
Hallo Dietmar, hallo Thomas,
ich habe noch etwas mehr Probleme beim Nachvollziehen:
Die Liste hat 1:17 und etwas später 4:17 ...
Das würde bedeuten, dass das Teil 17 (mindestens) zwei Mal vorkäme.
Hmm, Ingo.
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
Das ist richtig, es gibt ein Problem mit der Lösung. Teil 17 wird zweimal angezeigt. Da gibt es noch ein Problem mit dem Verfahren. Beim 2-Farben Problem bekomme ich auch 800 Lösungen, also hat es mit den Verbesserungen zu tun. Das vorher berechnete 9x9er, das ich als Basis verwende, wurde anscheinend falsch eingetragen. Ein 256er sollte aber trotzdem möglich sein, werde den Fehler beheben und es dann weiter versuchen.
IngoAlthoefer hat geschrieben:
\\//_ Build long and ℘rosper!