Re : Optimisation par programmation linéaire ( fonction solver).
Bonjour darshiva, poulpor78
Pour le fun...
(...) Après, et comme une fois sur deux quand je tente le solveur...je n'arrive pas à mes fins et j'ai une envie énorme de tester les valeurs via vba, même si c'est plus long. (...)
L'essai proposé ne répond pas à la question posée concerenant le "Solver". Je ne garantis pas les résultats même si j'ai vérifié à l'aide des données initiales quelques résultats de kilométrage et de poids des camions.
L'hypothèse retenue est qu'un camion ne revient pas à sa base pour repartir faire d'autres livraisons. Chaque camion ne fait au maximum qu'une tournée ou bien aucune tournée.
On examine tous les trajets possibles (après en avoir éliminé d'emblée quelques uns au départ qui conduiraient à des trajets équivalents).
Si, par exemple, on a 4 camions: le premier magasin sera toujours livré par le camion 1; le second magasin sera toujours livré par les camions 1 ou 2; le troisième magasin sera livré par les camions 1 ou 2 ou 3; les magasins suivants seront livrés par les camions 1 ou 2 ou 3 ou 4.
Il reste des combinaisons de camions aboutissant à des résultats équivalents par échange des rôles de camions i et j. Ces résultats équivalents sont éliminés à la fin des calculs - pas trouvé comment les éliminer au départ.
Pour 9 magasins, 3 camions et une charge max. de 30t, on aboutit à 261 trajets retenus.
Pour 9 magasins, 3 camions et une charge max. de 28t, on aboutit à 91 trajets retenus.
Avec certaines valeurs initiales, on peut aboutir à une impossibilité. Avec les données présentes dans le fichier, si on choisit 9 magasins et 2 camions et une charge max. de 30t, alors il n'y a pas de solution. Le total des commandes des 9 magasins est de 77 tonnes alors, qu'avec une charge maximale de 30 tonnes par camion, deux camions ne peuvent livrer que 60 tonnes.
Le temps de calcul augmente considérablement avec le volume de trajets à examiner. Sur ma vieille bécane:
- pour 8 magasins et 3 camions et 30t max -> 1,7 sec.
- pour 8 magasins et 4 camions et 30t max -> 21,7 sec.
- pour 9 magasins et 2 camions et 30t max -> Impossible
- pour 9 magasins et 3 camions et 30t max -> 3,9 sec.
- pour 9 magasins et 4 camions et 30t max -> 120,0 sec.
Sur la feuille "Param", indiquer:
- le nombre de magasin (Mag)
- Le nombre de camion (Cam)
- la charge maximale d'un camion (MaxCharge)
- Pour les quantités commandées par magasin, on ne prend en compte que les Mag premières cellules
- Pour les distances entre base+magasins, on ne prend en compte que les (Mag+1) premières lignes et (Mag+1) premières colonnes du tableau des distances.
- les valeurs prises en compte prennent un fond jaune clair
Cliquer sur le bouton "Calcul" de la feuilles "Parcours" pour lancer les calculs.
Description des colonnes en résultat:
- Colonnes en bleu -> on indique pour chaque magasin quel camion fait la livraison
- Colonnes en rose -> on indique pour chaque camion le kilométrage à parcourir
- 1ière colonne jaune -> le total des kimomètres à parcourir pour l'ensemble des camions
- 2ième colonne jaune -> la moyenne des écarts absolus des kilométrages de chaque camion par rapport à la moyenne arithmétique des kilométrages. Cette valeur pourrait servir à "équilibrer" les tournées de chaque chauffeur en ne choisissant pas forcément le plus petit kilométrage.
- Colonnes en rose -> on indique pour chaque camion le tonnage livré
Le code est dans Module1.
Préférer la version v3 ICI