Program Listing for File cosine.h

Return to documentation for file (include/cpphots/clustering/cosine.h)

#ifndef CPPHOTS_CLUSTERING_COSINE_H
#define CPPHOTS_CLUSTERING_COSINE_H

#include "../types.h"
#include "../interfaces/clustering.h"
#include "utils.h"


namespace cpphots {

class CosineClusterer : public interfaces::Clonable<CosineClusterer, interfaces::Clusterer>, public ClustererHistogramMixin, public ClustererOnlineMixin {

public:

    CosineClusterer();

    CosineClusterer(uint16_t clusters, TimeSurfaceScalarType homeostasis = 0.0);

    uint16_t cluster(const TimeSurfaceType& surface) override;

    // inherited methods
    uint16_t getNumClusters() const override;

    void addCentroid(const TimeSurfaceType& centroid) override;

    const std::vector<TimeSurfaceType>& getCentroids() const override;

    void clearCentroids() override;

    bool hasCentroids() const override;

    bool toggleLearning(bool enable = true) override;

    void toStream(std::ostream& out) const override;

    void fromStream(std::istream& in) override;

private:
    std::vector<TimeSurfaceType> centroids;
    std::vector<uint32_t> centroids_activations;
    uint32_t tot_centroids_activations;
    uint16_t clusters;
    bool learning = true;
    TimeSurfaceScalarType homeostasis;

};

}

#endif