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