{"id":25135470,"url":"https://github.com/julio4/sac-a-dos","last_synced_at":"2025-04-03T02:26:49.114Z","repository":{"id":56575641,"uuid":"303333323","full_name":"julio4/sac-a-dos","owner":"julio4","description":"Class Project - Knapsack solver differents algorithms implementation in Java","archived":false,"fork":false,"pushed_at":"2023-12-28T11:43:44.000Z","size":952,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-08T16:38:26.863Z","etag":null,"topics":["algorithms","class-project","knapsack-problem","knapsack-solver"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/julio4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-10-12T08:54:43.000Z","updated_at":"2023-12-28T11:43:47.000Z","dependencies_parsed_at":"2025-02-08T16:43:10.988Z","dependency_job_id":null,"html_url":"https://github.com/julio4/sac-a-dos","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julio4%2Fsac-a-dos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julio4%2Fsac-a-dos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julio4%2Fsac-a-dos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julio4%2Fsac-a-dos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/julio4","download_url":"https://codeload.github.com/julio4/sac-a-dos/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246924013,"owners_count":20855653,"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":["algorithms","class-project","knapsack-problem","knapsack-solver"],"created_at":"2025-02-08T16:33:03.702Z","updated_at":"2025-04-03T02:26:49.096Z","avatar_url":"https://github.com/julio4.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=center\u003e\n  \n  \u003ch3 align=center\u003eProjet d'algorithmique\u003c/h3\u003e\n\n\u003cp align=center style=\"font-size:5px\"\u003e\n                            ██▓▓▓▓▓▓▓▓▓▓▓▓                              \u003cbr\u003e\n                          ██▓▓░░        ▓▓▒▒                            \u003cbr\u003e\n                          ▒▒░░          ▒▒░░                            \u003cbr\u003e\n                      ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░                    \u003cbr\u003e\n                  ░░▒▒▒▒▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░                  \u003cbr\u003e\n                  ▒▒▒▒▒▒▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░                  \u003cbr\u003e\n                  ▒▒▒▒▒▒▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░                  \u003cbr\u003e\n      ░░          ▒▒▒▒▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░▒▒░░            ░░    \u003cbr\u003e\n  ░░░░░░░░    ░░  ▓▓▒▒▓▓██▓▓▒▒▒▒▒▒▒▒░░▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒░░    ░░░░  ░░  ░░\u003cbr\u003e\n      ░░  ░░  ░░  ▓▓▒▒▓▓▓▓▓▓░░▒▒░░▒▒░░▒▒░░▒▒░░░░░░▒▒░░      ░░    ░░░░  \u003cbr\u003e\n    ░░░░  ░░  ░░  ▓▓▒▒▓▓▓▓▓▓░░▓▓▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒░░▓▓▒▒    ░░░░    ░░░░  \u003cbr\u003e\n  ░░  ░░  ░░  ░░░░▓▓▒▒▓▓▒▒▓▓▒▒▒▒▓▓▒▒▒▒▓▓▒▒▒▒▓▓▓▓▒▒▓▓▓▓▒▒░░    ░░  ░░  ░░\u003cbr\u003e\n                  ▒▒▒▒▒▒▓▓▒▒░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░                \u003cbr\u003e\n                  ▒▒▒▒▒▒▓▓▒▒░░▒▒▒▒░░▓▓▓▓░░░░░░░░░░░░░░░░                \u003cbr\u003e\n                  ▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░                \u003cbr\u003e\n                  ▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░                \u003cbr\u003e\n                  ▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                \u003cbr\u003e\n                    ▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                  \n\u003c/p\u003e\n\n  \u003ch1 align=center\u003eProblème du sac à dos\u003c/h1\u003e\n  \u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#contact\"\u003eDoumèche Jules\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#contact\"\u003eMartin Gwénolé\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#utilisation\"\u003eUtilisation\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#documentation\"\u003eDocumentation\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"./images/demo.gif\"/ style=\"width:50%;border-radius:2%;\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n## Installation\n\n```sh\n# clone du repos\n$ git clone https://github.com/julio4/sac-a-dos.git\n\n# se placer dans le répertoire sac-a-dos\n$ cd sac-a-dos\n\n# lancer le programme\n$ java -jar sac-a-dos.jar [arguments]\n```\n\n\n[![Ouvrir avec Google Cloud Shell](https://user-images.githubusercontent.com/27065646/92304704-8d146d80-ef80-11ea-8c29-0deaabb1c702.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/julio4/sac-a-dos.git)\n\n## Utilisation\n\n```sh\n$ java -jar sac-a-dos.jar [chemin] [poidsMax] [Méthode]\n\n  chemin                le chemin du fichier absolu,\n                        ou relatif dans le répertoire courant ou dans 'data/'\n\n  poidsMax              Le poids maximal du sac à dos\n\n  Méthode               Méthode utilisée lors de la résolution:\n                        -'g','glouton','gloutonne': Algorithme Glouton\n                        -'d','dyn','dynamique': Algorithme Dynamique\n                        -'p','ps','pse': Algorithme PSE\n```\n\nPour lancer l'interface avec menu:\n```sh\n$ java -jar sac-a-dos.jar\n```\nLa liste des différentes listes d'objets se situe : ```data/*.txt```\n\nDirectement avec des arguments, exemples:\n```sh\n$ java -jar sac-a-dos.jar itemsEval.txt 20 glouton\n\n$ java -jar sac-a-dos.jar itemsEval-float.txt 15.55 dynamique\n\n$ java -jar sac-a-dos.jar items.txt 5 pse\n```\n\n## Documentation\n\n**La documentation JavaDoc : [```/doc```](doc/index.html)**\n\n### Le problèmes du sac à dos\n\nLe [problème du sac à dos](https://fr.wikipedia.org/wiki/Probl%C3%A8me_du_sac_%C3%A0_dos), ou [Knapsack problem](https://en.wikipedia.org/wiki/Knapsack_problem) en anglais, est un problème d'algorithmique.\nCe problème modélise un sac à dos, qui peut contenir des objets jusqu'à un poids limite (le poids maximal du sac). \n\nAvec un ensemble A d'objets ayant chacun un poids et une valeur, quel est le sous ensemble de A dont tout ses objets peuvent être mis dans le sac sans dépasser son poids maximal, tout en maximisant la valeur totale du sac.\nC'est un problème d'optimisation combinatoire\n\n### Les algorithmes implantés\n\nIl existe de nombreux algorithmes différents pour résoudre ce problème.\nCependant nous pouvons les classer dans deux catégories:\n\n- **Résolution approchée** : trouve une solution réalisable qui est proche de la solution optimale. Elle permet souvent d'obtenir une complexité plus intéressante que la solution exacte\n\n- **Résolution exacte** : trouve une solution optimale. L'enjeu est alors de réduire au maximum la complexité d'un tel algorithme\n\n#### - Algorithme Gloutons\n\nL’algorithme calcule pour chaque objet de l'ensemble A le rapport de sa valeur sur son poids.\n\nPuis les objets sont triés dans une liste par ordre décroissant de la valeur du rapport du chaque objet.\n\nEnfin, les objets sont ajoutés un à un dans le sac tant qu’il reste de la place et que le poids maximal n'est pas atteint. Il permet d'obtenir une solution approchée\n\n#### - Algorithme par Programmation Dynamique\n\nCet algorithme divise le problème en sous problèmes, pour ensuite déduire la solution 'générale'.\n\nL’algorithme crée une matrice de taille ```Poids Max * Nombre d’Objets```. \nLes valeurs décimales sont multipliées par 2 pour pouvoir les représenter comme des Integers (la précision peut être modifiée dans ```Appli.PRECISION```).\n\nL’algorithme rempli en premier la première ligne, puis toutes les lignes de la matrice qui représente le bénéfice possible associé aux i objets avec un poids j.\n\nPuis l’algorithme récupère chaque objet en remontant la matrice pour obtenir la solution optimale.\n\nExemple:\n``` \n\u003e fr.main.Appli itemsEval.txt 20 dyn\nArguments:\nChemin: data/itemsEval.txt\nPoids max: 20.0\nMéthode: DYNAMIQUE\n\n  i\\j  0      1      2      3      4      5      6      7      8      9      10     11     12     13     14     15     16     17     18     19     20     \n----------------------------------------------------------------------------------------------------------------------------------------------------------\n       0      0      0      0      0      0      0      0      0      0      20     20     20     20     20     20     20     20     20     20     20     \n       0      2      2      2      2      2      2      2      2      2      20     22     22     22     22     22     22     22     22     22     22     \n       0      24     26     26     26     26     26     26     26     26     26     44     46     46     46     46     46     46     46     46     46     \n       0      24     80     104    106    106    106    106    106    106    106    106    106    124    126    126    126    126    126    126    126    \n       0      24     80     104    106    115    139    141    141    141    141    141    141    141    141    141    159    161    161    161    161    \n       0      24     80     104    106    115    140    164    166    175    199    201    201    201    201    201    201    201    201    201    219    \n       0      40     80     120    144    146    155    180    204    206    215    239    241    241    241    241    241    241    241    241    241    \n       0      50     90     130    170    194    196    205    230    254    256    265    289    291    291    291    291    291    291    291    291    \n       0      50     200    250    290    330    370    394    396    405    430    454    456    465    489    491    491    491    491    491    491    \n       0      50     200    250    290    330    370    394    397    405    430    454    457    465    489    492    494    494    494    494    494    \n       0      50     200    250    290    330    370    394    397    405    430    454    457    465    489    492    494    494    497    505    530    \n       0      50     200    250    290    330    370    394    397    405    1000   1050   1200   1250   1290   1330   1370   1394   1397   1405   1430   \n\nSac à dos\n-Valeur totale: 1430.0\n-Poids total: 20.0 (100.00%)\n-Poids Maximal: 20.0\n-Objets:\n  \u003eLingot d'or [poids= 10.0, prix= 1000.0]\n  \u003eiPhone [poids= 2.0, prix= 200.0]\n  \u003eCouteau suisse [poids= 1.0, prix= 50.0]\n  \u003eCamping gaz [poids= 1.0, prix= 40.0]\n  \u003eSac de couchage [poids= 4.0, prix= 60.0]\n  \u003eChaussures [poids= 2.0, prix= 80.0]\n```\n\n#### - Algorithme par Séparation et évaluation (PSE)\n\nL'algorithme crée un [Arbre Binaire de recherche](https://fr.wikipedia.org/wiki/Arbre_binaire_de_recherche) qui énumère toutes les solutions possibles.\n\nAfin de réduire au maximum l'arbre, l'algorithme calcule si une partie de l'arbre peut mener à une meilleure solution que celle(s) déjà trouvée(s) pour éviter d'explorer des branches inutilement.\n\nAvec le meilleur chemin de branches trouvé, l'algorithme retrouve tous les objets de la solution optimale.\n\n\n### Construire les sources\n\nDans votre IDE, cloner le repos:\n```sh\ngit clone https://github.com/julio4/sac-a-dos.git\n```\nLes sources se situent dans ```/src```\n\n#### Utilisation de base\n\nLa classe GestionAppli permet de gérer les I/O, et la valiation des arguments.\n\nDans le main:\n```java\n//Création de la classe d'aide\nGestionAppli app = new GestionAppli();\n\n//Validation des Arguments\napp.start(args);\n\n//Création d'un sac à dos\nSacADos sac = null;\ntry {\n    sac = new SacADos(CHEMIN, POIDS_MAX);\n} catch (IOException e) {\n    app.affErreur(e);\n    System.exit(1);\n}\n\n//Résolution\nsac.resoudre(METHODE);\n\n//Résultat\napp.afficher(sac);\n```\n\n\n#### Arborescence\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"./images/ClassDiagram.png\"/ style=\"width:100%;border-radius:2%;\"\u003e\n\u003c/a\u003e\n\nMIT ©\u003cbr/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulio4%2Fsac-a-dos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjulio4%2Fsac-a-dos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulio4%2Fsac-a-dos/lists"}