for (Neuron candidateNeuron : candidates)
{
List<NeuronStepInfo> candidateInfo = candidateNeuronsInfo.get(candidateNeuron);
DoubleList sigmas = new ArrayDoubleList();
for (int p = 0; p < pCount; ++p)
{
double sigmaP = 0;
for (int j = 0; j < outputNeuronsCount; ++j)
{
List<NeuronStepInfo> outputInfo = outputNeuronsInfo.get(getOutputNeurons().get(j));
double avE = calcAvE(outputInfo);
NeuronStepInfo stepPInfo = outputInfo.get(p);
IFunction deriviative = candidateNeuron.getActivationFunction().getDerivative();
sigmaP += Math.signum(calcCj(j, candidateNeuron)) * (stepPInfo.e - avE) *
deriviative.calc(candidateInfo.get(p).net);
}
sigmas.add(sigmaP);
}
sigmaPValues.put(candidateNeuron, sigmas);
}
}