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

Algorithmes et structures de données Discussion :

algorithme du simplexe


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Par défaut algorithme du simplexe
    Bonjour, dans le cadre de mon TFE, je dois optimiser les commandes d'éclairage. N'étant pas informaticien de formation j'ai un peu du mal avec l'algorithme du simplexe. En gros je vous explique mon problème :


    J'ai quatre luminaires associés avec 4 capteurs. Le but du jeu est que chaque capteur contrôle le luminaire pour que la valeur détectée par le capteur atteigne un consigne.

    Exemple , j'ai

    Ax = consigne
    avec A la matrice d'influence de chaque luminaire sur chaque capteur et x le dimming du luminaire.

    Mon but est que la somme des x soit le plus petit possible


    j'ai commencer à coder en VBA par la méthode "brute". En effet, j'ai fais une ittération de chaque luminaire et je retiens la meilleure des valeurs possible. le problème, c'est que ca prends trop de temps. Je pense qu'il devrait y avoir moyen avec l'algo du simplexe mais je n'y comprends pas grand chose... Est-ce que qq'un l'a déja codé en VBA ???

    en gros, voici mon code pour l'instant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    i = pas 'pas d'iteration
    While i <= e(1)
      j= pas
      While j <= e(2)
        k = pas
        While k <= e(3)
          l = pas
          While l <= e(4)
             Dim R(4) As Double 'tableau de résultats
             'lumière au capteur 1
             R(1) = Eart(1, 1) * i + Eart(1, 2) * j + Eart(1, 3) * k + Eart(1, 4) * l
             'lumière au capteur 2
             R(2) = Eart(2, 1) * i + Eart(2, 2) * j + Eart(2, 3) * k + Eart(2, 4) * l
             'lumière au capteur 3
             R(3) = Eart(3, 1) * i + Eart(3, 2) * j + Eart(3, 3) * k + Eart(3, 4) * l
             'lumière au capteur 4
             R(4) = Eart(4, 1) * i + Eart(4, 2) * j + Eart(4, 3) * k + Eart(4, 4) * l
     
             Dim rd As Double
             rd = 0
             For cmp = 1 To 4
             rd = rd + Abs(consigne - R(cmp))
             Next cmp
     
             If rd < min Then
               min = rd
               result(ind, 1) = i * 100
               result(ind, 2) = j * 100
               result(ind, 3) = k * 100
               result(ind, 4) = l * 100
               result(ind, 5) = min
             End If
            l = l + pas
          Wend
          k = k + pas
        Wend
        j = j + pas
      Wend
      i = i + pas
    Wend
    si quelqu'un avait une idée pour m'aider

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    http://www.developpez.net/forums/sho...light=simplexe

    + une recherche dans ce forum autour du theme simplex.

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    En recherche opérationnel, pour résoudre un simplexe, on utilisait une application externe du nom de lpsolve sous linux (ou UNIX), mais étant sous windows là, je ne sais pas si cette application se trouve partout.


    Il suffisait d'écrire dans un fichier le simplexe en déclarant les variables... et la fonction à maximiser ou à minimiser et le donner à manger à lpsolve qui fournissait en sortie un fichier avec la meilleure solution.

    [edit] d'autant plus pratique si tu n'as pas de forcement d'informaticien....

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Par défaut
    J'ai déjà vu une utilisation de LPSOLVE sous Excel, donc je pense que tu peux trouver tout ce dont tu as besoin pour VBA

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 123
    Par défaut
    Citation Envoyé par borisd
    J'ai déjà vu une utilisation de LPSOLVE sous Excel, donc je pense que tu peux trouver tout ce dont tu as besoin pour VBA

    Y a aussi le SOLVEUR sur excel (OUtils->Macros complementaires). Sinon tu l'installe a partir du CD d'office de ta version et tu choisis l'option d'installation personnalisée pour le chercher et le cocher.

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Je ne suis pas sûr que le solveur fasse cela.

    Et puis ce n'est pas pratique d'utiliser un module comme ça d'une application, ce n'est pas utilisable pour une application externe que l'on pourrait créer.
    lpsolve est utilisable en ligne de commande, ce qui fait que l'on peut l'utiliser dans un programmer réaliser en C (avec des appels systèmes) ou autres choses.

    C'est à dire que lpsolve calcule les données, et on programme l'exploitation des données à part.

    De plus :
    J'ai quatre luminaires associés avec 4 capteurs. Le but du jeu est que chaque capteur contrôle le luminaire pour que la valeur détectée par le capteur atteigne un consigne.
    Et Excel n'est pas capable de faire directement cela (enfin, je ne pense pas, ...) alors qu'un programme que l'on fait...

  7. #7
    Membre averti
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Par défaut
    Ce n'est pas dure d'implémenter un simplex (même en VB), il suffit que tu cherche l'algo (sur google) puis que tu le transcrives en VB.

    Le problème c'est qu'il va te donner des solutions réel et pas entières (ou pas exactement sur ton maillage)

    Tu as donc deux possiblités:
    - implémenter aussi un Branch and Bound, sur ton simplex pour arriver vraiment à la solution optimal sur ton maillage
    - faire des approximations, mais alors tu ne seras plus à l'optimal, tu aura juste une certaine garantie.

    Pour ton cas la deuxième solutions semble plus approprié, car ta fonction objective s'y prête bien, les coefficients y sont tous positif.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Par défaut
    Citation Envoyé par millie
    C'est à dire que lpsolve calcule les données, et on programme l'exploitation des données à part.

    De plus :

    Et Excel n'est pas capable de faire directement cela (enfin, je ne pense pas, ...) alors qu'un programme que l'on fait...
    Ce que je veux dire, c'est qu'il existe certainement une bibliothèque ou un truc comme ça de LPSOLVE utilisable avec le langage VB. Tu codes l'entrée des données dans le solver en VB, tu fais l'appel de fonction de la librairie en VB, tu traites les résultats en VB. Je n'ai pas dis qu'il existait une fonction d'Excel qui te permettait d'afficher magiquement le résulat de ton problème dans une cellule...
    Le premier lien de Google trouvé en tapant "lpsolve excel" :
    http://web.nps.navy.mil/~buttrey/Sof...lve/index.html
    C'est en anglais, mais ça a l'air de bien correspondre à ton problème puisque tu codes en VBA.

  9. #9
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Effectivement, cela a l'air pas mal c'est déjà implémenté pour VBA, ce qui évite de reprogrammer une résolution de simplexe

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/02/2016, 16h24
  2. algorithme du simplexe
    Par luchio13579 dans le forum Mathématiques
    Réponses: 2
    Dernier message: 15/06/2010, 12h10
  3. [Turbo Pascal] Algorithme de simplex : plantage de mon programme et de TP7
    Par benooo dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 01/05/2009, 23h49
  4. Algorithme de simplex
    Par ghizoo dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 09/03/2006, 14h28
  5. Algorithme de simplex
    Par papito dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/09/2005, 16h28

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