示例#1
0
        public void SetNewNeuralNet(RMP_Net net)
        {
            NeuralNet = net;

            NeuralNet.RemoveAllHiddenNeurons();

            foreach (var inputN in NeuralNet.InputNeurons)
            {
                inputN.Connections.Clear();
            }

            var neuronList = new List <RMP_Neuron>();

            neuronList.AddRange(net.HiddenNeurons);
            neuronList.AddRange(net.InputNeurons);
            neuronList.AddRange(net.OutputNeurons);
            neurons = neuronList.ToArray();

            const int inputHiddenMargin  = 10;
            const int hiddenOutputMargin = 30;

            neuronPositions = new Vector2[neurons.Length];

            const int inputNeuronMargin = 2;
            int       inputY            = 0;
            int       i;

            for (i = 0; i < net.HiddenNeurons.Count + net.InputNeurons.Count; i++)
            {
                neuronPositions[i].Y = inputY;
                inputY += inputNeuronMargin + Circle.Height;
            }

            const int outputNeuronMargin = 2;
            int       outputY            = 0;

            for (; i < net.HiddenNeurons.Count + net.InputNeurons.Count + net.OutputNeurons.Count; i++)
            {
                neuronPositions[i].X = Circle.Width + inputHiddenMargin + Circle.Width + hiddenOutputMargin;
                neuronPositions[i].Y = outputY;
                outputY += outputNeuronMargin + Circle.Height;;
            }

            for (i = 0; i < neuronPositions.Length; i++)
            {
                if (neuronPositions[i].X > graphWidth)
                {
                    graphWidth = neuronPositions[i].X;
                }
                if (neuronPositions[i].Y > graphHeight)
                {
                    graphHeight = neuronPositions[i].Y;
                }
            }
        }
示例#2
0
		public void SetNewNeuralNet(RMP_Net net)
		{
			NeuralNet = net;

			var neuronList = new List<RMP_Neuron>();
			neuronList.AddRange(net.HiddenNeurons);
			neuronList.AddRange(net.InputNeurons);
			neuronList.AddRange(net.OutputNeurons);
			neurons = neuronList.ToArray();

			const int neuronMargin = 15;
			const int inputHiddenMargin = 10;
			const int hiddenOutputMargin = 10;

			double radius = (net.HiddenNeurons.Count * (neuronMargin + Circle.Width) / Math.PI / 2);
			double rotationStep = Math.PI * 2 / net.HiddenNeurons.Count;
			double rotation = 0;

			neuronPositions = new Vector2[neurons.Length];

			int i;
			for (i = 0; i < net.HiddenNeurons.Count; i++)
			{																	//Margin between input neurons and hidden neurons.
				neuronPositions[i].X = (float)(Math.Cos(rotation) * radius) + Circle.Width + inputHiddenMargin + (float)radius;
				neuronPositions[i].Y = (float)(Math.Sin(rotation) * radius);

				rotation += rotationStep;
			}

			const int inputNeuronMargin = 2;
			int inputY = 0;
			for (; i < net.HiddenNeurons.Count + net.InputNeurons.Count; i++)
			{
				neuronPositions[i].Y = inputY;
				inputY += inputNeuronMargin + Circle.Height;
			}

			const int outputNeuronMargin = 2;
			int outputY = 0;
			for (; i < net.HiddenNeurons.Count + net.InputNeurons.Count + net.OutputNeurons.Count; i++)
			{
				neuronPositions[i].X = Circle.Width + inputHiddenMargin + Circle.Width + (float)radius * 2 + hiddenOutputMargin;
				neuronPositions[i].Y = outputY;
				outputY += outputNeuronMargin + Circle.Height; ;
			}

			for (i = 0; i < neuronPositions.Length; i++)
			{
				if (neuronPositions[i].X > graphWidth)
					graphWidth = neuronPositions[i].X;
				if (neuronPositions[i].Y > graphHeight)
					graphHeight = neuronPositions[i].Y;
			}
		}