コード例 #1
0
ファイル: SOM.cpp プロジェクト: gaborpapp/sonotopy
SOM::uint SOM::getWinnerAndStoreOutput(const Sample &input, Output &output) {
  uint winnerId = 0;
  float distance, localDistanceMin = 0, localDistanceMax = 0;
  float modelOutput, localOutputMin = 0, localOutputMax = 0;
  Model *model;

  output.clear();
  uint modelId = 0;
  for(vector<Model*>::iterator i = models.begin(); i != models.end(); ++i) {
    model = *i;
    distance = model->getDistance(input);
    modelOutput = (float) (::sqrt(distance) / maxDistance);
    if(i == models.begin()) {
      localDistanceMin = localDistanceMax = distance;
      winnerId = modelId;
      localOutputMin = localOutputMax = modelOutput;
    }
    else if(distance < localDistanceMin) {
      localDistanceMin = distance;
      winnerId = modelId;
      localOutputMin = modelOutput;
    }
    else if(distance > localDistanceMax) {
      localDistanceMax = distance;
      localOutputMax = modelOutput;
    }
    output.push_back(modelOutput);
    modelId++;
  }

  outputMin = localOutputMin;
  outputMax = localOutputMax;
  return winnerId;
}