Exemplo n.º 1
0
    public static List <ShipChromosomeNode> TreeCrossover(List <ShipChromosomeNode> selectionList)
    {
        List <ShipChromosomeNode> outputPopulation = new List <ShipChromosomeNode>();

        while (selectionList.Count >= 2)
        {
            //SELECT TWO PARENTS AT RANDOM
            ShipChromosomeNode p1 = selectRandomElement(selectionList, true);
            ShipChromosomeNode p2 = selectRandomElement(selectionList, true);
            //if (p1 == p2)
            //	Debug.LogError("SAME PARENTS");
            //Debug.Log("P1: \n" + p1.getString() + "\n");
            //Debug.Log("P2: \n" + p2.getString() + "\n");

            //RETRIEVE A LIST OF THEIR NODES
            List <ShipChromosomeNode> p1Nodes = p1.getListOfNodes();
            List <ShipChromosomeNode> p2Nodes = p2.getListOfNodes();

            //SELECT ONE AT RANDOM FROM EACH PARENT
            ShipChromosomeNode p1CutNode = selectRandomElement(p1Nodes, false);
            ShipChromosomeNode p2CutNode = selectRandomElement(p2Nodes, false);
            //Debug.Log("P1 cut point: \n" + p1CutNode.getString() + "\n");
            //Debug.Log("P2 cut point: \n" + p2CutNode.getString() + "\n");

            //ADD THE OFFSPRING CREATED TO THE OUTPUT POPULATION
            outputPopulation.Add(createOffspring(p1, p1CutNode, p2CutNode));
            outputPopulation.Add(createOffspring(p2, p2CutNode, p1CutNode));
        }


        return(outputPopulation);
    }
Exemplo n.º 2
0
    public void generatePhysicalShip(ShipChromosomeNode root)
    {
        GameObject g = (GameObject)GameObject.Instantiate(Resources.Load(Config.HEAVY_BLOCK_PREFAB_LOCATION),
                                                          Vector3.zero,
                                                          Quaternion.identity);

        Rigidbody r = g.AddComponent <Rigidbody>();

        r.mass        = Config.BLOCK_MASS * root.getListOfNodes().Count;
        r.drag        = Config.BLOCK_DRAG;
        r.angularDrag = Config.BLOCK_ANGULAR_DRAG;
        //r.constraints = RigidbodyConstraints.FreezeAll;
        r.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY
                        | RigidbodyConstraints.FreezePositionZ;

        BlockScript    b = g.GetComponent <BlockScript>();
        ShipController s = g.AddComponent <ShipController>();

        s.rootNode = root;
        s.setOrbs(orbsRoot);

        lastShip = s;

        b.initialize(root, s);
        b.combineSubMeshes();
        g.transform.position = transform.position;
        g.SetActive(false);
    }
Exemplo n.º 3
0
    public List <ShipChromosomeNode> getListOfNodes()
    {
        List <ShipChromosomeNode> allNodes = new List <ShipChromosomeNode>();

        allNodes.Add(this);

        if (top != null && parentPos != ChildNode.TOP)
        {
            allNodes.AddRange(top.getListOfNodes());
        }
        if (bottom != null && parentPos != ChildNode.BOTTOM)
        {
            allNodes.AddRange(bottom.getListOfNodes());
        }
        if (left != null && parentPos != ChildNode.LEFT)
        {
            allNodes.AddRange(left.getListOfNodes());
        }
        if (right != null && parentPos != ChildNode.RIGHT)
        {
            allNodes.AddRange(right.getListOfNodes());
        }

        return(allNodes);
    }