Projet TER : Urbanisme
Compilation Travis | Licence |
---|---|
Organisation du travail et du développement
I. Etudes préliminaires :
- [x] Réflexions sur les applications et enjeux du problème
- [x] Recherche de travaux similaires
- [x] Réflexion sur les langages, outils et approches du problème
II. Fonctionnalités essentielles
- [x] Utilisation d'une classe Coordonnées, et création d'une classe représentant les paramètres du problème
- [x] Représentation du terrain : des entrées et sorties et d'une matrice d'états de la surface
- [x] Fonction d'évaluation complète du nombre de parcelles exploitables d'une solution
- [x] Calcul de la distance "directe" entre deux points, Manhattant et Euclidienne, avec tests correspondants
- [x] Calcul de la distance par les routes entre deux points : pathfinding
- [x] Fonction d'évaluation complète du ratio entre les distances "directes" et les distances par les routes
III. Ajouts futurs
- [x] Affichage et interaction avec une surface : Framework Qt
- [x] Créer une fonction de voisinage sur une solution afin d'effectuer une recherche locale
- [x] Ajouter des fonctions de mise à jour des valeurs et de l'évaluation d'une solution
- [x] Générer et évaluer des solutions et créer le front Pareto, puis l'afficher
- [x] Garder les valeurs d'évaluations des solutions dominées pour pouvoir les afficher en plus du front Pareto
IV. Améliorations et optimisations possibles
- [ ] Stocker les voisinages dans un vecteur de listes (avec couples : valeur-voisin ?)
- [x] Stocker les valeurs de distance par routes entre chaque parcelle et chaque autre parcelle ? Ou entre chaque parcelles et ses suivantes ? J'utilise une matrice à 4 dimensions
- [ ] Transformer la matrice en un graphe ? pour mplémenter des algorithmes de type Dijkstra (boost-graph ?)
- [ ] Corriger les bugs
- [x] Des boutons reset et flush (revoir qui reset, ce qui est reset et sauvegardé et comment on le fait)
- [ ] Vérifier que l'évaluation est correcte
- [ ] Pourquoi ce n'est pas toujours la meilleure route qui est choisie (apparition de "patés")
V. Fonctionnalitées envisagées
- [ ] Prendre en compte la largeur des routes
- [ ] Changer la forme des cellules : hexagonales ...
- [ ] Ajouter des coefficients/couts sur les cellules et routes
- [ ] L'utilisateur demande un nombre de routes à ajouter
- [x] Pour maximiser le nombre d'utilisables
- [x] Pour augmenter l'accessibilité
- [ ] Pour améliorer les deux critères (avec une valuation des critères ? avec un alpha et un beta ?)
- [ ] Avec une planification sur le nombre de routes demandé, plutôt que des algos gloutons
- [x] Ajouter des couleurs à l'affichage d'une surface, selon les valeurs attribuées ou selon, pour répérer les "points chauds" : points qui on un rapport élevé distance "directe"/distance_Manhattan, avec la plus grande mauvaise accessibilité
- [x] Couleurs selon l'écart avec la moyenne
- [ ] Valeurs d'écart avec la moyenne en sur-impression ?
- [ ] Essayer différentes techniques : Vider la matrice au lieu de remplir (pb d'évaluation), algos génétique, ...
- [ ] Ajouter des types et contraintes de placement des parcelles
- [ ] Sauvegarde et chargement d'une solution ?
Algorithme et détailes techniques :
Algorithme
- Pour ratio entre distance directe et par les routes, faire une moyenne ? un maximum ? garder total à coté ? Moyenne pour l'instant (OK : Moyenne quadratique et ratio max possibles)
Questions :
- Dans listes (
list<Coordinates>*
) utiliser pointeurs ? si oui, comment utiliser, ou remplacer,find(begin, end, val)
?
Autres :
- Seulement 2 entrées/sorties : 3 Cas pour relier : ligne droite, ligne avec 2 coudes, Equerre (ligne avec 1 coude (ou 2n +1 ?)).
- Recherche locale : incrémentale
- On peut utiliser la distance euclidienne au lieu de la distance Manhattan.
- Distance par les routes : on passe par les routes les plus proches de la parcelle
- Pour définir exploitable, je vérifie si chaque parcelle a une route voisine et l'inverse lors des mises à jour. Définir toutes les voisins de chaque route supprimée ou ajoutée comme étant exploitable.
- S'est posée la question de comment trouver les routes à X parcelles de distance d'une parcelle donnée ?
- Actuellement, une recherche dans un de 2*X parcelles de coté est effectuée, on garde les routes qui sont à moins de 2 de distance.
- Faudrait-il stocker les routes voisines d'une parcelle dans un vecteur de listes de paires d'une coordonnée et d'une distance ? ou juste une coordonnée ? OK : plutôt oui
Authors and Contributors
Projet développé par @flodavid. Utilise gnuplot-cpp, développé par Jeremy Conlin (jeremit0@gmail.com)
Support or Contact
Vous pouvez me contacter à l'adresse fl.david.53@gmail.com
Urbanisme est un logiciel libre, licencié sous la GPLv3. Urbanisme is free software, licensed under the GPLv3.