|
|
|
@ -3,62 +3,84 @@ |
|
|
|
#include <stdexcept> |
|
|
|
|
|
|
|
double distance(math::csignal v1, math::csignal v2, int n){ |
|
|
|
if (v1.size() != v2.size()) { |
|
|
|
throw std::runtime_error("les deux vecteurs doivent être de même longueur"); |
|
|
|
} |
|
|
|
int m = v1.size(); |
|
|
|
double d; |
|
|
|
double di; |
|
|
|
for (int i=0; i<m; ++m){ |
|
|
|
di = std::abs(v1[i] - v2[i]); |
|
|
|
di = std::pow(di, n); |
|
|
|
d = d + di; |
|
|
|
}; |
|
|
|
return std::pow(d, 1/n); |
|
|
|
if (v1.size() != v2.size()) { |
|
|
|
throw std::runtime_error("les deux vecteurs doivent être de même longueur"); |
|
|
|
} |
|
|
|
int m = v1.size(); |
|
|
|
double d; |
|
|
|
double di; |
|
|
|
for (int i=0; i<m; ++m){ |
|
|
|
di = std::abs(v1[i] - v2[i]); |
|
|
|
di = std::pow(di, n); |
|
|
|
d = d + di; |
|
|
|
}; |
|
|
|
return std::pow(d, 1/n); |
|
|
|
}; |
|
|
|
|
|
|
|
int argmax(vector<int> v){ |
|
|
|
int arg = 0; |
|
|
|
int max = v[0]; |
|
|
|
int n = v.size(); |
|
|
|
for(int i = 1; i < n ; ++i){ |
|
|
|
if (v[i]>max){ |
|
|
|
arg = i; |
|
|
|
max = v[i]; |
|
|
|
}; |
|
|
|
}; |
|
|
|
return arg |
|
|
|
}; |
|
|
|
|
|
|
|
int main(math::csignal new_vect, map< math::csignal, std::string > dico, int k){ |
|
|
|
std::vector< std::pair<double , math::csignal> > k_min; |
|
|
|
std::vector<std::pair<double, math::csignal>> k_min; |
|
|
|
std::map<math::csignal, std::string> dico; |
|
|
|
double d; |
|
|
|
int avance = 0; |
|
|
|
int arret = 0; |
|
|
|
int droite = 0; |
|
|
|
int gauche = 0; |
|
|
|
int rejet = 0; |
|
|
|
vector<int> choix; |
|
|
|
for(auto& ref_vect : dico){ |
|
|
|
d = distance(new_vect, ref_vect.first ); |
|
|
|
if (k_min.size() < k ){ |
|
|
|
k_min.push_back({d, ref_vect.first}); |
|
|
|
sort(k_min.begin(), k_min.end()); |
|
|
|
} else if (d < k_min[k-1].first){ |
|
|
|
k_min.push_back({d, ref_vect.first}); |
|
|
|
sort(k_min.begin(), k_min.end()); |
|
|
|
k_min.pop_back(); |
|
|
|
}; |
|
|
|
|
|
|
|
} ; |
|
|
|
for(auto i = k_min.begin(); i != k_min.end(); i++) { |
|
|
|
if (dico[k_min[i].second].second == "avance"){ |
|
|
|
avance = avance + 1 |
|
|
|
} else if (dico[k_min[i].second] == "arret"){ |
|
|
|
arret = arret + 1 |
|
|
|
} else if (dico[k_min[i].second] == "droite"){ |
|
|
|
arret = droite + 1 |
|
|
|
} else if (dico[k_min[i].second] == "gauche"){ |
|
|
|
arret = gauche + 1 |
|
|
|
} else if (dico[k_min[i].second] == "rejet"){ |
|
|
|
arret = rejet + 1 |
|
|
|
} ; |
|
|
|
|
|
|
|
choix.push_back(avance); |
|
|
|
choix.push_back(arret); |
|
|
|
choix.push_back(droite); |
|
|
|
choix.push_back(gauche); |
|
|
|
choix.push_back(rejet); |
|
|
|
|
|
|
|
double d; |
|
|
|
int avance = 0; |
|
|
|
int arret = 0; |
|
|
|
int droite = 0; |
|
|
|
int gauche = 0; |
|
|
|
int rejet = 0; |
|
|
|
vector<int> vchoix; |
|
|
|
for(auto& ref_vect : dico){ |
|
|
|
d = distance(new_vect, ref_vect.first ); |
|
|
|
if (k_min.size() < k ){ |
|
|
|
k_min.push_back({d, ref_vect.first}); |
|
|
|
} else if (d < k_min[k-1].first){ |
|
|
|
k_min.push_back({d, ref_vect.first}); |
|
|
|
sort(k_min.begin(), k_min.end()); |
|
|
|
k_min.pop_back(); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
for(auto i = k_min.begin(); i != k_min.end(); i++) { |
|
|
|
if (dico[k_min[i].second].second == "avance"){ |
|
|
|
avance = avance + 1 |
|
|
|
} else if (dico[k_min[i].second].second == "arret"){ |
|
|
|
arret = arret + 1 |
|
|
|
} else if (dico[k_min[i].second].second == "droite"){ |
|
|
|
arret = droite + 1 |
|
|
|
} else if (dico[k_min[i].second].second == "gauche"){ |
|
|
|
arret = gauche + 1 |
|
|
|
} else if (dico[k_min[i].second].second == "rejet"){ |
|
|
|
arret = rejet + 1 |
|
|
|
} |
|
|
|
} |
|
|
|
vchoix.push_back(avance); |
|
|
|
vchoix.push_back(arret); |
|
|
|
vchoix.push_back(droite); |
|
|
|
vchoix.push_back(gauche); |
|
|
|
vchoix.push_back(rejet); |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
int nchoix = argmax(vchoix); |
|
|
|
string choix ; |
|
|
|
if (nchoix == 0){ |
|
|
|
choix = "avance" |
|
|
|
} else if (nchoix == 1){ |
|
|
|
choix = "arret" |
|
|
|
} else if (nchoix == 2){ |
|
|
|
choix = "droite" |
|
|
|
} else if (nchoix == 3){ |
|
|
|
choix = "gauche" |
|
|
|
} else if (nchoix == 4){ |
|
|
|
choix = "rejet" |
|
|
|
} |
|
|
|
}; |
|
|
|
|