Program Listing for File utils.h

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

#ifndef CPPHOTS_CLUSTERING_UTILS_H
#define CPPHOTS_CLUSTERING_UTILS_H

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


namespace cpphots {

class ClustererHistogramMixin : public virtual interfaces::Clusterer {

public:

    std::vector<uint32_t> getHistogram() const override;

    void reset() override;

protected:
    void updateHistogram(uint16_t k);

private:

    std::vector<uint32_t> hist;

};


class ClustererOnlineMixin : public virtual interfaces::Clusterer {

public:

    bool isOnline() const final;

    void train(const std::vector<TimeSurfaceType>& tss) override;

};


class ClustererOfflineMixin : public virtual interfaces::Clusterer {

public:

    uint16_t cluster(const TimeSurfaceType& surface) override;

    bool isOnline() const final;

    bool toggleLearning(bool enable = true) override;

protected:
    bool isLearning() const;

private:
    std::vector<TimeSurfaceType> learning_tss;
    bool learning = false;

};


using ClustererSeedingType = std::function<void(interfaces::Clusterer&, const std::vector<TimeSurfaceType>&)>;

void ClustererUniformSeeding(interfaces::Clusterer& clusterer, const std::vector<TimeSurfaceType>& time_surfaces);

void ClustererPlusPlusSeeding(interfaces::Clusterer& clusterer, const std::vector<TimeSurfaceType>& time_surfaces);

ClustererSeedingType ClustererAFKMC2Seeding(uint16_t chain);

ClustererSeedingType ClustererRandomSeeding(uint16_t width, uint16_t height);

}

#endif