/**
   * Creates Outstar architecture with specified number of neurons in output layer
   *
   * @param outputNeuronsCount number of neurons in output layer
   */
  private void createNetwork(int outputNeuronsCount) {

    // set network type
    this.setNetworkType(NeuralNetworkType.OUTSTAR);

    // init neuron settings for this type of network
    NeuronProperties neuronProperties = new NeuronProperties();
    neuronProperties.setProperty("transferFunction", TransferFunctionType.STEP);

    // create input layer
    Layer inputLayer = LayerFactory.createLayer(1, neuronProperties);
    this.addLayer(inputLayer);

    // createLayer output layer
    neuronProperties.setProperty("transferFunction", TransferFunctionType.RAMP);
    Layer outputLayer = LayerFactory.createLayer(outputNeuronsCount, neuronProperties);
    this.addLayer(outputLayer);

    // create full conectivity between input and output layer
    ConnectionFactory.fullConnect(inputLayer, outputLayer);

    // set input and output cells for this network
    NeuralNetworkFactory.setDefaultIO(this);

    // set outstar learning rule for this network
    this.setLearningRule(new OutstarLearning());
  }