Example #1
0
        public static Unit.Renderer DevelopTopology(Tree.RootNode tree)
        {
            var man = new DevelopManager();

            man.tree    = tree;
            tree.Target = man.firstPoint;
            foreach (var item in tree.ToBreadthFirstList())
            {
                item.Process();
            }
            man.render.InitAll();
            return(man.render);
        }
Example #2
0
        /// <summary>
        /// 自分自身を他個体と交叉させる
        /// </summary>
        /// <param name="another"></param>
        /// <returns>交叉が行えなかったらfalse</returns>
        public bool CrossOver(RootNode another, Random rand)
        {
            another = another.CloneTree();
            var target    = GetRandomChildWithoutConstant(rand, false);
            var type      = target.NodeType & SynthTree.NodeType.Mask;
            var candidate = another.ToBreadthFirstList()
                            .Where(x => (type & x.NodeType) == type).ToArray();

            if (!candidate.Any())
            {
                return(false);
            }
            var t2  = candidate[rand.Next(candidate.Length)];
            var t2p = t2.Parent;

            target.Parent.ChangeChild(target, t2);
            t2p.ChangeChild(t2, target);
            SetIndex();
            return(true);
        }
Example #3
0
 IEnumerable <Tree.Constant> GetActiveConstants(Tree.RootNode tree)
 {
     return(tree.ToBreadthFirstList().OfType <Tree.Constant>().Where(x => x.Parent.IsUsed()));
 }