// Use this for initialization void Start() { mainBoard = new int[size, size]; maxTurns = size * size; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { GameObject tile; if ((i + j) % 2 == 0) { tile = Instantiate(whiteTile); } else { tile = Instantiate(blackTile); } tile.transform.position = new Vector3(i, j, 0.0f); tile.transform.parent = transform; } } tokens = new List <GameObject>(); float cameraZ = Camera.main.transform.position.z; Camera.main.transform.position = new Vector3(size / 2, size / 2, cameraZ); logger = gameObject.AddComponent <CustomLogWriter>(); logger.filePath = "Tic_Tac_Toe_" + (doubleAI ? "AI_v_AI_" : "") + (size + "x" + size + "_") + (circleTime + "_" + crossTime) + ("_" + numberOfIterations); ResetBoard(); }
// Use this for initialization void Start() { char_RigidBody = GetComponent <Kinematic>(); arrive = GetComponent <DynoArrive>(); align = GetComponent <DynoAlign>(); if (recordLogs) { logWriter = GetComponent <CustomLogWriter>(); } }
// Use this for initialization void Start() { char_kinematic = GetComponent <Kinematic>(); seek = GetComponent <KinematicSeek>(); arrive = GetComponent <KinematicArrive>(); dynoAlign = GetComponent <DynoAlign>(); if (recordLogs) { logWriter = GetComponent <CustomLogWriter>(); } }
// Use this for initialization void Start() { mainBoard = new int[size, size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { GameObject tile; if ((i + j) % 2 == 0) { tile = Instantiate(whiteTile); } else { tile = Instantiate(blackTile); } tile.transform.position = new Vector3(i, j, 0.0f); tile.transform.parent = transform; } } player1Tokens = new List <Token>(); player2Tokens = new List <Token>(); for (int i = 0; i < numberOfTokens; i++) { player1Tokens.Add(new Token(Instantiate(player1Token), 0)); player2Tokens.Add(new Token(Instantiate(player2Token), 1)); } float cameraZ = Camera.main.transform.position.z; Camera.main.transform.position = new Vector3(size / 2, size / 2, cameraZ); totalMinimaxTime = 0; minimaxTurns = 0; totalMCTSDepth = 0; mctsTurns = 0; if (numberOfIterations > 0) { logger = gameObject.AddComponent <CustomLogWriter>(); logger.filePath = "Checkers_" + (doubleAI ? "AI_v_AI_" : "") + (size + "x" + size + "_") + numberOfIterations + "_iterations"; logger.Write("Player 1 start first and uses MCTS"); logger.Write("Player 2 uses Minimax"); logger.Write("AI Parameters:"); logger.Write("Minimax Depth: " + maxMinimaxDepth); logger.Write("MCTS Time: " + maxMCTSTime + " milliseconds"); } ResetBoard(); }
// Use this for initialization void Awake() { char_RigidBody = GetComponent <Kinematic>(); arrive = GetComponent <DynoArrive>(); align = GetComponent <DynoAlign>(); seek = GetComponent <DynoSeek>(); goal = GetComponent <Goal>(); levelManager = GetComponent <LevelManager>(); if (recordLogs) { logWriter = GetComponent <CustomLogWriter>(); } goalObject = GameObject.CreatePrimitive(PrimitiveType.Sphere); goalObject.transform.position = transform.position; goal.setGoal(goalObject); currentGoal = 0; path = new List <Vector3>(); isLastGoal = false; }
// Use this for initialization void Start() { //Initialize node list nodeList = new List <Node>(numberOfNodes); //Create nodes at random position for (int i = 0; i < numberOfNodes; i++) { Node node = new Node(); node.id = i; node.position = new Vector2(Random.Range(minRandom, maxRandom), Random.Range(minRandom, maxRandom)); nodeList.Add(node); } //Initialize connection matrix to all 0s connectionMatrix = new List <List <byte> >(numberOfNodes); for (int i = 0; i < numberOfNodes; i++) { connectionMatrix.Add(new List <byte>(numberOfNodes)); for (int j = 0; j < numberOfNodes; j++) { connectionMatrix[i].Add(0); } } nodeLogWriter = gameObject.AddComponent <CustomLogWriter>(); nodeLogWriter.filePath = "Random_Graph_Nodes_" + numberOfNodes; aStarLogWriter = gameObject.AddComponent <CustomLogWriter>(); aStarLogWriter.filePath = "A_Star_Nodes_" + numberOfNodes; dijkstraLogWriter = gameObject.AddComponent <CustomLogWriter>(); dijkstraLogWriter.filePath = "Dijkstra_Nodes_" + numberOfNodes; int totalConnections = 0; //Assign connections nodeLogWriter.Write("start node index, end node index, connection length"); for (int i = 0; i < numberOfNodes; i++) { int maxConnections = Random.Range(1, 5); int connectionCount = 0; for (int j = 0; j < numberOfNodes; j++) { //Avoid self connection if (i != j) { //If already connected increment connection count if (connectionMatrix[i][j] == 1) { connectionCount++; break; } else { //Randomly assign connections int random = Random.Range(0, numberOfNodes); if (random >= numberOfNodes * 0.99) { connectionMatrix[i][j] = 1; } } //If connection was created if (connectionMatrix[i][j] == 1) { connectionCount++; //Create the opposite connection connectionMatrix[j][i] = 1; //Print out connection to file string logString = i.ToString() + "," + j.ToString() + "," + Vector2.Distance(nodeList[i].position, nodeList[j].position); nodeLogWriter.Write(logString); } } //If we've reached max number of connections we quit if (connectionCount >= maxConnections) { break; } } totalConnections += connectionCount; } //Run A* maxIterations times long totalOpenListCount = 0; long totalClosedListCount = 0; long totalTime = 0; long totalPathSize = 0; float averageOpenListCount = 0.0f; float averageClosedListCount = 0.0f; float averageTime = 0.0f; float averagePathSize = 0.0f; for (int i = 0; i < maxIterations; i++) { //Get random start node Node start = nodeList[Random.Range(0, nodeList.Count)]; //Get random end node Node end = nodeList[Random.Range(0, nodeList.Count)]; while (start.id == end.id) { end = nodeList[Random.Range(0, nodeList.Count)]; } //Get start time System.DateTime startTime = System.DateTime.Now; //Run algorithm int openListCount, closedListCount; List <Vector2> path = GetShortestPath(start, end, false, out openListCount, out closedListCount); //Get end time System.DateTime endTime = System.DateTime.Now; //Get length of list int pathLength = path.Count; //Update accumulators totalOpenListCount += openListCount; totalClosedListCount += closedListCount; totalTime += (endTime - startTime).Milliseconds; totalPathSize += pathLength; } print("Done with A*"); //Log all the values averageOpenListCount = totalOpenListCount / maxIterations; averageClosedListCount = totalClosedListCount / maxIterations; averageTime = totalTime / maxIterations; averagePathSize = totalPathSize / maxIterations; aStarLogWriter.Write("Total iterations: " + maxIterations); aStarLogWriter.Write("Average open list count: " + averageOpenListCount); aStarLogWriter.Write("Average closed list count: " + averageClosedListCount); aStarLogWriter.Write("Average time in milliseconds: " + averageTime); aStarLogWriter.Write("Average path size: " + averagePathSize); //Run dijkstra maxIterations times totalOpenListCount = 0; totalClosedListCount = 0; totalTime = 0; totalPathSize = 0; averageOpenListCount = 0.0f; averageClosedListCount = 0.0f; averageTime = 0.0f; averagePathSize = 0.0f; for (int i = 0; i < maxIterations; i++) { //Get random start node Node start = nodeList[Random.Range(0, nodeList.Count)]; //Get random end node Node end = nodeList[Random.Range(0, nodeList.Count)]; while (start.id == end.id) { end = nodeList[Random.Range(0, nodeList.Count)]; } //Get start time System.DateTime startTime = System.DateTime.Now; //Run algorithm int openListCount, closedListCount; List <Vector2> path = GetShortestPath(start, end, true, out openListCount, out closedListCount); //Get end time System.DateTime endTime = System.DateTime.Now; //Get length of list int pathLength = path.Count; //Update accumulators totalOpenListCount += openListCount; totalClosedListCount += closedListCount; totalTime += (endTime - startTime).Milliseconds; totalPathSize += pathLength; } print("Done with Dijsktra"); //Log all the values averageOpenListCount = totalOpenListCount / maxIterations; averageClosedListCount = totalClosedListCount / maxIterations; averageTime = totalTime / maxIterations; averagePathSize = totalPathSize / maxIterations; dijkstraLogWriter.Write("Total iterations: " + maxIterations); dijkstraLogWriter.Write("Average open list count: " + averageOpenListCount); dijkstraLogWriter.Write("Average closed list count: " + averageClosedListCount); dijkstraLogWriter.Write("Average time in milliseconds: " + averageTime); dijkstraLogWriter.Write("Average path size: " + averagePathSize); print("Done! " + totalConnections); }