Quali sono le tecniche che si possono usare per tenere tutti i pezzi su una tavola? È come un problema di n-regina
È una combinazione di n-regina
Quali sono le tecniche che si possono usare per tenere tutti i pezzi su una tavola? È come un problema di n-regina
È una combinazione di n-regina
Risposte:
Per indirizzare la modifica alla domanda Se stai ricevendo i pezzi in un ordine casuale e non hai informazioni sui pezzi futuri, il modo di organizzare i pezzi sarebbe quello di dare ai pezzi il minor spazio possibile. Ad esempio, se dovessi ricevere una regina al primo turno, la posizionerei in uno dei quattro angoli. Qualche altra regola sarebbe quella di tenere i cavalieri vicini l'uno all'altro e le pedine accatastate l'una sull'altra. Tutte queste strategie sono un po 'ovvie, ma è difficile avere una strategia coerente da usare in quanto ci sono così tante potenziali combinazioni di pezzi.
Mi sembra più una questione di programmazione che una di scacchi, ma è comunque interessante! Dopo aver pensato per un po ', ipotizzerei che il modo migliore per affrontare questo problema sarebbe usare i cavalieri come base. È noto che il numero massimo di cavalieri che si possono inserire su una tavola è 32 (semplicemente posizionandoli su tutti i quadrati dello stesso colore), quindi avere questo come posizione di partenza è logico in quanto questa è la massima occupazione che puoi avere con un pezzo singolo. Questa strategia si estende a una scheda N x N.
Successivamente, userei i pedoni poiché la loro abilità in attacco è limitata alle diagonali in avanti di un quadrato di portata. Possono occupare ogni altra colonna (non righe poiché ciò sarebbe limitato a 2, 4 e 6 se si seguono le regole convenzionali), e questo aggiungerà N / 4 più quadrati occupati per una scheda NxN. Questo si generalizza a un numero totale di quadrati occupati a N / 2 + N / 4, o semplicemente a 3 N / 4 quadrati occupati totali.
Questo è il risultato di circa 5 minuti di considerazione, quindi il mio algoritmo potrebbe essere difettoso. Spero che questo aiuti a rispondere alla tua domanda!
Penserei che con una selezione casuale di pezzi la strategia di base sarebbe quella di posizionarli sul tabellone in modo che attaccassero il minor numero possibile di quadrati e non ostruissero alcun grado o file che non fosse già stato ostruito ogni volta che fosse possibile. cioè cavalieri negli angoli, pezzi mobili a breve distanza come il re e il cavaliere sullo stesso rango o file e vescovi sullo stesso rango o file degli altri pezzi. In generale, quando si sceglie un quadrato per il nuovo pezzo, sarebbe simile a una caccia al re. Quando cerchi di fissare il re, vuoi ridurre il numero di quadrati che può occupare in sicurezza il più possibile (senza ridurlo di uno). Qui si desidera posizionare ogni pezzo per ridurre il numero di quadrati non ancora attaccati da nessun pezzo il meno possibile.
Poiché la definizione del problema è stata aggiornata di recente, presumo che tu stia iniziando con una scheda NxN vuota, e ti venga dato un pezzo casuale e ti viene chiesto di posizionarlo. Al termine, ti viene dato un altro pezzo a caso fino a quando non puoi più posizionarlo.
Per una strategia umana , immagino che una buona regola empirica sarebbe quella di scegliere una posizione (valida) che minimizzi il numero di quadrati ancora aperti negati dal nuovo pezzo. Esistono due componenti principali a questo livello, ad alto livello:
Per una strategia di programmazione , dobbiamo esaminare nuovamente il problema. Il modo in cui è affermato sopra non è in realtà un problema di programmazione, poiché il nostro successo dipende dalla ricerca della migliore strategia possibile (cosa che chiaramente non abbiamo fatto). La programmazione tradizionale non aiuterà in questo senso, perché le regole del problema negano al computer la perfetta conoscenza di quali pezzi stanno arrivando. Ciò rende impossibile applicare gli approcci tradizionali di brute-force o backtracking (tipicamente utilizzati per risolvere i problemi di 8 / N-Queens ).
Si potrebbero, tuttavia, impiegare varie tecniche di intelligenza artificiale alla ricerca di una strategia ottimale. In sostanza, ciò si riduce a trovare un modo per rappresentare una strategia in una sorta di struttura di dati. Questa è in realtà la parte difficile e potrebbe diventare estremamente complicata. Probabilmente dovresti creare un tipo di linguaggio specifico per il dominio che consenta regole come "scegli la colonna più a destra che non ha ancora un cavaliere", o altro. Quindi sceglieresti una specie di algoritmo di ottimizzazione (ricerca casuale, algoritmi genetici, sciami di particelle, ecc.) Per trovare un insieme di regole particolarmente buone, che sembra battere tutto il resto che hai trovato finora. C'è una buona probabilità che sia così orribilmente contorto che non potremmo mai capire come e perché funziona così bene, ma potrebbe anche battere quelli che
I due punti principali sono:
Ad esempio, posterò un rapido studio che ho fatto sui cavalieri, è un po 'sciocco poiché sappiamo già che possiamo posizionare 32 cavalieri in una tavola 8x8 semplicemente mettendoli tutti sullo stesso colore, ma l'ho ancora fatto per guarda quanti cavalieri dovrebbero essere organizzati:
(nota come il punto 2 determina quale accordo è meglio quando abbiamo un pareggio)
Inoltre, due link utili che ho trovato sono:
Tieni i pezzi fuori dal centro, ai lati.