예제 #1
0
        /// <summary>
        /// Saves the current topology in the GUI.
        /// </summary>
        private void SaveTopology(object sender, EventArgs e)
        {
            NetworkTopology topology = new NetworkTopology();

            topology.MetaData = topologyMetaData;

            List <IHiddenLayer> hiddenLayers = new List <IHiddenLayer>();

            foreach (UserControl layer in topologyDisplay.Controls)
            {
                Type layerType = layer.GetType();
                Dictionary <string, string> metaData = ((LayerView)layer).GetMetaData();
                if (layerType == typeof(InputLayerView))
                {
                    InputLayerShell inputLayer = new InputLayerShell();
                    inputLayer.MetaData = metaData;
                    topology.InputLayer = inputLayer;
                }
                else if (layerType == typeof(HiddenLayerView))
                {
                    HiddenLayerView view     = (HiddenLayerView)layer;
                    LayerView[]     rawNodes = view.GetNodes();
                    INode[]         nodes    = new INode[rawNodes.Length];
                    for (int i = 0; i < rawNodes.Length; i++)
                    {
                        NodeShell node = new NodeShell();
                        node.MetaData = rawNodes[i].GetMetaData();
                        nodes[i]      = node;
                    }
                    HiddenLayerShell hiddenLayer = new HiddenLayerShell();
                    hiddenLayer.MetaData = metaData;
                    hiddenLayer.Nodes    = nodes;
                    hiddenLayers.Add(hiddenLayer);
                }
                else if (layerType == typeof(OutputLayerView))
                {
                    OutputLayerShell outputLayer = new OutputLayerShell();
                    outputLayer.MetaData = metaData;
                    topology.OutputLayer = outputLayer;
                }
                else if (layerType == typeof(PreProcessorView))
                {
                    PreProcessorShell preProcessor = new PreProcessorShell();
                    preProcessor.MetaData = metaData;
                    topology.PreProcessor = preProcessor;
                }
                else if (layerType == typeof(PostProcessorView))
                {
                    PostProcessorShell postProcessor = new PostProcessorShell();
                    postProcessor.MetaData = metaData;
                    topology.PostProcessor = postProcessor;
                }
                topology.HiddenLayers = hiddenLayers.ToArray();
                saveTopology.ShowDialog();

                if (saveTopology.FileName.EndsWith(".nntc"))
                {
                    saveTopology.FileName.Remove(saveTopology.FileName.Length - 1);
                }
                Topology.Save(saveTopology.FileName, topology);
            }
        }
예제 #2
0
        /// <summary>
        /// Checks the current topology to see if it can be saved.
        /// </summary>
        private void UpdateSaveStatus()
        {
            if (!hasInput || !hasOutput ||
                !hasPreProcessor || !hasPostProcessor)
            {
                canSave = false;
                topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                return;
            }

            if (topologyDisplay.Controls.Count < 5)
            {
                canSave = false;
                topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                return;
            }

            HiddenLayerView current;
            HiddenLayerView prior      = null;
            List <string>   layerNames = new List <string>();

            for (int i = 2; i < topologyDisplay.Controls.Count - 2; i++)
            {
                current = (HiddenLayerView)topologyDisplay.Controls[i];

                //Check to make sure the layer has a name
                if (!current.GetMetaData().ContainsKey("layerName"))
                {
                    canSave = false;
                    topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                    return;
                }

                //Check to make sure that the name is unique
                if (layerNames.Contains(current.GetMetaData()["layerName"]))
                {
                    canSave = false;
                    topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                    return;
                }
                layerNames.Add(current.GetMetaData()["layerName"]);

                //Check that the layer has nodes added to it.
                if (current.GetNodes().Length == 0)
                {
                    canSave = false;
                    topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                    return;
                }

                int weightCount = 0;
                if (prior == null)
                {
                    weightCount =
                        ((InputLayerView)topologyDisplay.Controls[1]).GetInputCount();
                }
                else
                {
                    weightCount = prior.GetNodes().Length;
                }

                foreach (LayerView node in current.GetNodes())
                {
                    //Check to make sure that the combination weights are set
                    if (!node.GetMetaData().ContainsKey("combinationWeights"))
                    {
                        canSave = false;
                        topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                        return;
                    }

                    //Check to make sure that there are enough weights specified
                    if (weightCount >
                        node.GetMetaData()["combinationWeights"].Split(',').Length)
                    {
                        canSave = false;
                        topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                        return;
                    }
                }

                prior = current;
            }


            canSave = true;
            topologyStatus.Items["canSaveStatus"].Text = "Can Save: True";
        }