learn method
Learn the training of sample. Called by train.
Implementation
@override
bool learn(List<P> samples, double targetGlobalError) {
final base = ann.allWeights;
if (_pos == null) {
_pos = [
List<double>.of(base),
for (var i = 1; i < swarmSize; ++i) gaussianGenome(base, 0.5),
];
_vel = List.generate(swarmSize, (_) => List<double>.filled(dim, 0));
_pbest = _pos!.map((p) => List<double>.of(p)).toList();
_pbestFit = _pos!.map(evaluate).toList();
for (var i = 0; i < swarmSize; ++i) {
if (_pbestFit[i] < _gbestFit) {
_gbestFit = _pbestFit[i];
_gbest = List<double>.of(_pos![i]);
}
}
}
final pos = _pos!;
final gbest = _gbest!;
for (var p = 0; p < swarmSize; ++p) {
for (var i = 0; i < dim; ++i) {
final r1 = random.nextDouble();
final r2 = random.nextDouble();
_vel[p][i] =
inertia * _vel[p][i] +
cognitive * r1 * (_pbest[p][i] - pos[p][i]) +
social * r2 * (gbest[i] - pos[p][i]);
pos[p][i] += _vel[p][i];
}
final f = evaluate(pos[p]);
if (f < _pbestFit[p]) {
_pbestFit[p] = f;
_pbest[p] = List<double>.of(pos[p]);
if (f < _gbestFit) {
_gbestFit = f;
_gbest = List<double>.of(pos[p]);
}
}
}
return finishGeneration(targetGlobalError);
}