CCEX-1.0.0
Loading...
Searching...
No Matches
cluster_pcce.h
1#ifndef __CCEX_CLUSTER_PCCE_H_
2#define __CCEX_CLUSTER_PCCE_H_
3
4#include <stdio.h>
5#include <time.h>
6
7#include "bath.h"
8#include "mpi.h"
9#include "cluster.h"
10#include "general.h"
11
12typedef struct{
13 double x, y, z;
14} Point;
15
16
17typedef struct{
18 int sK;
19 int ncenter;
20 int pcce_nspin;
21 int rest_nspin;
23
24void clusterizePcce(Cluster* cls, BathArray* ba, Config* config);
25void simulator_cluster_partition(BathSpin** bath, Partition_info* pinfo, Cluster* cls, Point* best_centers, int* best_assigned_idx);
26void shrink_restspins(BathArray* ba, int rest_nspin);
27void update_global_best(int index, double *inertia, double *sil, int *trial, double *global_best_inertia, double *global_best_sil, int *global_best_trial);
28void print_pcce_info(int bath_nspin, int nqubit, int ncenter, int pcce_nspin, int rest_nspin);
29void initializeCentroids(Point* spins, Point* centers, int ncenter, int pcce_nspin) ;
30void choose_initial_method(bool kmeans_pp, Point* spins, Point* centers, int pcce_nspin, int ncenter);
31void kMeansPlusPlus(Point *spins, Point *centers, int pcce_nspin, int ncenter) ;
32void shuffle_spins(Point *array, int* shuffle_idxs, int pcce_nspin) ;
33void changeIdx_inverse_shuffle_idx(int* shuffle_idx, int* inverse_shuffle_idx, int pcce_nspin);
34void assignCentroids(int* assigned_cluster_idx, double** distances, int pcce_nspin, int ncenter) ;
35void calc_dist_to_centers(Point* spins, Point* centers, double** distances, int pcce_nspin, int ncenter) ;
36void copy_best_centers(Point* centers, Point* best_centers, int ncenter);
37void copy_best_assigned(int* assigned, int* best_assigned, int pcce_nspin);
38void copy_best_idxList(int* idxList, int* best_idxList, int pcce_nspin);
39void copy_best_spins(Point* spins, Point* best_spins, int pcce_nspin);
40void copy_bath_to_point_type(BathSpin** bath, Point* spins, int pcce_nspin);
41void print_BD(char* str, int num);
42void print_centers(int ncenter, Point* centers, int rank);
43void print_kmeans_converge_info(int trial, int iteration, int ncenter, Point** centers);
44void print_optimize_kmeans_info(int trial, int iteration, double inertia, double best_inertia, double best_sil, int rank);
45void print_assign_idx(int *assign_idx, int pcce_nspin, int rank) ;
46void print_spins(Point *spins, int pcce_nspin, int rank);
47void print_time(clock_t start, clock_t end);
48void write_centers(FILE **c_savefile, Point **centers, int ncenter);
49void write_spins(FILE **s_savefile, Point **spins, int** assigned_idx, int pcce_nspin);
50void print_best_spins(Point **spins, int** assigned_idx, int pcce_nspin);
51void print_best_centers(Point **centers, int ncenter);
52
53double silhouetteCoefficient(Point *spins, int *assignments, Point *centers, int pcce_nspin, int ncenter);
54double calculateInertia(Point *spins, Point *centers, int *assignments, int pcce_nspin, int ncenter);
55double calc_dist(double* arr1, double* arr2);
56double distance(Point p1, Point p2);
57//int compare_dist(const void *a, const void *b);
58int if_contain(int* arr, int arr_size, int value) ;
59bool updateCentroids(Point *spins, int *assignments, Point *centers, int pcce_nspin, int ncenter) ;
60
61
62void BathArray_connectivity_pcce(int*** cmap, float*** stmap, Point* centers, float rdip, float rdipcut, int pcce_nspin);
63int** Cluster_setCenterIdx_spinIdx_2dArr(int ncenter, int sK, int pcce_nspin, int* best_assigned_idx);
64void print_clusinfo_sorder_i(int*** pcceClusInfo, int sorder, int n_cInfo);
65void print_clusinfo_sorder_i_j(int*** pcceClusInfo, int sorder, int n_cinfo, int cIdx);
66int*** convert_centerIdx_to_spinIdx(Cluster* cls, int cOrder, int sK, int** cs2dArr);
67#endif // __CCEX_CLUSTER_PCCE_H_
Definition bath.h:131
BathSpin structure contains each BathSpin's information.
Definition bath.h:17
Definition cluster.h:16
Definition general.h:12
Definition cluster_pcce.h:17
Definition cluster_pcce.h:12