Urbanisme  1.3.0
Projet visant à l'optimisation du placement de routes sur une surface. https://flodavid.github.io/Urbanisme
fieldevaluation.h
1 #ifndef FIELDEVALUATION_H
2 #define FIELDEVALUATION_H
3 
4 #include <list>
5 
6 #include "Engine/field.h"
7 #include "evaluation.h"
8 
12 class FieldEvaluation : public Field, public Evaluation
13 {
14 private:
15  const Parameters& params;
16 
17  // Données calculées
18  std::vector< std::vector< std::vector< std::vector< unsigned > > > > road_distances;
19 
20 public:
26  FieldEvaluation(Field &field, const Parameters& params);
27 
28  /* Getters */
35  inline unsigned getRoadDistance(const Coordinates& coord1, const Coordinates& coord2) const
36  {
37  if (!contains(coord1) || !contains(coord2)) {
38  return UNSIGNED_INFINITY;
39  }
40  // assert(road_distances_are_initiated);
41  return road_distances[coord1.row][coord1.col][coord2.row][coord2.col];
42  }
43 
44  /* Calculs de données */
45 private:
49  void initSizeNeighbourhood();
53  void initRoadDistance(const Coordinates& coord);
54 
55 public:
59  void initRoadDistances();
60 
64  void reset();
65 
66 private:
77  unsigned int lengthBy ( const Coordinates& testCoord, const Coordinates& dest, std::list<Coordinates>* visited, unsigned int minDist );
78 
88  unsigned int testPathBy ( const Coordinates& testCoord, const Coordinates& dest, std::list<Coordinates>* visited, unsigned int minDist );
93  unsigned calcRoadDistance (const Coordinates& coord1, const Coordinates& coord2, std::list<Coordinates> *visited, unsigned dist_max );
94 
95 
96 public:
105  unsigned parcelsRoadDistance (const Coordinates& coord1, const Coordinates& coord2 );
106 
107  /* Evaluations */
112  unsigned evaluateTotalUsable();
113 
120  float manhattanRatioBetween2Parcels ( const Coordinates& p1, const Coordinates& p2 ) const;
125  float evaluateRatio();
126 
127  /* Threads */
128 
133  float threadsEvaluateRatio() const;
134 };
135 
136 void TParcelRatios(Coordinates coord, float* ratio, const Evaluation* res);
137 /* Threads */
138 // void *TParcelRatios(void *threadid);
139 
140 #endif // FIELDEVALUATION_H
int row
Definition: Coordinates.h:24
La classe permettant de stocker une surface et de calculer et mettre à jour son évaluation.
Definition: fieldevaluation.h:12
Représente les paramètres du problèmes.
Definition: parameters.h:6
unsigned getRoadDistance(const Coordinates &coord1, const Coordinates &coord2) const
Definition: fieldevaluation.h:35
float evaluateRatio()
Definition: fieldevaluation.cpp:270
Classe représentant la surface -le terrain- et contenant les opérations que l&#39;on effectue sur celui-c...
Definition: field.h:15
void initRoadDistances()
Definition: fieldevaluation.cpp:211
unsigned parcelsRoadDistance(const Coordinates &coord1, const Coordinates &coord2)
Definition: fieldevaluation.cpp:115
int col
Definition: Coordinates.h:20
Classe chargée de travailler sur les données en entrée du problème pour trouver des solution réalisab...
Definition: evaluation.h:19
float threadsEvaluateRatio() const
bool contains(int x, int y) const
Definition: field.cpp:146
FieldEvaluation(Field &field, const Parameters &params)
Definition: fieldevaluation.cpp:5
float manhattanRatioBetween2Parcels(const Coordinates &p1, const Coordinates &p2) const
Definition: fieldevaluation.cpp:255
Représentation et opérations simple sur des coordonnées dans un plan.
Definition: Coordinates.h:13
unsigned evaluateTotalUsable()
Definition: fieldevaluation.cpp:230