Algorithme des Ecartements

Bonjour.

Je cherche à modéliser l'algorithme de écartements (pour le problème du voyageur de commerce) en VBA.

On a un entrepôt de départ (le 0) et 4 clients (1,2,3,4).

La première étape consiste à calculer les écartements entre deux clients.

Ex: Soit e(1,2) l'écartement entre le client 1 et le client 2 on le calcule comme:

e(1,2)=d(0,1)+d(0,2)-d(1,2) où d(0,1) et d(0,2) représentent la distance de l'entrepôt vers le client 1 et de l'entrepôt vers le client 2.

Pour cela on dispose d'un tableau de distances inter-clients.

Pour mon problème (voir fichier xlsm), on doit calculer au total 6 écartements.

Pour le premier écartement, j'ai trouvé une formule valide:

Cells(8, i) = Application.WorksheetFunction.Index(Range("A1:F5"), 2, 2) + Application.WorksheetFunction.Index(Range("A1:F5"), 3, 2) - Application.WorksheetFunction.Index(Range("A1:F5"), 2, 4)

Mais j'arrive pas à automatiser pour calculer tous les écartements.

Pouvez-vous m'aider svp ?

Merci et bonnes fêtes.

136forum.xlsm (15.45 Ko)

Bonjour

Avec une fonction personnalisée

Function Ecart(Premier As Integer, Second As Integer) As Double
  Application.Volatile
  Ecart = Cells(Premier + 1, "B") + Cells(Second + 1, "B") - Cells(Premier + 1, Second + 2)
End Function
=Ecart(1;2)

Merci pour ta réponse Banzai64.

Mais moi je cherche à le faire pour tous les écartements avec une boucle for et des conditions.

Car une fois les ecartements calculés, il faudra les trier...

Bonsoir

Comme-ça ?

Rebonjour Banzai64.

Tu viens de répondre à ma question dans le fichier Excel.

Le bout de code où je bloquais c'était surtout au niveau de la double boucle:

for i=x to ... for j=i+1 to ....

J'ai pas pensé à faire la deuxième boucle en utilisant i.

Besoin: optimiser la tournée de camion entre 1 entrepôt central et X clients

Si tu veux je cherche à modéliser le fameux problème du voyageur de commerce avec l'algorithme des écartements dont le principe est le suivant:

1) Il faut calculer les écartements de tous les couples de points (les clients) par rapport à l'entrepôt central (nous)

2) Classer ces couples par importance décroissante

3) Sélectionner chaque couple de la liste, abandonner ceux qui forment une boucle ou une fourche avec ceux précédemment sélectionnés

4)Arrêter la procédure lorsque n-1 couples ont été retenus ou plus tôt si une contrainte (de capacité,...) est violée.

5) Joindre le dépôt aux deux extrémités.

6) Il faut aussi prendre en compte le tonnage à livrer à chaque clients (à faire par la suite).

Pour l'instant j'essaye d'attaquer tout seul.

Par exemple j'avais généré automatiquement des distances (plus de 1200) de manière aléatoire mais comme je bloquais je suis revenu sur un exemple simple.

Je vais essayer de continuer moi-même notamment je pense mettre les écartements dans une variable tableau et dès que je bloquerais au bout d'un certain temps je reviendrais.

MercI.

mais j'ai commencé à bloquer donc j'ai fais appel à l'aide.

Rechercher des sujets similaires à "algorithme ecartements"