Urbanisme  1.3.0
Projet visant à l'optimisation du placement de routes sur une surface. https://flodavid.github.io/Urbanisme
localsearch.h
1 #ifndef LOCALSEARCH_H
2 #define LOCALSEARCH_H
3 
4 //#include "Engine/field.h"
5 #include "Engine/parameters.h"
6 #include "fieldevaluation.h"
7 
13 {
14 private:
15 // Field* field;
16  FieldEvaluation* fieldeval;
17  const Parameters& params;
18 
19  // Données calculées
20 
21 public:
25  typedef std::list<Coordinates> Path;
26 
34  LocalSearch( Field* _field, const Parameters* _params );
35 
41  LocalSearch(const LocalSearch& other);
42 
43  ~LocalSearch();
44 
45  /* Getters */
49  unsigned get_field_width() const { return fieldeval->get_width(); }
53  unsigned get_field_height() const { return fieldeval->get_height(); }
58  FieldEvaluation& get_field() { return *fieldeval; }
63  FieldEvaluation* get_fieldEvaluation() { return fieldeval; }
64 
65  /* Setters */
66  void setField(Field* _field);
67 
68  /* Placement de routes */
69 private:
70  void vertical_roads(Coordinates& InOut1, const Coordinates &InOut2);
71  void horizontal_roads(Coordinates& InOut1, const Coordinates& InOut2);
72 
73  // Création de coudes avec les routes
74  void verticalElbows(Coordinates& InOut1, const Coordinates& InOut2);
75  void horizontalElbows(Coordinates& InOut1, const Coordinates& InOut2);
76 
82  void addPath(Path* path);
83 
89  bool tryPaveRoad(Path* path);
90 
91  /* Algorithm */
92  /* = Initialisation = */
93 
94  /* Création et améliorations d'une solution */
98  void createRoadsBetween(Coordinates &inOut1, const Coordinates &inOut2);
99 
100 public:
104  bool tryInitSolution();
105 
106  /* = Improvments = */
115  std::list<Path*>* getPaths(const Coordinates& coord1, const Coordinates& coord2);
121  float gainPath(Path* path);
128  int addRoadUsable() const;
134  float addRoadsAccess(unsigned nbToAdd);
135 };
136 
143 int oneStep(int coordinate1, int coordinate2);
144 
145 #endif // LOCALSEARCH_H
std::list< Path * > * getPaths(const Coordinates &coord1, const Coordinates &coord2)
Definition: localsearch.cpp:184
unsigned get_height() const
Definition: field.h:55
La classe permettant de stocker une surface et de calculer et mettre à jour son évaluation.
Definition: fieldevaluation.h:12
void setField(Field *_field)
Definition: localsearch.cpp:37
Représente les paramètres du problèmes.
Definition: parameters.h:6
FieldEvaluation & get_field()
Definition: localsearch.h:58
Classe représentant la surface -le terrain- et contenant les opérations que l&#39;on effectue sur celui-c...
Definition: field.h:15
unsigned get_width() const
Definition: field.h:50
std::list< Coordinates > Path
Definition: localsearch.h:25
int addRoadUsable() const
Definition: localsearch.cpp:231
float addRoadsAccess(unsigned nbToAdd)
Definition: localsearch.cpp:329
La classe chargée d&#39;effectuer des recherches locales sur les différentes solutions TODO ajouter les e...
Definition: localsearch.h:12
FieldEvaluation * get_fieldEvaluation()
Definition: localsearch.h:63
LocalSearch(Field *_field, const Parameters *_params)
Definition: localsearch.cpp:15
float gainPath(Path *path)
Definition: localsearch.cpp:289
bool tryInitSolution()
Definition: localsearch.cpp:164
Représentation et opérations simple sur des coordonnées dans un plan.
Definition: Coordinates.h:13
unsigned get_field_width() const
Definition: localsearch.h:49
unsigned get_field_height() const
Definition: localsearch.h:53