Le problème du sac à dos est un problème d’optimisation bien connu. On le rencontre par exemple dans l'emballage des conteneurs maritimes. Un conteneur maritime a une capacité de poids qu’il peut supporter. Étant donné un ensemble d’articles à expédier, où chaque article a une valeur et un poids, le problème est de sélectionner les articles optimaux à emballer dans le conteneur d’expédition. Ce problème d'optimisation peut être défini comme un objectif avec une contrainte :
Cet exemple résout un tel problème de sac à dos en le reformulant sous la forme d'un modèle quadratique contraint (CQM) et en le soumettant à un solveur CQM hybride Leap.
Pour exécuter la démo par défaut, entrez la commande :
python knapsack.py
Pour afficher les options disponibles, entrez la commande :
python knapsack.py --help
Les arguments de ligne de commande vous permettent de sélectionner l'un des nombreux ensembles de données (sous le dossier /data
) et de définir la capacité de transport. Les fichiers de données sont formulés sous forme de lignes d'éléments, chacun défini comme une paire de poids et de valeur.
Le code de knapsack.py
comprend trois fonctions principales :
build_knapsack_cqm()
crée un CQM en définissant un objectif et une contrainte comme suit :
parse_inputs()
est une fonction utilitaire qui lit les données des fichiers d'exemple.
parse_solution()
analyse et affiche les résultats renvoyés par le solveur.
Publié sous la licence Apache 2.0. Voir fichier LICENCE.