Exemple #1
0
    // 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();
    }
Exemple #2
0
 // Use this for initialization
 void Start()
 {
     char_RigidBody = GetComponent <Kinematic>();
     arrive         = GetComponent <DynoArrive>();
     align          = GetComponent <DynoAlign>();
     if (recordLogs)
     {
         logWriter = GetComponent <CustomLogWriter>();
     }
 }
Exemple #3
0
 // Use this for initialization
 void Start()
 {
     char_kinematic = GetComponent <Kinematic>();
     seek           = GetComponent <KinematicSeek>();
     arrive         = GetComponent <KinematicArrive>();
     dynoAlign      = GetComponent <DynoAlign>();
     if (recordLogs)
     {
         logWriter = GetComponent <CustomLogWriter>();
     }
 }
Exemple #4
0
    // 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();
    }
Exemple #5
0
    // 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);
    }