/// <summary> /// Overridden.Loads the BAM system data from a binary stream. /// </summary> /// <param name="binaryReader">Binary stream reader.</param> public override void Load(BinaryReader binaryReader) { base.Load(binaryReader); Create(inputLayerNodesCount, outputLayerNodesCount); networksCount = binaryReader.ReadInt32(); var networks = new BidirectionalAssociativeMemoryNetwork[networksCount]; for (var i = 0; i < networksCount; i++) { networks[i] = new BidirectionalAssociativeMemoryNetwork(inputLayerNodesCount, outputLayerNodesCount); networks[i].Load(binaryReader); } }
/// <summary> /// Overridden.Runs the system. /// </summary> public override void Run() { LoadInputs(); bestError = double.PositiveInfinity; for (var i = 0; i < networksCount; i++) { networks[i].SetValuesFromPattern(data); networks[i].Run(); var err = networks[i].Error; if (err <= bestError) { bestError = err; best = networks[i]; } } }
/// <summary> /// Overridden.Teaches the system. /// </summary> public override void Learn() { var isLearned = false; for (var i = 0; i < networksCount; i++) { if (isLearned) { break; } networks[i].SetValuesFromPattern(data); networks[i].Learn(); if (networks[i].Error != 0) { networks[i].UnLearn(); } else { isLearned = true; } } if (!isLearned) { var oldNetworks = networks; networks = new BidirectionalAssociativeMemoryNetwork[networksCount + 1]; if (oldNetworks != null) { oldNetworks.CopyTo(networks, 0); } networks[networksCount] = new BidirectionalAssociativeMemoryNetwork(inputLayerNodesCount, outputLayerNodesCount); networks[networksCount].SetValuesFromPattern(data); networks[networksCount].Learn(); networksCount++; } }
/// <summary> /// Overridden.Loads the BAM system data from a binary stream. /// </summary> /// <param name="binaryReader">Binary stream reader.</param> public override void Load(BinaryReader binaryReader) { base.Load(binaryReader); Create(inputLayerNodesCount, outputLayerNodesCount); networksCount = binaryReader.ReadInt32(); var networks = new BidirectionalAssociativeMemoryNetwork[networksCount]; for (var i = 0; i < networksCount; i++) { networks[i] = new BidirectionalAssociativeMemoryNetwork(inputLayerNodesCount, outputLayerNodesCount); networks[i].Load(binaryReader); } }
/// <summary> /// Overridden.Teaches the system. /// </summary> public override void Learn() { var isLearned = false; for (var i = 0; i < networksCount; i++) { if (isLearned) break; networks[i].SetValuesFromPattern(data); networks[i].Learn(); if (networks[i].Error != 0) networks[i].UnLearn(); else isLearned = true; } if (!isLearned) { var oldNetworks = networks; networks = new BidirectionalAssociativeMemoryNetwork[networksCount + 1]; if (oldNetworks != null) oldNetworks.CopyTo(networks, 0); networks[networksCount] = new BidirectionalAssociativeMemoryNetwork(inputLayerNodesCount, outputLayerNodesCount); networks[networksCount].SetValuesFromPattern(data); networks[networksCount].Learn(); networksCount++; } }
/// <summary> /// Overridden.Runs the system. /// </summary> public override void Run() { LoadInputs(); bestError = double.PositiveInfinity; for (var i = 0; i < networksCount; i++) { networks[i].SetValuesFromPattern(data); networks[i].Run(); var err = networks[i].Error; if (err <= bestError) { bestError = err; best = networks[i]; } } }