public static void SpeedInt32Test()
        {
            Console.WriteLine("================ Int Test ============== \n\n");
            int count = 10000;

            var Fc  = new FullConnect <int>(100, 3, 1);
            var sig = new Sigmoid <int>();
            var net = new Network <int>(OptimiserType.LevenbergMarquardt);

            net.Add(Fc);
            net.Add(sig);
            var rnd = new Random();

            var sw = new Stopwatch();

            var           tInp = new Tensor4 <int>(1, 1, 100, 1, rnd);
            Tensor4 <int> outp = new Tensor4 <int>(1, 1, 1, 1);

            sw.Start();
            for (int j = 0; j < count; j++)
            {
                outp = net.Forward(tInp);
            }

            Console.WriteLine("Прямой проход слоя составляет: " + sw.ElapsedMilliseconds / (double)count + " мс");

            sw.Stop();

            Console.WriteLine("\n\n");

            for (int i = 0; i < outp.D; i++)
            {
                Console.WriteLine(outp[0, 0, i, 0]);
            }
        }
예제 #2
0
        /// <summary>
        /// Reconnectes the Network, remembering the connections
        /// between neurons, making FeedNeuralNetwork() faster.
        /// </summary>
        protected void ConnectNeuralNetwork()
        {
            if (Network == null)
            {
                Network = new Dictionary <Neuron, IList <Synapse> >();
            }
            else
            {
                Network.Clear();
            }

            foreach (var gene in Genes)
            {
                if (!Network.ContainsKey(Neurons[gene.Val.transmitter]))
                {
                    Network.Add(Neurons[gene.Val.transmitter],
                                new List <Synapse>(1));
                }
                if (!Network.ContainsKey(Neurons[gene.Val.receiver]))
                {
                    Network.Add(Neurons[gene.Val.receiver],
                                new List <Synapse>(1));
                }

                Network[Neurons[gene.Val.transmitter]].Add(gene.Val);
                Network[Neurons[gene.Val.receiver]].Add(gene.Val);
            }
        }
        static void Main(string[] args)
        {
            Network network = new Network();
            Layer layer2 = new Layer();
            Layer layer3 = new Layer();
            Node node1 = new Node(2);
            Node node2 = new Node(2);
            Node node3 = new Node(2);

            layer2.Add(node1);
            layer2.Add(node2);
            layer3.Add(node3);

            network.Add(layer2);
            network.Add(layer3);

            Dictionary<Signal, Signal> trainingSet = new Dictionary<Signal, Signal>();
            Signal signalFF = new Signal();
            Signal signalFT = new Signal();
            Signal signalTF = new Signal();
            Signal signalTT = new Signal();
            Signal signalF = new Signal();
            Signal signalT = new Signal();

            signalFF.Add(0.0); signalFF.Add(0.0);
            signalFT.Add(0.0); signalFT.Add(1.0);
            signalTF.Add(1.0); signalTF.Add(0.0);
            signalTT.Add(1.0); signalTT.Add(1.0);

            signalF.Add(0.0);
            signalT.Add(1.0);

            trainingSet.Add(signalFF, signalF);
            trainingSet.Add(signalFT, signalT);
            trainingSet.Add(signalTF, signalT);
            trainingSet.Add(signalTT, signalF);

            network.Train(trainingSet);

            Console.WriteLine("OutputFF: " + signalFF * network);
            Console.WriteLine("OutputFT: " + signalFT * network);
            Console.WriteLine("OutputTF: " + signalTF * network);
            Console.WriteLine("OutputTT: " + signalTT * network);

            Console.ReadLine();
        }
예제 #4
0
    static void Main(string[] args)
    {
        NetworkElement tunnelNetwork = new Network();

        tunnelNetwork.Add(new Tunnel(5));
        tunnelNetwork.Add(new Railroad(5));

        NetworkElement stationNetwork = new Network();

        stationNetwork.Add(new Station());
        stationNetwork.Add(new Railroad(10));

        NetworkElement bigNetwork = new Network();

        bigNetwork.Add(tunnelNetwork);
        bigNetwork.Add(stationNetwork);

        System.Console.WriteLine(bigNetwork.GetMaintananceCost());
    }
        public FakeNetworksService()
        {
            networks = new List <Network>();

            Network network = new Network(1, "Network 1", 10);

            SubStation substation1 = new SubStation(2, "Substation A");

            Device switch1 = new Switch(3, "Switch A");

            Line line1 = new Line(4, "Line A", 100);

            line1.Terminal1 = substation1;
            line1.Terminal2 = switch1;

            substation1.Terminal = line1;
            switch1.Terminal1    = line1;

            SubStation subStation2 = new SubStation(10, "Substation B");

            subStation2.Terminal = line1;

            switch1.Terminal2 = subStation2;


            Load load1 = new Load(5, "Load 1");

            line1.Connect(load1);

            Load load2 = new Load(7, "Load 2");

            line1.Connect(load2);

            network.Add(substation1);
            network.Add(subStation2);
            network.Add(switch1);
            network.Add(line1);

            networks.Add(network);
        }
예제 #6
0
 private void Add()
 {
     using (LayerDialog dialog = new LayerDialog()
     {
         Layer = (Layer)TemplateLayer.Clone()
     })
     {
         if (dialog.ShowDialog(this) == DialogResult.OK)
         {
             Network.Add(dialog.Layer);
             UpdateItems();
         }
     }
 }
예제 #7
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object can be used to retrieve data from input parameters and
        /// to store data in output parameters.</param>
        protected override void SolveInstance(IGH_DataAccess DA)

        {
            string path    = "";
            int    size    = 0;
            bool   debug   = false;
            int    maxNgon = 3;
            double tol     = -1;

            if (!DA.GetData(0, ref path))
            {
                return;
            }
            if (!DA.GetData(1, ref size))
            {
                return;
            }
            DA.GetData(2, ref maxNgon);
            DA.GetData(3, ref tol);

            IplImage img    = new IplImage(path, LoadMode.Color);
            IplImage imgHSV = new IplImage(img.Size, BitDepth.U8, 3);

            Cv.CvtColor(img, imgHSV, ColorConversion.RgbToHsv);

            var      channels = imgHSV.Split();
            IplImage hue      = channels[0];



            IplImage Render = new IplImage(img.Size, BitDepth.U8, 3);

            //色抽出マスク用画像宣言
            IplImage imgB1 = new IplImage(img.Size, BitDepth.U8, 1);
            IplImage imgB2 = new IplImage(img.Size, BitDepth.U8, 1);
            IplImage imgR  = new IplImage(img.Size, BitDepth.U8, 1);
            IplImage imgG  = new IplImage(img.Size, BitDepth.U8, 1);
            IplImage imgB  = new IplImage(img.Size, BitDepth.U8, 1);

            int RG  = 30;
            int GB  = 90;
            int BR  = 150;
            int off = 1;

            int smin = 30;
            int bmin = 30;

            //色抽出用閾値作成
            CvScalar Bmin1 = new CvScalar(0, smin, bmin);
            CvScalar Bmax1 = new CvScalar(RG - off, 255, 255);

            CvScalar Bmin2 = new CvScalar(BR + off, smin, bmin);
            CvScalar Bmax2 = new CvScalar(180, 255, 255);

            CvScalar Gmin = new CvScalar(RG + off, smin, bmin);
            CvScalar Gmax = new CvScalar(GB - off, 255, 255);

            CvScalar Rmin = new CvScalar(GB + off, smin, bmin);
            CvScalar Rmax = new CvScalar(BR - off, 255, 255);

            //閾値を用いて色抽出
            Cv.InRangeS(imgHSV, Bmin1, Bmax1, imgB1);
            Cv.InRangeS(imgHSV, Bmin2, Bmax2, imgB2);
            Cv.Add(imgB1, imgB2, imgB);
            Cv.InRangeS(imgHSV, Gmin, Gmax, imgG);
            Cv.InRangeS(imgHSV, Rmin, Rmax, imgR);


            //Blobs化
            CvBlobs Rs = new CvBlobs(imgR);
            CvBlobs Gs = new CvBlobs(imgG);
            CvBlobs Bs = new CvBlobs(imgB);

            int minArea = img.Width * img.Height / 20000;
            int maxArea = img.Width * img.Height;

            Bs.FilterByArea(minArea, maxArea);
            Rs.FilterByArea(minArea, maxArea);
            Gs.FilterByArea(minArea, maxArea);


            //blobの配列化
            CvBlob[] Rblobs = new CvBlob[Rs.Count];
            CvBlob[] Bblobs = new CvBlob[Bs.Count];
            CvBlob[] Gblobs = new CvBlob[Gs.Count];
            Rs.Values.CopyTo(Rblobs, 0);
            Bs.Values.CopyTo(Bblobs, 0);
            Gs.Values.CopyTo(Gblobs, 0);


            if (!debug)
            {
                string deb = "";

                foreach (var bbbb in Rblobs)
                {
                    deb += bbbb.Area + "\r\n";
                }

                //BlobからLine化
                List <Line> Rlines = ExtractLinesFromBlobs(Rblobs);
                List <Line> Blines = ExtractLinesFromBlobs(Bblobs);
                List <Line> Glines = ExtractLinesFromBlobs(Gblobs);

                //scale
                double MinSize     = Math.Min(img.Width, img.Height);
                double ScaleFactor = (double)size / MinSize;
                var    scale       = Transform.Scale(new Point3d(0, 0, 0), ScaleFactor);

                Network network = new Network();

                //ネットワークにLineを色ごとにラベル付きで入れる
                foreach (var l in Rlines)
                {
                    l.Transform(scale);
                    network.Add(l, 0);
                }
                foreach (var l in Blines)
                {
                    l.Transform(scale);
                    network.Add(l, 1);
                }
                foreach (var l in Glines)
                {
                    l.Transform(scale);
                    network.Add(l, 2);
                }



                double t = network.SearchWeldToleranceBinary(0, (double)size / 10, 0, 10);
                if (tol != -1)
                {
                    network.weld(tol * size);
                }
                else
                {
                    network.weld(t);
                }

                deb += "tolerance: " + t + "\r\n\r\n";



                //ウェルド後のエッジ抽出
                Rlines = network.ExtractLines(0);
                Blines = network.ExtractLines(1);
                Glines = network.ExtractLines(2);

                List <List <int> > faces = network.detectCycles(maxNgon);


                deb += "B: " + Bs.Count.ToString() + "\r\n";
                deb += "R: " + Rs.Count.ToString() + "\r\n";
                deb += "G: " + Gs.Count.ToString() + "\r\n";


                Mesh mesh = GenerateMesh(network.verts, faces);
                mesh.Normals.ComputeNormals();

                DA.SetDataList(0, network.verts);
                DA.SetDataList(1, Rlines);
                DA.SetDataList(2, Blines);
                DA.SetDataList(3, Glines);
                DA.SetData(4, mesh);
            }
            else
            {
                //赤レンダリング
                Rs.RenderBlobs(img, Render, RenderBlobsMode.Angle);
                Rs.RenderBlobs(img, Render, RenderBlobsMode.BoundingBox);
                Rs.RenderBlobs(img, Render, RenderBlobsMode.Centroid);

                //青レンダリング
                Bs.RenderBlobs(img, Render, RenderBlobsMode.Angle);
                Bs.RenderBlobs(img, Render, RenderBlobsMode.BoundingBox);
                Bs.RenderBlobs(img, Render, RenderBlobsMode.Centroid);

                //黒レンダリング
                Gs.RenderBlobs(img, Render, RenderBlobsMode.Angle);
                Gs.RenderBlobs(img, Render, RenderBlobsMode.BoundingBox);
                Gs.RenderBlobs(img, Render, RenderBlobsMode.Centroid);

                Cv.NamedWindow("test");
                IplImage Render2 = new IplImage(img.Size.Width / 4, img.Size.Height / 4, BitDepth.U8, 3);

                string deb = "";
                deb += "B: " + Bs.Count.ToString() + "\r\n";
                deb += "R: " + Rs.Count.ToString() + "\r\n";
                deb += "G: " + Gs.Count.ToString() + "\r\n";

                Cv.Resize(Render, Render2);
                Cv.ShowImage("test", Render2);

                Cv.WaitKey();

                Cv.DestroyWindow("test");
            }

            Cv.ReleaseImage(img);
            Cv.ReleaseImage(imgHSV);
        }