コード例 #1
0
ファイル: MainForm_Ops.cs プロジェクト: GoodAI/BrainSimulator
        private void CreateNewProject()
        {
            var oldProject = Project;

            Project = new MyProject();
            Project.Network = Project.CreateNode<MyNetwork>();
            Project.Network.Name = "Network";

            worldList.SelectedIndex = -1;
            worldList.SelectedItem = MyConfiguration.KnownWorlds.Values.First();

            Text = TITLE_TEXT + " - New Project";

            exportStateButton.Enabled = false;
            clearDataButton.Enabled = false;

            Project.Restore();
            RestoreDashboardForm();

            UndoManager.Clear();
            SaveState(GetSerializedProject(), Project.FileName, "New project");
            RefreshUndoRedoButtons();

            ApplyProjectOptions();  // Apply default project options such as save on stop to UI.

            saveFileDialog.FileName = string.Empty;
        }
コード例 #2
0
        public void BothDashboardsSerialize()
        {
            var project = new MyProject();

            project.CreateWorld(typeof(MyTestingWorld));
            project.Network = new MyNetwork();
            var node = project.CreateNode <Node>();

            node.Name = "Foo";
            project.Network.AddChild(node);

            var dashboard = new Dashboard();

            foreach (PropertySetup propertySetup in GetPropertyExamples(project))
            {
                dashboard.Add(propertySetup.Target, propertySetup.PropertyName);
            }

            var groupDashboard = new GroupDashboard();

            groupDashboard.Properties.Add(new DashboardPropertyGroup("Group 1"));
            groupDashboard.Properties[0].Add(dashboard.Properties[0]);

            YAXSerializer serializer               = MyProject.GetSerializer <Dashboard>();
            YAXSerializer groupSerializer          = MyProject.GetSerializer <GroupDashboard>();
            string        serializedDashboard      = serializer.Serialize(dashboard);
            string        serializedGroupDashboard = groupSerializer.Serialize(groupDashboard);

            Dashboard deserializedDashboard = (Dashboard)serializer.Deserialize(serializedDashboard);

            deserializedDashboard.RestoreFromIds(project);
            project.Dashboard = deserializedDashboard;

            GroupDashboard deserializedGroupDashboard =
                (GroupDashboard)groupSerializer.Deserialize(serializedGroupDashboard);

            deserializedGroupDashboard.RestoreFromIds(project);
            project.GroupedDashboard = deserializedGroupDashboard;

            var compareLogic = new CompareLogic(new ComparisonConfig
            {
                MaxDifferences  = 20,
                MembersToIgnore = new List <string> {
                    "Proxy", "GenericProxy"
                }
            });

            ComparisonResult result = compareLogic.Compare(dashboard, deserializedDashboard);

            m_output.WriteLine(result.DifferencesString);

            Assert.True(result.AreEqual);

            result = compareLogic.Compare(groupDashboard, deserializedGroupDashboard);
            m_output.WriteLine(result.DifferencesString);

            Assert.True(result.AreEqual);
        }
コード例 #3
0
        public void SerializesAndDeserializesCorrectly()
        {
            // I.e. deserialized(serialized(PROJECT)) should equal PROJECT
            string tmpPath = Path.GetTempPath();

            MyConfiguration.SetupModuleSearchPath();

            MyConfiguration.LoadModules();

            MyConfiguration.KnownNodes.Add(typeof(TestNode), new MyNodeConfig());

            var project = new MyProject();

            project.Network      = project.CreateNode <MyNetwork>();
            project.Network.Name = "Network";
            project.CreateWorld(typeof(MyTestingWorld));
            project.Name = "test";
            var node = project.CreateNode <TestNode>();

            project.Network.AddChild(node);
            project.Restore();

            string    serialized          = project.Serialize(tmpPath);
            MyProject deserializedProject = MyProject.Deserialize(serialized, tmpPath);

            // MaxDifferences = 20 - A magic number. It shows more than one difference in the log.
            // There should eventually be zero differences, so this number can be arbitrary. Adjust as needed.
            // Observers are ignored - there are none, and the (de)serialization mechanism works with them in a special way.
            var compareLogic =
                new CompareLogic(new ComparisonConfig
            {
                MaxDifferences  = 20,
                MembersToIgnore = new List <string> {
                    "Observers"
                }
            });
            ComparisonResult result = compareLogic.Compare(project, deserializedProject);

            m_output.WriteLine(result.DifferencesString);

            Assert.True(result.AreEqual);
        }
コード例 #4
0
        private static TestNode GetTestingNode()
        {
            var project = new MyProject {SimulationHandler = TypeMap.GetInstance<MySimulationHandler>()};
            project.SimulationHandler.Simulation.IsStepFinished = true;
            var node = project.CreateNode<TestNode>();

            node.UpdateMemoryBlocks();

            MyMemoryManager.Instance.AllocateBlocks(node, false);
            return node;
        }
コード例 #5
0
        public void SimulationRunsViaRunner()
        {
            using (var runner = new MyProjectRunner())
            {
                MyProject project = runner.CreateProject(typeof(MyTestingWorld));

                var node = project.CreateNode <MyCSharpNode>();
                project.Network.AddChild(node);

                runner.RunAndPause(1);
            }
        }
コード例 #6
0
        public void SimulationStateChangedOnNodesTest()
        {
            var simulation = TypeMap.GetInstance <MySimulation>();
            var handler    = new MySimulationHandler(simulation);

            MyProject project = new MyProject
            {
                Network = new MyNetwork()
            };

            project.CreateWorld(typeof(MyTestingWorld));

            var node = project.CreateNode <TestingNode>();

            node.Event = new AutoResetEvent(false);
            project.Network.AddChild(node);
            var connection = new MyConnection(project.Network.GroupInputNodes[0], project.Network.Children[0]);

            connection.Connect();

            project.Network.PrepareConnections();

            handler.Project = project;
            handler.UpdateMemoryModel();

            handler.StartSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.STOPPED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING, node.CurrentState);

            handler.PauseSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.CurrentState);

            handler.StartSimulation(stepCount: 1u);
            node.Event.WaitOne();   // Here the sim goes from paused to RUNNING_STEP.
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING_STEP, node.CurrentState);
            node.Event.WaitOne();   // Here it goes to PAUSED.
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING_STEP, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.CurrentState);

            handler.StopSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.STOPPED, node.CurrentState);

            handler.Finish();
        }
コード例 #7
0
        //internal Uri ProjectLocation { get; private set; }

        private void CreateNewProject()
        {
            Project              = new MyProject();
            Project.Network      = Project.CreateNode <MyNetwork>();
            Project.Network.Name = "Network";

            worldList.SelectedIndex = -1;
            worldList.SelectedItem  = MyConfiguration.KnownWorlds.Values.First();

            Text = TITLE_TEXT + " - New Project";

            exportStateButton.Enabled = false;
            clearDataButton.Enabled   = false;
        }
コード例 #8
0
        private static TestNode GetTestingNode()
        {
            var project = new MyProject {
                SimulationHandler = TypeMap.GetInstance <MySimulationHandler>()
            };

            project.SimulationHandler.Simulation.IsStepFinished = true;
            var node = project.CreateNode <TestNode>();

            node.UpdateMemoryBlocks();

            MyMemoryManager.Instance.AllocateBlocks(node, false);
            return(node);
        }
コード例 #9
0
        public void SimulationStateChangedOnNodesTest()
        {
            var simulation = new MyLocalSimulation();
            var handler = new MySimulationHandler(simulation);

            MyProject project = new MyProject
            {
                Network = new MyNetwork()
            };
            project.CreateWorld(typeof(MyTestingWorld));

            var node = project.CreateNode<TestingNode>();
            node.Event = new AutoResetEvent(false);
            project.Network.AddChild(node);
            var connection = new MyConnection(project.Network.GroupInputNodes[0], project.Network.Children[0]);
            connection.Connect();

            project.Network.PrepareConnections();

            handler.Project = project;
            handler.UpdateMemoryModel();

            handler.StartSimulation(oneStepOnly: false);
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.STOPPED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING, node.CurrentState);

            handler.PauseSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.CurrentState);

            handler.StartSimulation(oneStepOnly: true);
            node.Event.WaitOne();   // Here the sim goes from paused to RUNNING_STEP.
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING_STEP, node.CurrentState);
            node.Event.WaitOne();   // Here it goes to PAUSED.
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING_STEP, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.CurrentState);

            handler.StopSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.STOPPED, node.CurrentState);

            handler.Finish();
        }
コード例 #10
0
        public void CreatesAndRunsMNIST()
        {
            using (var runner = new MyProjectRunner())
            {
                MyProject project = runner.CreateProject(typeof(MNISTWorld));

                var world = project.World as MNISTWorld;

                var neuralGroup = project.CreateNode <MyNeuralNetworkGroup>();
                project.Network.AddChild(neuralGroup);

                var hiddenLayer = project.CreateNode <MyHiddenLayer>();
                neuralGroup.AddChild(hiddenLayer);

                var outputLayer = project.CreateNode <MyOutputLayer>();
                neuralGroup.AddChild(outputLayer);

                var accumulator = project.CreateNode <MyAccumulator>();
                neuralGroup.AddChild(accumulator);

                // Connect the nodes.

                project.Connect(project.Network.GroupInputNodes[0], neuralGroup, 0, 0);
                project.Connect(project.Network.GroupInputNodes[1], neuralGroup, 0, 1);

                project.Connect(neuralGroup.GroupInputNodes[0], hiddenLayer, 0, 0);

                project.Connect(neuralGroup.GroupInputNodes[1], outputLayer, 0, 1);

                project.Connect(hiddenLayer, outputLayer, 0, 0);

                project.Connect(outputLayer, accumulator, 1, 0);

                // Setup the nodes.

                var sendMnistData = world.SendMNISTTrainData;
                Assert.NotNull(sendMnistData);
                sendMnistData.ExpositionTime = 1;

                world.BitmapOrder = ExampleOrderOption.Shuffle;
                world.OneHot      = true;

                hiddenLayer.Neurons = 40;

                accumulator.ApproachValue.ApproachMethod = MyAccumulator.MyApproachValueTask.SequenceType.Momentum;
                accumulator.ApproachValue.Delta          = 0.1f;
                accumulator.ApproachValue.Target         = 0;
                accumulator.ApproachValue.Factor         = 0.9f;

                // Enable tasks.
                project.World.EnableDefaultTasks();

                neuralGroup.EnableDefaultTasks();
                neuralGroup.RMS.Enabled = true;

                hiddenLayer.EnableDefaultTasks();

                outputLayer.EnableDefaultTasks();

                accumulator.EnableDefaultTasks();
                accumulator.ApproachValue.Enabled = true;

                // Run the simulation.

                runner.RunAndPause(100);

                float error = runner.GetValues(accumulator.Id)[0];
                Assert.True(error < 0.5f);
                //runner.SaveProject(@"c:\foobar.brain");
            }
        }
コード例 #11
0
ファイル: MainForm_Ops.cs プロジェクト: Jlaird/BrainSimulator
        //internal Uri ProjectLocation { get; private set; }
        private void CreateNewProject()
        {
            Project = new MyProject();
            Project.Network = Project.CreateNode<MyNetwork>();
            Project.Network.Name = "Network";

            worldList.SelectedIndex = -1;
            worldList.SelectedItem = MyConfiguration.KnownWorlds.Values.First();

            Text = TITLE_TEXT + " - New Project";

            exportStateButton.Enabled = false;
            clearDataButton.Enabled = false;
        }
コード例 #12
0
        public void CreatesAndRunsMNIST()
        {
            using (var runner = new MyProjectRunner())
            {
                MyProject project = runner.CreateProject(typeof(MyMNISTWorld));

                MyWorld world = project.World;

                var neuralGroup = project.CreateNode <MyNeuralNetworkGroup>();
                project.Network.AddChild(neuralGroup);

                var hiddenLayer = project.CreateNode <MyHiddenLayer>();
                neuralGroup.AddChild(hiddenLayer);

                var outputLayer = project.CreateNode <MyOutputLayer>();
                neuralGroup.AddChild(outputLayer);

                var accumulator = project.CreateNode <MyAccumulator>();
                neuralGroup.AddChild(accumulator);

                // Connect the nodes.

                project.Connect(project.Network.GroupInputNodes[0], neuralGroup, 0, 0);
                project.Connect(project.Network.GroupInputNodes[1], neuralGroup, 0, 1);

                project.Connect(neuralGroup.GroupInputNodes[0], hiddenLayer, 0, 0);

                project.Connect(neuralGroup.GroupInputNodes[1], outputLayer, 0, 1);

                project.Connect(hiddenLayer, outputLayer, 0, 0);

                project.Connect(outputLayer, accumulator, 1, 0);

                // Setup the nodes.

                MyTask sendMnistData = world.GetTaskByPropertyName("SendTrainingMNISTData");
                Assert.NotNull(sendMnistData);
                sendMnistData.GetType().GetProperty("RandomEnumerate").SetValue(sendMnistData, true);
                sendMnistData.GetType().GetProperty("ExpositionTime").SetValue(sendMnistData, 1);

                world.GetType().GetProperty("Binary").SetValue(world, true);

                hiddenLayer.Neurons = 40;

                accumulator.ApproachValue.ApproachMethod = MyAccumulator.MyApproachValueTask.SequenceType.Momentum;
                accumulator.ApproachValue.Delta          = 0.1f;
                accumulator.ApproachValue.Target         = 0;
                accumulator.ApproachValue.Factor         = 0.9f;

                // Enable tasks.
                project.World.EnableDefaultTasks();

                neuralGroup.EnableDefaultTasks();
                neuralGroup.RMS.Enabled = true;

                hiddenLayer.EnableDefaultTasks();

                outputLayer.EnableDefaultTasks();

                accumulator.EnableDefaultTasks();
                accumulator.ApproachValue.Enabled = true;

                // Run the simulation.

                runner.RunAndPause(100);

                float error = runner.GetValues(accumulator.Id)[0];
                Assert.True(error < 0.5f);
                //runner.SaveProject(@"c:\foobar.brain");
            }
        }