public NetWork(int inputPopulation, int middlePopulation, int outputPopulation, double learningRate, double momentum) {
    _inputz = new InputNode[inputPopulation];
    for (int ii = 0; ii < _inputz.length; ii++) {
      _inputz[ii] = new InputNode();
    }

    _middlez = new MiddleNode[middlePopulation];
    for (int ii = 0; ii < _middlez.length; ii++) {
      _middlez[ii] = new MiddleNode(learningRate, momentum);
    }

    _outputz = new OutputNode[outputPopulation];
    for (int ii = 0; ii < _outputz.length; ii++) {
      _outputz[ii] = new OutputNode(learningRate, momentum);
    }

    _arcz = new Arc[(inputPopulation * middlePopulation) + (middlePopulation * outputPopulation)];
    for (int ii = 0; ii < _arcz.length; ii++) {
      _arcz[ii] = new Arc();
    }

    int ii = 0;
    for (int jj = 0; jj < _inputz.length; jj++) {
      for (int kk = 0; kk < _middlez.length; kk++) {
        _inputz[jj].connect(_middlez[kk], _arcz[ii++]);
      }
    }

    for (int jj = 0; jj < _middlez.length; jj++) {
      for (int kk = 0; kk < _outputz.length; kk++) {
        _middlez[jj].connect(_outputz[kk], _arcz[ii++]);
      }
    }
  }