public WeightSynapse(INeuron presynapticneuron, double weight) { this.id = Guid.NewGuid(); this.presynapticneuron = presynapticneuron; this.weight = weight; type = SynapseType.WeightSynapse; }
/// <summary> /// Add a layer to the neural network. If there are no layers added this /// layer will become the input layer. This function automatically updates /// both the input and output layer references. /// </summary> /// <param name="layer">The layer to be added to the network.</param> /// <param name="type">What sort of synapse should connect this layer to the last.</param> public void AddLayer(ILayer layer, SynapseType type) { // is this the first layer? If so, mark as the input layer. if (this.layerTags.Count == 0) { this.TagLayer(BasicNetwork.TAG_INPUT, layer); this.TagLayer(BasicNetwork.TAG_OUTPUT, layer); } else { // add the layer to any previous layers ILayer outputLayer = this.GetLayer(BasicNetwork.TAG_OUTPUT); outputLayer.AddNext(layer, type); this.TagLayer(BasicNetwork.TAG_OUTPUT, layer); } }
/// <summary> /// Add a "next" layer. /// </summary> /// <param name="next">The next layer to add.</param> /// <param name="type">The synapse type to use for this layer.</param> public void AddNext(ILayer next, SynapseType type) { ISynapse synapse = null; switch (type) { case SynapseType.OneToOne: synapse = new OneToOneSynapse(this, next); break; case SynapseType.Weighted: synapse = new WeightedSynapse(this, next); break; case SynapseType.Weightless: synapse = new WeightlessSynapse(this, next); break; case SynapseType.Direct: synapse = new DirectSynapse(this, next); break; case SynapseType.NEAT: synapse = new NEATSynapse(this, next); break; default: throw new NeuralNetworkError("Unknown synapse type"); } if (synapse == null) { String str = "Unknown synapse type."; #if logging if (BasicLayer.logger.IsErrorEnabled) { BasicLayer.logger.Error(str); } #endif throw new NeuralNetworkError(str); } else { this.next.Add(synapse); } }