/// <summary> /// Creates training data. /// Input vector contains 0/1 combination and output vector contains appropriate results of the AND, OR and XOR operation /// </summary> private VectorBundle CreateTrainingData() { VectorBundle trainingData = new VectorBundle(); trainingData.AddPair(new double[] { 0, 0 }, new double[] { 0, 0, 0 }); trainingData.AddPair(new double[] { 0, 1 }, new double[] { 0, 1, 1 }); trainingData.AddPair(new double[] { 1, 0 }, new double[] { 0, 1, 1 }); trainingData.AddPair(new double[] { 1, 1 }, new double[] { 1, 1, 0 }); return(trainingData); }
/// <summary> /// Builds the internal probabilistic cluster chain and makes the "One Takes All" group operable. /// </summary> /// <param name="readoutUnitsResultsCollection">The collection of the collections of all readout units composite results.</param> /// <param name="readoutUnitsIdealValuesCollection">The collection of the collections of all readout units ideal values.</param> /// <param name="filters">The feature filters to be used to denormalize output data.</param> /// <param name="rand">The random object to be used.</param> /// <param name="controller">The build process controller (optional).</param> public void Build(List <CompositeResult[]> readoutUnitsResultsCollection, List <double[]> readoutUnitsIdealValuesCollection, BinFeatureFilter[] filters, Random rand, TNRNetBuilder.BuildControllerDelegate controller = null ) { if (DecisionMethod != OneTakesAllDecisionMethod.ClusterChain) { throw new InvalidOperationException("Wrong call of the Build method."); } OneTakesAllClusterChainDecisionSettings decisionCfg = (OneTakesAllClusterChainDecisionSettings)_groupCfg.DecisionCfg; //Prepare the training data bundle for the cluster chain VectorBundle trainingDataBundle = new VectorBundle(readoutUnitsIdealValuesCollection.Count); for (int sampleIdx = 0; sampleIdx < readoutUnitsIdealValuesCollection.Count; sampleIdx++) { double[] inputVector = CreateInputVector(readoutUnitsResultsCollection[sampleIdx]); double[] outputVector = CreateOutputVector(readoutUnitsIdealValuesCollection[sampleIdx], filters); trainingDataBundle.AddPair(inputVector, outputVector); } //Cluster chain builder TNRNetClusterChainBuilder builder = new TNRNetClusterChainBuilder(Name, decisionCfg.ClusterChainCfg, rand, controller ); builder.ChainBuildProgressChanged += OnChainBuildProgressChanged; ProbabilisticClusterChain = builder.Build(trainingDataBundle, filters); return; }