Je crois que nous pouvons réduire le contenu de l'maximale problème collecteur de booléenne satisifiability et de montrer la NP-complétude à travers toute dépendance sur ce subproblem. De ce fait, les algorithmes spinning_plate fournis sont raisonnables, comme des heuristiques, precomputing et d'apprentissage de la machine est raisonnable, et l'astuce consiste à trouver la meilleure solution heuristique si nous voulons gaffe en avant ici.
Considérons un conseil comme suit:
..S........
#.#..#..###
...........
...........
..........F
Cela a de nombreux problèmes qui, à cause gourmand et porte-lié solutions à l'échec. Si nous regardons cette deuxième ligne:
#.#..#..###
Nos portes logiques sont, en base 0 tableau 2D commandés [row][column]
:
[1][4], [1][5], [1][6], [1][7], [1][8]
Nous pouvons nous rendre à nouveau présent comme une équation à satisfaire le bloc:
if ([1][9] AND ([1][10] AND [1][11]) AND ([1][12] AND [1][13]):
traversal_cost = INFINITY; longest = False # Infinity does not qualify
À l'exception de l'infini en un unsatisfiable cas, nous revenir en arrière et rerender ce que:
if ([1][14] AND ([1][15] AND [1][16]) AND [1][17]:
traversal_cost = 6; longest = True
Et notre caché boolean relation qui se situe parmi l'ensemble de ces portes. Vous pouvez également montrer que géométrique épreuves peuvent pas fractalize de manière récursive, parce que nous pouvons toujours créer un mur qui est exactement N-1
de la largeur ou de la hauteur de long, ce qui représente une partie essentielle de la solution dans tous les cas (donc, de division et de conquête ne sera pas vous aider).
En outre, en raison des perturbations à travers les différentes lignes sont importantes:
..S........
#.#........
...#..#....
.......#..#
..........F
On peut montrer que, sans un ensemble complet de formalisation géométrique des identités, la recherche de l'espace se réduit à N-SAT.
Par extension, on peut également montrer que c'est trivial de vérifier et de non-polynomial pour résoudre le nombre de portes d'approche de l'infini. Sans surprise, c'est pourquoi les jeux de tower defense restent tellement amusant pour les humains à jouer. De toute évidence, une preuve rigoureuse est souhaitable, mais c'est un squelette de départ.
Notez que vous pouvez réduire considérablement le n stage de n-choisissez-k relation. Parce que nous pouvons de manière récursive montrent que chaque perturbation doit se trouver sur le chemin critique, et parce que le chemin critique est toujours calculable en O(V+E) temps (avec quelques optimisations pour accélérer les choses pour chaque perturbation), vous pouvez réduire considérablement votre espace de recherche à un coût d'une largeur de recherche pour chaque tour supplémentaire ajouté à la carte.
Parce que nous pouvons raisonnablement supposer O(n^k) pour une solution déterministe, un heuristical approche est raisonnable. Mon conseil donc se situe quelque part entre spinning_plate réponse et Soravux de l', avec un oeil vers les techniques d'apprentissage automatique applicable au problème.
Le 0e solution: Utiliser un tolérable, mais sous-optimale de l'IA, dans lequel spinning_plate fourni deux algorithmes utilisables. En effet, ces approximative de combien de naïfs, les joueurs de l'approche du jeu, et cela devrait être suffisant pour un simple jeu, mais avec un degré élevé d'exploitabilité.
Le 1er ordre de la solution: Utiliser une base de données. Compte tenu de la formulation du problème, vous n'avez pas assez démontré la nécessité de calculer la solution optimale à la volée. Par conséquent, si nous relaxer la contrainte de se rapprocher d'un plateau aléatoire en l'absence d'informations, il suffit de précalculer l'optimum pour tous K
tolérable pour chaque conseil. Évidemment, cela ne fonctionne que pour un petit nombre de planches: avec V!
potentiel du conseil des états pour chaque configuration, nous ne pouvons pas raisonnablement à précalculer tous les optimums comme V
devient très grand.
La 2e ordre solution: Utiliser une machine-étape d'apprentissage. La promotion de chaque étape que vous fermez un écart qui en résulte est très élevé coût de traversée, l'exécution jusqu'à ce que votre algorithme converge ou pas plus de solution optimale peut être trouvée que gourmand. Une pléthore d'algorithmes sont applicables ici, donc je vous recommande de chasser les classiques et la littérature pour choisir le bon celui qui fonctionne dans les limites de votre programme.
La meilleure heuristique peut être une simple carte de la chaleur générée par un localement l'état courant, profondeur de récursivité-première traversée, le tri des résultats par la plus à la moins fréquemment parcourus après l'O(V^2) de la traversée. Procédure par le biais de cette sortie goulûment permet d'identifier tous les goulots d'étranglement, et le faire sans faire le cheminement de l'impossible c'est tout à fait possible (la vérification est O(V+E)).
Mettre tous ensemble, j'essaierais d'un croisement de ces approches, en combinant la carte de la chaleur et du chemin critique des identités. Je suppose que il y a assez de place ici pour arriver à une bonne, fonctionnelle géométrique la preuve, qui satisfait toutes les contraintes du problème.