PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Methode du simplexe
Methode du simplexe
Iniciado por planisoft, 06,jun. 2008 18:25 - 43 respuestas
Publicado el 06,junio 2008 - 18:25
Est-ce quelqu'un connait des liens sur la methode du simplexe.

Je recherche depuis plusieurs jours sur le net mais je n'ai rien trouvé de satisfaisant.

Je recherche surtout de l'info sur comment modéliser un probleme pour appliquer la méthode du simplexe.

Exemple simple.

Je dois couper les morceaux suivant dans des barres de 500mm.

2 X 45mm
3 X 56mm
3 X 123mm
5 X 176mm
7 X 212mm.

Je veux modéliser ce problème pour appliquer la mothode du simplexe afin de minimiser les chutes.

Merci de vos réponses
Publicado el 06,junio 2008 - 19:21
Une recherche sur google donne quelques liens, genre wikipedia, puis de wikipedia, on peut arriver vers ça :
http://www-lih.univ-lehavre.fr/~balev/Teaching/OR/simplex.pdf

après je ne sait pas ce que tu cherches precisément

cordialement
Publicado el 06,junio 2008 - 19:49
Peut être en mettant "programmation linéaire"
Mais la construction d'un soft la dessus peut être sympa.
Bon courage
Publicado el 06,junio 2008 - 19:57
Merci pour le lien.

Ce que je cherche c'est comment modéliser mon problème, genre

Maximiser z = 7x1 + 9x2 + 18x3 + 17x4
s. c. 2x1 + 4x2 + 5x3 + 7x4 <= 42
x1 + x2 + 2x3 + 2x4 <= 17
x1 + 2x2 + 3x3 + 3x4 <= 24
x1 ; x2 ; x3 ; x4 <= 0

Merci.
Publicado el 07,junio 2008 - 02:24
Jean Hamelin a écrit dans le message de news <15a6be75b0a75110070fe6219dec3a71@news.pcsoft> :
Est-ce quelqu'un connait des liens sur la methode du simplexe.


Je t'ai mis au moins 1 liens dans ton précédent post sur ce forum aujourd'hui. Mais c'est vrai que sur le net, les trucs que j'ai trouvés sont pas super bien expliqués, surtout que dans ton cas, tu as affaire a un calcule de minimisation plutot que de maximisation.
Il faut donc créer les fonctions du simplexe et le convertir en "DUAL" pour pouvoir le solutionner.

Vas voir ici, c'est un bon cours complet sur la programmation linéaire, methode des sommets, methode du simplexe et j'en passe : http://wims.u-psud.fr/wims/wims.cgi…

ou en pdf a télécharger ici : http://wims.u-psud.fr/wims/modules/U3/opresearch/doclinearoptim.fr/doc/1/files/docquadratic.pdf

bonne chance, parce que a programmer, c'est pas le pied, je suis en plein dessus car introuvable en source Windev sur le net (ou alors j'ai pas eu de chances), et cela peut résoudre plein de problemes

Bonne continuation
Publicado el 08,junio 2008 - 01:35
Bonjour,


pour la méthode du simplexe, j'utilise lpsolve :
http://lpsolve.sourceforge.net/5.5/index.htm

Depuis Windev :
http://www.seinlet.com/modules/mydownloads/singlefile.php…

Pour utiliser la dll lpsolve depuis Windev (loin d'être terminé, mais en cours).
Publicado el 09,junio 2008 - 01:32
Merci beaucoup Nicolas pour cette ressource WinDev précieuse.
Il faudra juste que je pense a mettre a jour mon PC perso qui est encore en version 11.
Je testerai cette class au travail.

Interessant ton site.

Bonne continuation
Publicado el 10,junio 2008 - 16:12
Merci a Nicolas et Raphael pour les infos.

Je regarde ça et je vous avise si je trouve ma solution.

Bon dev.
Publicado el 11,junio 2008 - 23:45
Pas encore trouvé de solution.

Si quelqu'un a d'autres idées je suis preneur.
Publicado el 12,junio 2008 - 11:52
Juste une idée comme ca : tu peux peut-être (en attendant de trouver une solution plus élégante) utiliser le solver d'excel qui est très complet et que tu peux piloter depuis ton apli WD...

A++
Thierry
Publicado el 12,junio 2008 - 16:05
Je connais pas le solver d'excel.

Peux-tu me donner un peu d'info SVP.

Merci.
Publicado el 12,junio 2008 - 18:06
J'utilise Excel en anglais mais tu trouveras sans pb :
Menu Tools/solver. Assure-toi qu'il est installé, sinon tu fais Tools/Add-ins
et tu installes le solver.
Je crois que tout ce que tu cherches est dedans, tu n'auras plus qu'à trouver les méthodes pour le piloter par WD.
Bon courage,
Thierry
Publicado el 12,junio 2008 - 18:34
Merci pour les info.

Je vous tiens au courant du déroulement de ma démarche.
Publicado el 14,junio 2008 - 15:56
bonjour,
J'ai un peu le même problème dans ma branche. Il y a encore d'autres paramètres à prendre en compte:
La chute minimale résiduelle acceptable
Les barres incomplettes en stock
Vaut-il mieux garder en stock un reste qui pourrait éventuellement mieux être utilisé dans une commande future que de l'utiliser tout de suite avec une chute plus importante
etc, etc
Ce que vous essayez d'implémenter ne tient pas compte du passé ni du future.
J'ai écris un petit exemple en WD12 (que je viens d'installer): si ça vous intéresse?
Publicado el 16,junio 2008 - 15:30
Bonjour à tous
je suis preneur pour ton soft
ci-joint mon mail: nfrancky@hotmail.fr
Publicado el 16,junio 2008 - 15:58
Ca m'intéresse au plus haut point.

Planisoft@videotron.ca
Publicado el 16,junio 2008 - 16:20
Mon courriel

Lettre manquante de mon courriel: aniso
Publicado el 16,junio 2008 - 16:22
Bonjour
Ca m'intéresse aussi

Merci d'avance JCP

puccettijc@free.fr



"König" <admin@konig-tapis.ch> a écrit dans le message de
news:80f19e8b7a1261c92162a423fdb8a73c@news.pcsoft...



bonjour,
J'ai un peu le même problème dans ma branche. Il y a encore d'autres
paramètres à prendre en compte:
La chute minimale résiduelle acceptable
Les barres incomplettes en stock
Vaut-il mieux garder en stock un reste qui pourrait éventuellement mieux
être utilisé dans une commande future que de l'utiliser tout de suite avec
une chute plus importante
etc, etc
Ce que vous essayez d'implémenter ne tient pas compte du passé ni du
future.
J'ai écris un petit exemple en WD12 (que je viens d'installer): si ça vous
intéresse?
Publicado el 16,junio 2008 - 16:47
Bonjour,

Je suis intéressé par ce problème !
Serait-il possible de voir l'exemple ?
Merci infiniment

GH

König a écrit dans le message de news <80f19e8b7a1261c92162a423fdb8a73c@news.pcsoft> :
bonjour,
J'ai un peu le même problème dans ma branche. Il y a encore d'autres paramètres à prendre en compte:
La chute minimale résiduelle acceptable
Les barres incomplettes en stock
Vaut-il mieux garder en stock un reste qui pourrait éventuellement mieux être utilisé dans une commande future que de l'utiliser tout de suite avec une chute plus importante
etc, etc
Ce que vous essayez d'implémenter ne tient pas compte du passé ni du future.
J'ai écris un petit exemple en WD12 (que je viens d'installer): si ça vous intéresse?
Publicado el 17,junio 2008 - 10:55
Bonjour,
A ceux qui l'ont demandé j'ai envoyé le projet WD12.
Le jeux est de trouver un optimum en ajustant le paramètre "gnChute_minimum".
Si on est trop avare, le stock de chutes va se gonfler,
si on jette de trop grands morceaux on va perdre de la marge.
J'utilise deux fichiers, un pour le stock des barres et un autre pour les coupes à réaliser.
Voici la partie du code qui fait le travail. Je l'ai écris pour illustrer le problème mais je ne l'ai pas testé à fond ni essayé de l'optimiser.
LOCAL
T_coupe est un tableau dynamique de 0 par 3 entiers
C_tot est un entier
i,j sont des entiers
Plus_petit est un entier

HExécuteRequête(REQ_coupe_croissante,hModifieFichier)
HLitPremier(REQ_coupe_croissante)
Plus_petit=REQ_coupe_croissante.longueur
POUR TOUT REQ_coupe_croissante
TableauAjouteLigne(T_coupe,REQ_coupe_croissante.IDCoupe,REQ_coupe_croissante.longueur,REQ_coupe_croissante.IDStock)
C_tot++
FIN
i=1
j=C_tot
// on ne prend en compte que les barres assez grandes pour la plus petite des coupes
HExécuteRequête(REQ_stock,hModifieFichier,Plus_petit)
HLitPremier(REQ_stock)
// on essaie de caser en premier les plus grandes coupes
//on débite la première coupe
//on essaie de récupérer les chutes
TANTQUE PAS HEnDehors(REQ_stock)
//on vérifie si la barre est assez grande
SI REQ_stock.longueur-T_coupe[j,2]>=0 ALORS
//on vérifie si la barre peut être utilisée sans faire trop de chute ou si c'est la dernière coupe à faire
SI (REQ_stock.longueur-T_coupe[j,2]<=gnChute_minimum) OU (j=1) ALORS
//il reste juste assez pour faire cette coupe on utilise cette barre
T_coupe[j,3]=REQ_stock.IDStock
//défalque la barre en stock
REQ_stock.longueur=REQ_stock.longueur-T_coupe[j,2]
HModifie(REQ_stock)
//on passe à la coupe suivante
j--
//on recommence par la plus petite barre du stock
HLitPremier(REQ_stock)
SINON
//Arrive-t-on à caser au moins la plus petite coupe en plus dans la chute
SI REQ_stock.longueur-T_coupe[j,2]-T_coupe[1,2]>=0 ALORS
//oui c'est donc un bon plan,on débite
T_coupe[j,3]=REQ_stock.IDStock
//défalque la barre en stock
REQ_stock.longueur=REQ_stock.longueur-T_coupe[j,2]
HModifie(REQ_stock)
//on passe à la coupe suivante
j--
//on recommence par la plus petite barre du stock
HLitPremier(REQ_stock)
SINON
//la barre est trop petite, on essaie avec la barre suivante
HLitSuivant(REQ_stock)
SI HEnDehors(REQ_stock) ALORS
Info("il n'y a pas assez de stock pour honorer la commande")
SORTIR
FIN

FIN
FIN
SINON
//la barre est trop petite, on essaie avec la barre suivante
HLitSuivant(REQ_stock)
SI HEnDehors(REQ_stock) ALORS
Info("il n'y a pas assez de stock pour honorer la commande")
SORTIR
FIN
FIN
SI j=0 ALORS
Info("Tout a été débité")
SORTIR
FIN
FIN
Info("on met à jour le fichier des coupes")
POUR i=1 A C_tot
SI T_coupe[i,3]<>0 ALORS
HLitRecherchePremier(REQ_coupe_croissante,IDCoupe,T_coupe[i,1])
REQ_coupe_croissante.IDStock=T_coupe[i,3]
HModifie(REQ_coupe_croissante)

FIN

FIN

Il faudrait encore ajouter le traitement des livraisons de matière première: peut-on utiliser pour une même commande des barres provenant de livraisons différentes ?
Maintenant beaucoup plus compliqué: faire la même chose avec des surfaces.
Par exemple faire des découpes dans de la tôle, des panneaux de bois, des rouleaux de moquette ...
amusez-vous bien
Publicado el 17,junio 2008 - 16:42
Merci à Konig pour le code.

Par contre ce que je cherche c'est plutot à optimiser comme les logiciels existants sur le marché.

Voir à l'adresse suivante et télécharger Pipe cutting suite .

http://www.optimizecutter.com/index.html
Publicado el 17,junio 2008 - 20:21
bonjour,
Merci pour le programe, je l'ai chargé et fait un ou deux tests comparatifs.
Je l'ai fait sur des petites quantités de coupes.
Pipe cutting suite privilégie l'utilisation de barre neuve et il travaille comme moi: de la plus grande coupe vers la plus petite.
Moi je privilégie l'utilisation des restes.
Il faudrait faire des tests comparatifs avec des series qui se rapprochent de votre réalité sur le terrain et voir si l'investissement de l'achat du logiciel et du bidouillage pour l'insérer dans la ligne de production automatisée se justifie (une double saisie des données coûte et augmente les risques d'erreures).
Vérifier aussi si le stock des barres entamées ne gonfle pas trop.
bons tests
Publicado el 18,junio 2008 - 01:25
Il existe aussi une DLL pour optimiser.

http://www.optimalprograms.com/cut_1d_x.htm.

Je l'ai essayé mais impossible d'y accéder par WinDev comme un objet automation.

J'ai réussi en créant une DLL a partir de VB.Cette DLL est accessible en WinDev par la suite.
Publicado el 18,junio 2008 - 10:39
merci
très intéressant, malheureusement ces jours je ne vais pas avoir le temps d'essayer, j'ai plusieurs container de marchandises qui arrivent d'Orient.
Je reviens sur la question des tests: peux-tu créer un serie de données qui se rapproche de ta réalité
-un stock de barre y compris un passé de restants
-plusieurs commandes type.
Je me répette peutêtre, mais il n'est pas forcément rentable d'utiliser un code récursif qui cherche la meilleure solution si le gain est dérisoire.
a plus
Publicado el 18,junio 2008 - 12:38
suite
en regardant de plus près, ils n'utilisent certainement pas une méthode comme le simplex mais une approche commme un programe d'échec. Ils essaient les différentes possibilités en leur donnant un score. A la fin ils gardent la solution avec le meilleur score. La preuve c'est le curseur qui règle la profondeur ou la durée de la recherche. Le risque de cette approche, c'est que selon le temps de calcul qu'on lui accorde, la réponse pourrait ne pas être trés bonne (faire une analogie avec les programes d'échec une fois qu'ils ont quitté leur bibliothèque de coups connus).
Publicado el 18,junio 2008 - 16:32
Une commande type ( en mm )

16 X 1661
16 X 1477
12 X 1274
2 X 1186
4 X 1183
2 X 1173
8 X 1109
10 X 1020
8 X 848
8 X 577
16 X 564
8 X 499
12 X 409
12 X 399

Stock

999 X 4875
1 X 3210
1 X 1285
1 X 612

Dimension minimum réutilisable = 400

Je l'ai testé avec Pipe Cutting Suite.

Temps de traitement : entre 20 et 25 secondes
Perte de matériel 1,29%
Publicado el 18,junio 2008 - 16:56
J'ai refait le meme test avec une ancienne version ( v3.11 ) et j'ai un meilleur résultat dans un temps plus court.

Perte 0,22%
Temps d'exécution : environ 7 secondes.
Publicado el 19,junio 2008 - 01:13
je viens d'essayer ta série sur mon logiciel
si je ne me trompe pas il y a 134 coupes à faire pour 128'130 mm
j'utilise 26 barres de 4875 soit 126750 mm plus les trois chutes soit 131857 mm
il reste à la sortie 3 chutes réutilisables de 706, 795 et 885 mm
donc chutes totales 131857 - 128130 - 706 - 795 - 885 = 1341 mm
soit environ 1% vérifie mais si c'est exact cela montre que les solutions les plus compliquées ne donnent pas toujours des résultats notablement supérieur pour un temps de calcul bien inférieur à la seconde
Publicado el 19,junio 2008 - 16:14
Je vais faire des test plus poussé en fin de semaine et je reviens avec des résultats.

A+
Publicado el 19,junio 2008 - 18:07
fais les tests en faisant varier la chute minimum, moi j'avais fait le test en laissant les 200mm par défaut
je t'envoie par email les fichiers de données avec ta série, ça te fera gagner du temps.
à +
Publicado el 06,agosto 2008 - 12:21
Salut,

J’ai des problèmes avec les solver de l’excel aussi. En effet, je dois calculer les bonnes droites de 4 variables que sont initialisé pour :

Alpha = racine(3)
Beta = 0
Gamma = 0
m = 2

Ensuite je prends les sommes carrées de les 4 variables. Les solver vas chercher la minimum valeur de la somme carrées en changent les variables au dessus et en imposant :

Alpha >= 0
m <= 7
m >= 1

Alors, c’est ça que je dois calculer en utilisant le WinDev !!!

Merci d’avance et pardon pour les de la langue Française (je suis brésilien moi) !!!
Publicado el 18,noviembre 2013 - 03:01
C'est un outil en ligne pour résoudre des problèmes d'optimisation linéaire moyennant la méthode Simplexe et graphique:

http://www.phpsimplex.com/fr/
Publicado el 26,noviembre 2013 - 09:02
Bonjour,

Je suis intéressé par ce problème !
Serait-il possible de voir l'exemple ?
Par avance merci

xms54@wanadoo.fr
Publicado el 07,noviembre 2018 - 11:42
Le projet Windev m'intéresse également s'il est toujours disponible.
Publicado el 07,noviembre 2018 - 16:27
Bonjour Jean-Luc,
La question initiale était de résoudre un problème d'optimisation dans la découpe et l'utilisation du stock en tenant compte des chutes.
Il y avait la proposition d'utiliser la méthode du simplexe et moi j'avais proposé d'utiliser une méthode simple, directe et rapide. Après des tests, il s'avérait que la méthode que j'utilisais donnait de très bons résultats et cela très rapidement.

Je ne sais pas dans tous les cas, mais cela fonctionnait très bien sur les séries de test qui m'avait été fournies.
Dans le fil il y a mon code exemple


C'était suite à la réponse que j'avais faite en 2008:

bonjour,
J'ai un peu le même problème dans ma branche. Il y a encore d'autres paramètres à prendre en compte:
La chute minimale résiduelle acceptable
Les barres incomplètes en stock
Vaut-il mieux garder en stock un reste qui pourrait éventuellement mieux être utilisé dans une commande future que de l'utiliser tout de suite avec une chute plus importante
etc, etc
Ce que vous essayez d'implémenter ne tient pas compte du passé ni du future.
J'ai écris un petit exemple en WD12 (que je viens d'installer): si ça vous intéresse?

Le code qui fait le travail est visible sur le fil, pour le projet complet je dois faire des fouilles car cela date de 2008

Si vous m'exposez ce que vous voulez faire, je pourrai vous dire si mon approche peut s'appliquer

bonne soirée
Alain
Miembro registrado
1 mensaje
Publicado el 07,noviembre 2018 - 23:28
Bonjour Alain, merci pour ta réponse.

Dans mon entreprise nous allons devoir couper des longueurs. Il s'agit d'appuis de fenêtres livrés en longueur de 6 mètres.
Il faudra donc essayer d'optimiser la découpe et si possible réutiliser les chutes.

Etant donné que j'utilise quotidiennement Windev, je me suis dit qu'avant de partir de 0, j'allais voir si quelqu'un n'avait pas déjà
développé quelque chose de ce genre :-)

Bonne journée.

Jean-Luc
Publicado el 10,noviembre 2018 - 12:32
Bonjour,
Oui c'est typiquement le problème que mon programme résout.
J'ai retrouvé le projet, il fait un peu moins de 70 Mo, 1054 fichiers et 50 dossiers.
Ce projet est un exemple pour tester mon raisonnement face à d'autres.
Il est possible de créer une base de donnée de barre en stock, de rentrer une demande de débitage et de fournir les instructions de débitage en essayant d'optimiser le stock.

Je peux vous l'envoyer, mais comment?
bon week-end
alain
Miembro registrado
141 mensajes
Publicado el 11,noviembre 2018 - 23:09
Bonsoir Jean Luc,
regardez du cote de la LST 74, il y a une implémentation de l’algorithme du simplex qui fonctionne très bien.
Nous avons développé en utilisant l'exemple de la LST 74, une optimisation via simplex pour l’optimisation des chutes dans le domaine de l'imprimerie, notamment dans le calcul du nombre de poses optimales en fonction des différentes commandes clients en production pour satisfaire les qtes commandés et avoir le minimum de chute papier (Optimisation en amalgame pour les connaisseurs, problème récurent en imprimerie).
Publicado el 14,noviembre 2018 - 15:08
Ah, ça serait parfait, le plus simple serait sans doute de me l'envoyer par https://wetransfer.com à l'adresse jld@batifer.fr
Merci d'avance
Publicado el 14,noviembre 2018 - 18:09
J'ai zipé le répertoire et je l'ai envoyé avec We Transfer. J'espère que j'ai fait juste ;-)
Juste me confirmer si c'est ok
C'est écrit dans une ancienne version de WinDev. Il faudra la migré. Pour l'essayer le programme est compilé dans le répertoire exe avec les données de test.
Publicado el 09,abril 2019 - 00:25
Bonsoir Alain,

je serais intéressé, également par ton application, serait-il possible de la transmettre par wetransfer à l'adresse dolphy_access arobase yahoo.fr

je t'en remercie par avance

bonne soirée
Publicado el 09,abril 2019 - 10:01
Bonjour, je viens de le transférer
Amitiés Alain
Publicado el 10,abril 2019 - 00:41
Bien reçu

Merci pour le partage

Bonne soirée.
Publicado el 18,julio 2020 - 08:01
Bonjour Alain,

Je serais intéressé, également par ton application, serait-il possible de me la transmettre à l'adresse enamsas@gmail.com

je t'en remercie par avance

bonne soirée