Пример #1
0
        public void ConvertFromHyperstreamlineToHalfEdgeMesh()
        {
            var           r      = new Random();
            Func <double> random = r.NextDouble;
            var           m      = new NamedBoxCollection();

            //Deserialize config
            var config = NetworkDescriptor.Deserialize(new StringReader(SCRIPT));

            //Build main roads
            var builder = new NetworkBuilder();

            builder.Build(config.Major(random, m), random, m, new Vector2(0, 0), new Vector2(100, 100));
            builder.Reduce();

            //extract regions
            var regions = builder.Regions();

            //Build minor roads
            foreach (var region in regions)
            {
                builder.Build(config.Minor(random, m), random, m, region);
            }
            builder.Reduce();

            //Build graph
            Mesh <IVertexBuilder, IHalfEdgeBuilder, IFaceBuilder> mesh = new Mesh <IVertexBuilder, IHalfEdgeBuilder, IFaceBuilder>();

            //Extract vertices
            var result = builder.Result;
            Dictionary <Vector2, Vertex> vertices = result.Vertices.ToDictionary(v => v.Position, v => v);

            //Useful data
            var road = 3; //HierarchicalParameters.RoadLaneWidth(Random);
            var path = 1; //HierarchicalParameters.RoadSidewalkWidth(Random);

            //Create blocks
            var blocks = builder.Regions();

            foreach (var block in blocks)
            {
                var face = mesh.GetOrConstructFace(block.Vertices.Select(mesh.GetOrConstructVertex).ToArray());

                //Tags edges of face with road width
                foreach (var primaryEdge in face.Edges.Select(e => e.IsPrimaryEdge ? e : e.Pair))
                {
                    if (primaryEdge.Tag != null)
                    {
                        continue;
                    }

                    var start = vertices[primaryEdge.Pair.EndVertex.Position];
                    var end   = vertices[primaryEdge.EndVertex.Position];
                    var edge  = start.Edges.FirstOrDefault(a => Equals(a.B, end));

                    primaryEdge.Tag = new HalfEdgeRoadBuilder(primaryEdge, road, path, edge == null ? 1u : edge.Streamline.Width);
                }
            }
        }
Пример #2
0
        public void NetworkBuilder_GeneratesMinorRoads()
        {
            var c = NetworkDescriptor.Deserialize(new StringReader(@"
!Network
Aliases:
    - &base-field !AddTensors
      Tensors:
        - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 0 }, Decay: 2.5, Center: { X: 0, Y: 0 } }
        - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 45 }, Decay: 2.5, Center: { X: 1, Y: 0 } }
        - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 45 }, Decay: 2.5, Center: { X: 0, Y: 1 } }
        - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 0 }, Decay: 2.5, Center: { X: 1, Y: 1 } }

Major:
    MergeSearchAngle: 22.5
    MergeDistance: 25
    SegmentLength: 10
    RoadWidth: !NormalValue { Min: 2, Max: 4, Vary: true }
    PriorityField: !ConstantScalars { Value: 1 }
    SeparationField: !ConstantScalars { Value: 50 }
    TensorField: *base-field

Minor:
    MergeSearchAngle: 12.5
    MergeDistance: 2.5
    SegmentLength: 2
    RoadWidth: !NormalValue { Min: 1, Max: 2, Vary: true }
    PriorityField: !ConstantScalars { Value: 1 }
    SeparationField: !ConstantScalars { Value: 25 }
    TensorField:
        !WeightedAverage
        Tensors:
            0.1: *base-field
            0.9: !Grid { Angle: !UniformValue { Min: 1, Max: 360, Vary: true } }
"));

            Random         r = new Random(12);
            NetworkBuilder b = new NetworkBuilder();
            var            m = new NamedBoxCollection();

            b.Build(c.Major(r.NextDouble, m), r.NextDouble, m, new Vector2(0, 0), new Vector2(100, 100));
            b.Reduce();

            var regions = b.Regions();

            foreach (var region in regions)
            {
                b.Build(c.Minor(r.NextDouble, m), r.NextDouble, m, region);
            }

            Console.WriteLine(b.Result.ToSvg());

            Assert.IsFalse(b.Result.Vertices.GroupBy(a => a.Position).Any(a => a.Count() > 1));
        }
Пример #3
0
        public void Demo()
        {
            var c = NetworkDescriptor.Deserialize(new StringReader(@"
!Network
Aliases:
    - &base-field !AddTensors
      Tensors:
        - !PointDistanceDecayTensors { Tensors: !Radial { Center: { X: 1, Y: 1 } }, Decay: 1.6, Center: { X: 0.45, Y: 0.45 } }
        - !Polyline
          Decay: 5
          Points: [ { X: 0.3, Y: 0 }, { X: 0.1, Y: 0.33 }, { X: 0.5, Y: 0.66 }, { X: 0.2, Y: 1 } ]

Major:
    MergeSearchAngle: 22.5
    MergeDistance: 25
    SegmentLength: 10
    RoadWidth: !NormalValue { Min: 2, Max: 3, Vary: false }
    PriorityField: !ConstantScalars { Value: 1 }
    SeparationField: !ConstantScalars { Value: 50 }
    TensorField: *base-field

Minor:
    MergeSearchAngle: 12.5
    MergeDistance: 2.5
    SegmentLength: 2
    RoadWidth: 1
    PriorityField: !ConstantScalars { Value: 1 }
    SeparationField: !ConstantScalars { Value: 15 }
    TensorField:
        !WeightedAverage
        Tensors:
            0.9: *base-field
            0.1: !Grid { Angle: !UniformValue { Min: 1, Max: 360, Vary: true } }

"));

            NetworkBuilder b = new NetworkBuilder();

            Random r = new Random(24);
            var    m = new NamedBoxCollection();

            b.Build(c.Major(r.NextDouble, m), r.NextDouble, m, new Vector2(0, 0), new Vector2(350, 350));
            b.Reduce();

            var regions = b.Regions();

            foreach (var region in regions)
            {
                b.Build(c.Minor(r.NextDouble, m), r.NextDouble, m, region);
            }

            Console.WriteLine(b.Result.ToSvg(regions));
        }
Пример #4
0
        public Task <TrainingResult> Train(bool liveTracking)
        {
            return(Task.Run(() =>
            {
                int inputSize = NetworkSampleInput.InputSize(NumberOfVertices);
                Random random = new Random(Seed);
                Network network = NetworkBuilder.Build(new NetworkDefinition(FunctionName.ReLU, inputSize, NumberOfVertices, HiddenLayers), new He(Seed));
                Optimizer optimizer = new SGDMomentum(network, LearningRate, Momentum);
                Trainer trainer = new Trainer(optimizer, random);

                GraphPath[] trainingGraphs = GraphGenerator.Generate(random, NumberOfGraphs, NumberOfVertices).Select(Dijkstra.Find).ToArray();
                NetworkSample[] trainingData = NetworkSampleGenerator.Generate(trainingGraphs).ToArray();

                MeanSquareErrorMonitor monitor = new MeanSquareErrorMonitor();
                trainer.Monitors.Add(monitor);

                if (liveTracking)
                {
                    trainer.Monitors.Add(new TrainingMonitor(Name));
                }

                trainer.Train(trainingData, Epoches, BatchSize);

                lock (ThreadLock)
                {
                    double error = MeanSquareErrorMonitor.CalculateError(network, trainingData);
                    Console.WriteLine($"[{Name}] Seed: {Seed,12}  Momentum: {Momentum,-6}  Learning Rate: {LearningRate,-6}  MSE: {error}");
                }

                return new TrainingResult(Name, monitor.CollectedData as IEnumerable <double>, network, trainingGraphs, trainingData);
            }));
        }
Пример #5
0
        /// <summary>
        /// Use MEF to handle View/ViewModel/Model creation and binding
        /// </summary>
        /// <param name="e"></param>
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            var conventions = new RegistrationBuilder();

            conventions.ForType <KinectManager>()
            .Export <IKinectManager>()
            .SetCreationPolicy(CreationPolicy.Shared);

            conventions.ForType <KinectGreenScreenViewModel>()
            .Export <IKinectGreenScreenViewModel>()
            .SetCreationPolicy(CreationPolicy.Shared);

            conventions.ForType <KinectGreenScreenViewModel>().ImportProperty(p => p.KinectManager);

            Assembly assembly = Assembly.GetExecutingAssembly();
            var      catalog  = new AssemblyCatalog(assembly, conventions);

            _container = new CompositionContainer(catalog);
            Container.ComposeParts();

            ISourceBlock <BitmapSource> imageSource = NetworkBuilder.Build(_container.GetExportedValue <IKinectManager>());

            _container.GetExportedValue <IKinectGreenScreenViewModel>().GreenScreenImageGenerator = imageSource;
        }
Пример #6
0
        public AgentNetwork(AgentNetworkDefinition definition, ILayerInitializer initializer)
        {
            InputCoder = new AgentNetworkInputCoder(definition.ViewRadius);
            var lastLayer         = new NetworkLayerDefinition(definition.LastLayerActivationFunction, 1);
            var networkDefinition = new NetworkDefinition(InputCoder.EncodedSize, definition.Layers.Concat(new[] { lastLayer }));

            Network = NetworkBuilder.Build(networkDefinition, initializer);
        }
 public IActionResult FindAllPath([FromBody] FindAllPathQuery findAllPathQuery)
 {
     try
     {
         var nb = new NetworkBuilder(findAllPathQuery.SourceIds, findAllPathQuery.DestinationIds, findAllPathQuery.MaxLength, false);
         nb.Build();
         return(Ok(new Tuple <HashSet <Node>, HashSet <Edge> >(nb.Nodes, nb.Edges)));
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         return(BadRequest(e.Message));
     }
 }
Пример #8
0
        private static void Main(string[] args)
        {
            var logger = new ConsoleLogger();

            try
            {
                var dataFolder = GetDataFolder(args);

                if (string.IsNullOrEmpty(dataFolder))
                {
                    return;
                }

                Control.UseNativeMKL();

                var(trainX, trainY, devX, devY) = LoadData(dataFolder, logger);

                bool repeat;
                do
                {
                    var randomSeed = 13;
                    var network    = NetworkBuilder.Build(28 * 28, new LayerOptions(10, new Sigmoid()), new[]
                    {
                        new LayerOptions(30, new Sigmoid()),
                        //new LayerOptions(30, new Sigmoid()),
                        //new LayerOptions(30, new Sigmoid()),
                    }, randomSeed);

                    var trainer = new SgdTrainer(30, 10, 3.0, new QuadraticCostFunction(), logger, randomSeed);

                    var(randomTrainX, randomTrainY) = Shuffler.Shuffle(randomSeed, trainX, trainY);

                    PrintDataHistograms(trainY, devY, logger);

                    trainer.Train(network, randomTrainX, randomTrainY, 0.95);

                    DisplayTestPrecision(devX, devY, network, logger);

                    logger.Log("Press key to exit. \"r\" to repeat...");
                    var answer = Console.ReadKey();

                    repeat = answer.KeyChar == 'r';
                } while (repeat);
            }
            catch (Exception e)
            {
                logger.Log(e.Message);
            }
        }
Пример #9
0
        public void NetworkBuilder_GeneratesRegions()
        {
            var c = NetworkDescriptor.Deserialize(new StringReader(@"
!Network
Major:
    MergeSearchAngle: 22.5
    MergeDistance: 25
    SegmentLength: 10
    RoadWidth: !NormalValue { Min: 1, Max: 10, Vary: true }
    PriorityField: !ConstantScalars { Value: 1 }
    SeparationField: !ConstantScalars { Value: 50 }
    TensorField:
        !AddTensors
        Tensors:
            - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 0, Length: 1 }, Decay: 2.5, Center: { X: 0, Y: 0 } }
            - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 45, Length: 1 }, Decay: 2.5, Center: { X: 1, Y: 0 } }
            - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 45, Length: 1 }, Decay: 2.5, Center: { X: 0, Y: 1 } }
            - !PointDistanceDecayTensors { Tensors: !Grid { Angle: 0, Length: 1 }, Decay: 2.5, Center: { X: 1, Y: 1 } }

Minor:
    MergeSearchAngle: 12.5
    MergeDistance: 2.5
    SegmentLength: 2
    RoadWidth: 1
    PriorityField: !ConstantScalars { Value: 1 }
    SeparationField: !ConstantScalars { Value: 15 }
    TensorField: !Grid { Angle: 0, Length: 1 }
"));

            NetworkBuilder b = new NetworkBuilder();

            Random r = new Random(10);
            var    m = new NamedBoxCollection();

            b.Build(c.Major(r.NextDouble, m), r.NextDouble, m, new Vector2(0, 0), new Vector2(500, 500));
            b.Reduce();

            var regions = b.Regions();

            Console.WriteLine(b.Result.ToSvg(regions));
        }
Пример #10
0
 public static Network Network(FunctionName activationFunction, int inputSize, int outputSize, params int[] hiddenLayersSizes)
 {
     return(NetworkBuilder.Build(new NetworkDefinition(activationFunction, inputSize, outputSize, hiddenLayersSizes), new He(0)));
 }
Пример #11
0
 public TicTacToeValueNetwork()
 {
     Network = NetworkBuilder.Build(new NetworkDefinition(FunctionName.Sigmoidal, 9, 9, new int[] { 9, 9 }), new He(0));
 }
Пример #12
0
 public TicTacToeValueNetwork(int[] hiddenLayerSizes, FunctionName activationFunction, Random random)
 {
     Network         = NetworkBuilder.Build(new NetworkDefinition(activationFunction, 9, 3, hiddenLayerSizes), new He(0));
     InputTransform  = DefaultInputTransform;
     OutputTransform = TicTacToeLabeledStateLoader.OutputTransforms.ResultProbabilities;
 }
Пример #13
0
        protected virtual Network CreateNeuralNetwork()
        {
            Random random = new Random(Properties.Seed);

            return(NetworkBuilder.Build(new NetworkDefinition(FunctionName.Sigmoidal, Properties.NetworkInputSize, 1, Properties.NetworkLayersSize), new He(Properties.Seed)));
        }
Пример #14
0
 public TicTacToePVNetwork()
 {
     Network = NetworkBuilder.Build(new NetworkDefinition(FunctionName.ReLU, 9, 3, 72, 72, 72, 36, 36, 36, 18, 18), new He(0));
 }
Пример #15
0
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            bitmap = new Bitmap(200, 200);
            Random    random = new Random(0);
            Optimizer optimizer;
            Network   network;

            if (ActivationFunction == Function.ReLU)
            {
                //var network = NetworkBuilder.Build(Function.ReLU, 2, 3, 64, 64, 32, 32);
                //evaluator = new NetworkEvaluator(network);
                //optimizer = new SGDMomentum(evaluator, 0.001, 0.04);
                network   = NetworkBuilder.Build(new NetworkDefinition(FunctionName.ReLU, 2, 3, 72, 72, 72, 36, 36, 36, 18, 18), new He(0));
                optimizer = new SGDMomentum(network, 0.001, 0.008);
            }
            else
            {
                network   = NetworkBuilder.Build(new NetworkDefinition(FunctionName.Sigmoidal, 2, 3, 32, 8), new He(0));
                optimizer = new SGDMomentum(network, 0.1, 0.8);
            }

            var trainer    = new Trainer(optimizer, new Random(0));
            var mseMonitor = new MeanSquareErrorMonitor();

            trainer.Monitors.Add(mseMonitor);
            int width;
            int height;

            lock (bitmap)
            {
                width  = bitmap.Width;
                height = bitmap.Height;
            }

            var imagePointList = new List <double[]>();

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    imagePointList.Add(new double[] { (double)x / width, (double)y / height });
                }
            }

            trainingData = GenerateTrainingData(random);

            for (int epoch = 0; epoch < 15000; epoch++)
            {
                //if (epoch % 300 == 0)
                //{
                //    GenerateTrainingData(random);
                //}

                if (epoch % 100 == 0)
                {
                    RefreshBitmap(network, width, height, imagePointList);
                }

                trainer.Train(trainingData, 1, 1);
                Console.WriteLine(mseMonitor.CollectedData.Last());
            }
        }