IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Problème de répartition, un problème de joaillier


Sujet :

Mathématiques

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Points : 6
    Points
    6
    Par défaut Problème de répartition, un problème de joaillier
    Bonjour,

    Après avoir passé plusieurs jours sur ce problème (sans succès :'( ), je viens vous poser la question :
    Etant donnés n pierres précieuses (v,b) (de valeur v et se trouvant dans une boite b), comment les répartir en m lots de valeur totale V.
    Certaines pierres sont des diamants, il ne peut y avoir qu'un diamant par lot au maximum. Une contrainte supplémentaire est que le nombre de boite d'origine d'un même lot doit rester inférieur à B.


    J'ai commencé en rangeant les pierres dans un ordre décroissant de valeur, et en les répartissant dans les lots en respectant les différentes contraintes.
    Résultat : on obtient des lots incomplets
    J'ai ensuite essayé en donnant les diamant, puis en remplissant chaque lot un par un, pour un même résultat.

    En fouillant sur le net, j'ai remarqué que ce problème ressemble au problème du sac à dos, et qu'une programmation dynamique permettrait de le résoudre en temps pseudo-polynomial.
    Le hic, c'est que je n'y connais pas grand chose en programmation dynamique et que je ne sais pas par où commencer

    Merci d'avance pour votre aide,

    --
    Syl

  2. #2
    Membre actif

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par Sylentheal Voir le message
    Bonjour,

    Etant donnés n pierres précieuses (v,b) (de valeur v et se trouvant dans une boite b), comment les répartir en m lots de valeur totale V.
    Certaines pierres sont des diamants, il ne peut y avoir qu'un diamant par lot au maximum. Une contrainte supplémentaire est que le nombre de boite d'origine d'un même lot doit rester inférieur à B.


    En fouillant sur le net, j'ai remarqué que ce problème ressemble au problème du sac à dos
    Je suppose que V et B sont donnés.

    Il y a beaucoup plus de contraintes que pour le problème du knapsack, qui consiste à déterminer les objets devant se trouve dans LE lot, sous contrainte que la somme de leur taille est inférieure (ET PAS EGALE! inférieure!) à la taille du sac. Par exemple, la valeur totale des différents lots est une constante prédéfinie.
    Contrairement au knapsack, les contraintes donc se présentent ici sous forme d'égalité, et pas d'inégalités. Trouver une solution réalisable sera déjà un challenge, avant de trouver LA solution optimale. De plus, il n'y a rien à "optimiser", pas de fonction objectif. Le problème est B ici.

    Pour formaliser :

    i=1...n pierres avec v(i) sa valeur, b(i) sa boite d'origine, d(i) valant 1 si c'est un diamant, 0 sinon. (on peut ajouter un indice virtuel j qui ne change rien)
    j=1...m lots
    x(i,j) vaut 1 si la pierre i va dans le lot j, 0 sinon.


    pour tout j : somme(i=1..n) v(i,j)x(i,j) = V
    pour tout j : somme(i=1..n) d(i,j)x(i,j) = 1
    pour tout j : somme(i=1..n) x(i,j) <= B
    -> tu peux créer une fonction objectif max MB-somme(j=1..m)somme(i=1..n) x(i,j) en gardant les deux premières contraintes, et prier pour avoir un résultat positif.

    --> Tu peux transformer ces contraintes pour avoir un membre de droite égal à 1. Tu aurais un "assignment problem" solvable avec l'algo dit hongrois (cfr wiki).

    Ensuite, si malheureusement tu tombes sur une solution par réalisable pour la 3è condition, tu ajoutes une contrainte.

    Si c'est dans un contexte pro, des logiciels comme AMPL ou XPRES pourront résoudre ça en entrant la première formulation (avec une fonction objectif quelconque..) avec l'option branch-and-cut.

    Bien à toi et bon courage !
    Toujours à adapter le problème à la structure de la machine, mais se soigne pour faire l'inverse.

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 617
    Points : 188 587
    Points
    188 587
    Par défaut


    Pour ajouter quelques détails à la réponse de lautrec, il serait probablement plus simple de ne pas coder un algorithme spécifique pour ton problème, mais bien d'utiliser un formalisme existant (comme la programmation en nombres entiers proposée par lautrec, voire la programmation par contraintes si tu préfères).

    Niveau logiciel, pour la résolution du problème, tu peux regarder SCIP et ZIMPL, parmi les meilleurs dans le domaine du gratuit et libre (http://scip.zib.de/ et http://zimpl.zib.de/). ZIMPL est un dérivé libre d'AMPL, tandis que SCIP remplace Xpress. Tu peux aussi regarder GLPK https://www.gnu.org/software/glpk/, qui a une licence différemment permissive et nettement plus lent d'ailleurs que SCIP (il fut inclus sur la comparaison de la page d'accueil de SCIP jusque récemment, mais finissait toujours bon dernier, aux alentours de cinq fois plus lent que SCIP).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour vos réponses

    Je n'ai pas trop le temps de regarder pour l'instant, mais je le fais asap !

    Je vous tiens au courant,

    Syl

Discussions similaires

  1. [C] Problème a comprendre le problème
    Par WAKAKA dans le forum C
    Réponses: 2
    Dernier message: 07/03/2011, 23h32
  2. Problème de répartition de noeuds (XML excell vs Indesign)
    Par zao2k dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 30/06/2010, 16h41
  3. Réponses: 2
    Dernier message: 11/12/2009, 22h27
  4. Réponses: 4
    Dernier message: 04/08/2009, 14h59
  5. problème eclipse.ini ou problème java ?
    Par arnobase dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/02/2008, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo