![]() |
Knight's Tour Generator
Tourneys and the Fast Generation and Obfuscation of Closed Knight's Tours
|
Neural network tourney generator. More...
#include <TakefujiLee.h>
Public Member Functions | |
| CTakefujiLee (int w, int h, int seed) | |
| Constructor. More... | |
| void | Generate (CBoard &b) |
| Generate a tourney. More... | |
Public Member Functions inherited from CNeuralNet | |
| CNeuralNet (UINT n, int seed) | |
| Constructor. More... | |
| void | InsertNeuron (UINT i, UINT j) |
| Insert a neuron. More... | |
Public Member Functions inherited from CGraph | |
| CGraph (const UINT n) | |
| Constructor. More... | |
| ~CGraph () | |
| Destructor. More... | |
| void | InsertEdge (const UINT i, const UINT j) |
| Insert an edge. More... | |
| UINT | BFSF (std::vector< UINT > &result) |
| Breadth-first spanning forest. More... | |
| void | PrintGraph () |
| Print the graph to a text file. More... | |
Private Member Functions | |
| bool | Update () |
| Update all neurons. More... | |
| void | GetAdjacentVertices (std::vector< CVertex * > &v, CVertex *p) |
| Get adjacent vertices. More... | |
| bool | IsStable () |
| Stability test. More... | |
| bool | HasDegree2 () |
| Degree test. More... | |
| void | Reset () |
| Reset. More... | |
| void | RandomizeEdgeList () |
| Randomize the edge list. More... | |
| void | GraphToBoard (CBoard &b) |
| Convert graph to board. More... | |
Private Attributes | |
| int | m_nWidth = 0 |
| Board width. | |
| int | m_nHeight = 0 |
| Board height. | |
| int | m_nSize = 0 |
| Board size. | |
Additional Inherited Members | |
Protected Attributes inherited from CGraph | |
| std::vector< CEdge * > | m_vEdgeList |
| Edge list. | |
| UINT | m_nNumEdges = 0 |
| Number of edges. | |
| CVertex * | m_pVertexList = nullptr |
| Vertex list. | |
| UINT | m_nNumVerts = 0 |
| Number of vertices. | |
| std::queue< CVertex * > | m_qBFSQueue |
| Queue for breadth-first search. | |
| CRandom | m_cRandom |
| Random number generator. | |
Neural network tourney generator by Takefuji and Lee, see Takefuji and Lee, "Neural network computing for knight's tour problems", Neurocomputing, 4(5):249–254, 1992. Unfortunately the paper doesn't completely specify the method used, so I've taken best guesses in a couple of places. This method is slow at generating closed knight's tours (for more details, see Parberry, "Scalability of a neural network for the knight's tour problem", Neurocomputing, 12:19-34, 1996), but it's much faster at generating tourneys. It's essentially just a Hopfield network with a custom update function, so convergence is guaranteed.
Definition at line 47 of file TakefujiLee.h.
| CTakefujiLee::CTakefujiLee | ( | int | w, |
| int | h, | ||
| int | seed | ||
| ) |
Initialize the neural network.
| w | Board width. |
| h | Board height. |
| seed | PRNG seed. |
Definition at line 41 of file TakefujiLee.cpp.
| void CTakefujiLee::Generate | ( | CBoard & | b | ) |
Get vector of vertices adjacent to a given vertex.
| p | Pointer to a vertex. |
| v | [out] Vector of vertices adjacent to the vertex pointed to by p. |
Definition at line 237 of file TakefujiLee.cpp.
|
private |
Assuming the neural network has converged, convert the outputs of its neurons to a move table.
| b | [out] Chessboard for the results. |
Definition at line 175 of file TakefujiLee.cpp.
|
private |
The neural network may converge to a state in which not all vertices have degree 2, which is a requirement for knight's tours and tourneys.
Definition at line 123 of file TakefujiLee.cpp.
|
private |
The network is stable if all neurons are stable.
Definition at line 111 of file TakefujiLee.cpp.
|
private |
Permute the edge list into pseudorandom order for update.
Definition at line 252 of file TakefujiLee.cpp.
|
private |
Reset all neuron outputs to zero and all neuron states to a random value.
Definition at line 70 of file TakefujiLee.cpp.
|
private |
Update all neurons.
Definition at line 83 of file TakefujiLee.cpp.
1.8.15