{"id":20490357,"url":"https://github.com/hanzopgp/architectapp","last_synced_at":"2025-03-05T17:21:06.300Z","repository":{"id":105990432,"uuid":"315367167","full_name":"hanzopgp/ArchitectApp","owner":"hanzopgp","description":"Architecture app, AI-Driven decision making, implementing several algorithms (BFS, DFS , Backtrack, Constraints, Djikstra, MAC, heuristics etc...).","archived":false,"fork":false,"pushed_at":"2021-04-06T19:06:36.000Z","size":917,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-16T05:25:01.453Z","etag":null,"topics":["artificial-intelligence","astar","backtrack","bfs","constraint","dfs","dijkstra","local-consistency","solver","university"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hanzopgp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-23T16:01:06.000Z","updated_at":"2022-01-23T20:21:54.000Z","dependencies_parsed_at":"2023-07-14T21:45:18.964Z","dependency_job_id":null,"html_url":"https://github.com/hanzopgp/ArchitectApp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanzopgp%2FArchitectApp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanzopgp%2FArchitectApp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanzopgp%2FArchitectApp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanzopgp%2FArchitectApp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hanzopgp","download_url":"https://codeload.github.com/hanzopgp/ArchitectApp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242067905,"owners_count":20066787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artificial-intelligence","astar","backtrack","bfs","constraint","dfs","dijkstra","local-consistency","solver","university"],"created_at":"2024-11-15T17:16:46.801Z","updated_at":"2025-03-05T17:21:06.286Z","avatar_url":"https://github.com/hanzopgp.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Programmation par contrainte :\n\n## Table des matières\n\n1. [Presentation](#presentation-)\n2. [Utilisation](#utilisation-)\n3. [Fonctionnement](#fonctionnement-)\n4. [Autres details](#autres-details-)\n5. [Liens utiles](#liens-utiles-)\n\n## Presentation :\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"img.png\"\u003e\u003c/p\u003e\n\n\u003eApplication permettant, à partir de differents types de contraintes, de trouver un plan de maison satisfaisant les contraintes grâce au package **solvers**. Le programme trouve ensuite la suite d'action la plus optimisée à effectuer grâce au package **planning**. On forme alors une BDD de maisons satisfaisants les contraintes puis on extrait les informations interessantes grâce au package **datamining**.\u003cbr\u003e\nL3 Informatique, note : 18/20.\n\n## Utilisation :\n\n### Compiler le projet :\n   \n`javac -cp \"src/tests/dataminingtests.jar:src/tests/solvertests.jar:src/tests/planningtests.jar:src/tests/representationtests.jar\" -d build/ src/*/*.java`\n\n### Executer le project :\n    \n`java -cp build/ examples.HouseDemo`\n\n## Fonctionnement :\n\n**Ces 4 packages forment une librarie permettant de faire de la programmation par contrainte.** \n\n### Representation\n\n\u003eLa partie representation permet de créer les variables du problème (avec la classe **Variable** et **BooleanVariable**), et les contraintes (interface **Constraint**). L'interface **Constraint** implémente 3 classes :\n\u003e- **Rule** : ce type de contrainte permet dans notre exemple de spécifier directement un lien entre deux **BooleanVariable**. Par exemple elle nous permet de dire \"SI la toiture est terminée ALORS les murs sont terminés\".\n\u003e- **DifferenceConstraint** : ce type de contrainte nous permet ici de faire en sorte que chaque pièce de la maison ait un élement du domaine différent.\n\u003e- **BinaryExtensionConstraint** : nous n'avons pas réussi à implémenter celle-ci dans l'exemple. Le principe de cette contrainte est de créer un lien entre deux objets **Variable**, pour ensuite spécifier explicitement les couples autorisés de domaine entre deux variables.\n\n### Solvers\n\n\u003eDans le package **solvers** nous avons mis à disposition plusieurs types de solveurs dont un algorithme de backtrack, ou MAC. Ce package permet de choisir un élément du domaine pour chaque variable du problème suivant la liste de variables et de contraintes créées.\n\n### Planning\n\n\u003eLe package **planning** nous permet de récupérer, parmi toutes les actions possibles d'un problème résolu, la meilleure suite d'actions pour arriver à un but. Nous avons plusieurs algorithmes nous permettant de trouver la meilleure suite d'actions dont Dijkstra, A*, DFS, BFS.\n\n### Datamining\n\n\u003eLe package **datamining** permet, grâce à une liste de solutions, d'extraire des motifs qui se répètent, suivant leurs fréquences.\n\n### Example :\n\n\u003eTout commence sur la classe **HouseDemo**. On va d'abord demander à l'utilisateur de renseigner les valeurs qu'il souhaite pour son\nfutur plan de maison. Ensuite, on va construire toutes les contraintes de la maison grâce à la méthode `houseRepresentation.\u003emakeAllConstraint()`. Le solver choisi va donc commencer son travail de résolution grâce aux variables et aux contraintes créées précédemment. Une fois les résultats affichés, c'est le package **planning** qui travaille (un peu trop longtemps des fois) pour trouver le plan correspondant à la solution trouvée par solver, et enfin le package **datamining** stocke et affiche les règles trouvées.\n\n### Tests :\n\n\u003eNous avons une classe éxécutable dans le package **tests**, il fait appel à toutes les méthodes de tests de la librairie. Si toutes les fonctions testées sont correctes alors \"All tests passed\" s'affiche. Cependant les tests fonctionnent comme ceci : quelques inputs dont on connait les outputs sont envoyés dans la méthode testée. On ne teste que des valeurs \"spéciales\" comme un tableau vide par exemple. Il est donc possible que les tests passent alors qu'il y a une erreur de fonctionnement d'une méthode pour certains cas.\n\n## Autres details :\n\n- Le package examples contient la démonstration de tous les packages développés dans la librairie. Ainsi, il y a une classe de démonstration pour chaque package développé (HouseRepresentation-\u003epackage **representation**, etc ..). Notre classe Main est donc\n**examples.HouseDemo**.\n- Pour exécuter rapidement le programme, sans passer par le renseignement de valeurs initiales, il faut commenter la ligne 24 de la\nclasse principale **HouseDemo** : `inputParameters();`.\n- Malgré tous nos efforts, et après de nombreuses heures de debuggage passées avec Josselin Guérenon (que l'on remercie encore une fois),\nnous n'avons pas réussi à satisfaire la contrainte concernant les pièces d'eau. Le détail doit être minime mais nous ne savons pas qu'est\nce qui pose problème... Nous avons essayé plusieurs facons de faire, nous avons décidé de laisser ces fonctions visibles mais commentées.\nCes essais se trouvent dans le fichier **HouseRepresentation** ligne 187.\n- Notre package **solvers** contient une classe `BackTrackSolverMultipleSolution`. Elle reprend le même code que `BacktrackSolver` mais\nelle stocke les résultats trouvés par le solver pour les utiliser plus tard dans le package **examples**.\n- Concernant l'affichage des différentes parties de notre démonstration, nous avons @override plusieurs fonctions `toString()`, notamment dans la classe **Variable** et **Action**.\n- Lors de l'execution de l'exemple **HouseDemo**, le **Planner** met beaucoup de temps à s'éxecuter à partir de 6 pièces.\n\n## Liens utiles :\n\n- https://en.wikipedia.org/wiki/Constraint_programming\n- https://en.wikipedia.org/wiki/Backtracking\n- https://en.wikipedia.org/wiki/Local_consistency\n- https://en.wikipedia.org/wiki/A*_search_algorithm\n- https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm\n- https://en.wikipedia.org/wiki/Breadth-first_search\n- https://en.wikipedia.org/wiki/Depth-first_search\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanzopgp%2Farchitectapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhanzopgp%2Farchitectapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanzopgp%2Farchitectapp/lists"}