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); } } }
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)); }
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)); }
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); })); }
/// <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; }
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)); } }
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); } }
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)); }
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))); }
public TicTacToeValueNetwork() { Network = NetworkBuilder.Build(new NetworkDefinition(FunctionName.Sigmoidal, 9, 9, new int[] { 9, 9 }), new He(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; }
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))); }
public TicTacToePVNetwork() { Network = NetworkBuilder.Build(new NetworkDefinition(FunctionName.ReLU, 9, 3, 72, 72, 72, 36, 36, 36, 18, 18), new He(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()); } }