Mijn algoritme werkt door zo snel mogelijk 3x3 velden te genereren. Het (6x3) veld wordt opgedeeld in een linker en rechterhelft. Eerst worden alle mogelijke linkerhelften gegenereerd. Daarna genereert hij voor elke linkerhelft alle rechterhelften boven een bepaalde treshold ( uit de 31 - 9 = 22 overgebleven kaarten ). Die helften worden daarna gecombineerd.
De 3x3 velden worden op een zuivere bruteforce manier gegenereerd. Ik ga niet zeggen hoe dat precies werkt, maar met 10 klok cycles per kaart werkt het aardig snel... FYI: een branch miss op mijn architectuur is 14 cycles. Bij elke unieke set kaarten houd hij in een hash table wat data bij.
Er bestaan triviale algoritmes -ik heb er 3- om de uitkomst van de 3x3 blokken te voorspellen met een redelijk succespercentage. Verder zit er wat simpele wiskunde achter om er A) voor te zorgen dat ik de zeker weten de optimale score vind en B) om te voorkomen dat je 10.000 3x3 velden met 10.000 andere gaat combineren. Het combineren werkt namelijk met O( n
2 ). En dan ga je met deze aantallen zeer rap door je tijd heen..
Er zijn 3 redenen waarom dit niet meer werkt met de regels van tuintopia:
• Er bestaat geen efficiënt algoritme om een 3x3 node te genereren met de zon en wind regels. Zoals gezegd doe ik er elke 10 klok cycles een op het dataset van pedorus, reken met de zon en wind erbij op een factor 10 extra. Best-case. Gemiddeld is het waarschijnlijk 200x trager.
• met het toevoegen van de tuintopia regels is de pruning in effectiviteit van 99.9% naar 3.6% gedaald.
• door de zon en de wind is de spreiding van scores binnen een 3x3 node veel groter. Concreet betekent dat dat er bijna niets te prunen valt. Zelfs met een heuristic welke exact gelijk is aan de score.
En dan zit je nog met het probleem hoe je in hemelsnaam dat huis implementeert. En wat dacht je dan van velden als 4x6. De oplettende lezer zal opmerken dat je van 4x2 nodes kan genereren. Alleen het combineren van die nodes werkt zo traag dat ik betwijfel of het efficiënter werkt dan native bruteforce. Ik voorspel alvast dat het niet vooruit te branden is..
Waarom ik dit vertel? Als je mijn algoritme op basis van deze post weet te implementeren en het ook nog eens voor elkaar krijgt de bovenstaande problemen op te lossen, dan verdien je het om te winnen.

. Ik heb overigens al een ander algoritme bedacht.
[
Voor 5% gewijzigd door
Anoniem: 303530 op 01-05-2013 20:23
]