Page 2 sur 3
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 06:33
par GM
GM a écrit :Personnellement, je peux bricoler vite fait une fonction qui trace une droite et hachure un côté...
... mais le temps nécessaire pour pondre quelque chose d'un peu plus chiadé (comme pour les graphes), je ne l'aurai pas avant le bac.
Je viens de me réveiller avec une idée de façon de faire... d'une difficulté intermédiaire : j'essaierai cela cet après-midi après mes cours.
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 14:10
par Zaf
Bonjour,
Tu n'étais certainement pas bien réveillé ce matin, vu le message cité...
Mais moi j'ai réfléchi au cahier des charges du programme pour la programmation linéaire.
En entrée :
Une matrice 4 colonnes et n lignes, les trois premières colonnes désignant les coefficients des n inéquations et les n éléments de la dernière colonne appartenant à l'ensemble {EG, SI, SS, IE, SE} pour désigner les inégalités utilisées dans les n inéquations : a, b, c, SI désignerait
![ax+by+c>=0 ax+by+c>=0](/forum/latexrender/pictures/79b54bbe3eaccb502b37686467751626.png)
....
Un paramètre pour imposer le choix de hachurer ou pas le demi-plan solution. (peut-être aussi des paramètres pour la couleur...)
Un triplé
![(A, B, C) (A, B, C)](/forum/latexrender/pictures/398bfae73029566f9b99051dd6ed0dc3.png)
pour la fonction économique
![f(x,y)=Ax+By f(x,y)=Ax+By](/forum/latexrender/pictures/7bcffdf46da9b51c6f063157b22b4f63.png)
, où
![c=-1 c=-1](/forum/latexrender/pictures/c06df0b2f6cb0f34a64fe41142c78271.png)
pour rendre minimale,
![c=+1 c=+1](/forum/latexrender/pictures/5376124c74fa55bd2e14e505ec64bc58.png)
pour rendre maximale la fonction économique.
En sortie
Représentation graphique du système, le ou les points
![(x_o , y_o) (x_o , y_o)](/forum/latexrender/pictures/93b26cb6d00d8080e1a07803add543cb.png)
solutions
des droites
![Ax+By=K Ax+By=K](/forum/latexrender/pictures/3832d1496dfdcee963f0d5069af0951a.png)
, notamment pour la (les) valeur optimale de
![K K](/forum/latexrender/pictures/a5f3c6a11b03839d46af9fb43c97c188.png)
.
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 17:05
par GM
Un premier jet brouillon ... sûrement avec plein de bogues... mais qui pourra peut-être dépanner en attendant que je trouve du temps raisonnable à lui consacrer.
gm_programmation_lineaire.asy
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
import gm_programmation_lineaire;
size(400);
VWindow Fenetre = VWindow(xmin=-3, xmax=21,
ymin=-3, ymax=15);
DemiPlan dp1=DemiPlan("$D_1$",line(1,0,-4),"SE",1bp+blue),
dp2=DemiPlan("$D_2$",line(0,1,-5),"SE",1bp+red),
dp3=DemiPlan("$D_3$",line(1,1,-17),"I",1bp+green),
dp4=DemiPlan("$D_4$",line(9,21,-250),"IE");
DemiPlan[] dps={dp1,dp2,dp3,dp4};
// S.P.L. : Situation de Programmation Linéaire
SPL spl=SPL(Fenetre,dps);
draw(spl);
Code : Tout sélectionner
import gm_programmation_lineaire;
size(400);
VWindow Fenetre = VWindow(xmin=-3, xmax=21,
ymin=-3, ymax=15);
DemiPlan dp1=DemiPlan("$D_1$",line(1,0,-4),"SE",1bp+blue),
dp2=DemiPlan("$D_2$",line(0,1,-5),"SE",1bp+red),
dp3=DemiPlan("$D_3$",line(1,1,-17),"I",1bp+green),
dp4=DemiPlan("$D_4$",line(9,21,-250),"IE");
DemiPlan[] dps={dp1,dp2,dp3,dp4};
// S.P.L. : Situation de Programmation Linéaire
SPL spl=SPL(Fenetre,dps);
draw(spl);
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 20:53
par Zaf
Merci infiniment et bravo pour ta rapidité !!
La sortie est géniale, mais malheureusement je n'ai pas pu compiler, j'ai les erreurs :
Code : Tout sélectionner
C:\Program Files\Asymptote/gm_programmation_lineaire.asy: 93.27: no matching variable 'OmitTickIntervals'
C:\Program Files\Asymptote/gm_programmation_lineaire.asy: 94.27: no matching variable 'OmitTickIntervals'
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 20:57
par GM
Zaf a écrit :La sortie est géniale, mais malheureusement je n'ai pas pu compiler, j'ai les erreurs :
Code : Tout sélectionner
C:\Program Files\Asymptote/gm_programmation_lineaire.asy: 93.27: no matching variable 'OmitTickIntervals'
C:\Program Files\Asymptote/gm_programmation_lineaire.asy: 94.27: no matching variable 'OmitTickIntervals'
Ta version d'Asymptote n'est pas à jour.
r4832 | jcbowman | 2010-03-21 22:35:06 -0600 (Sun, 21 Mar 2010) | 2 lines
Changed paths:
M /trunk/asymptote/base/graph.asy
M /trunk/asymptote/doc/asymptote.texi
M /trunk/asymptote/examples/odetest.asy
Add more predefined tick modifiers.
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 21:04
par Zaf
Ok, je vais la mettre à jour de suite.
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 21:06
par GM
Zaf a écrit :... à l'ensemble {EG, SI, SS, IE, SE} pour désigner les inégalités utilisées
Pour moi, on dit "supérieur" pour
![> >](/forum/latexrender/pictures/cedf8da05466bb54708268b3c694a78f.png)
et supérieur ou égal" pour
![\geqslant \geqslant](/forum/latexrender/pictures/091c33b9617c06f3c8f9211fca7a951f.png)
: strictement est un mot superflu.
Donc les possibilités retenues sont : "E", "I", "S", "IE", "SE". Une autre saisie sera considérée comme un "E".
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 21:19
par Zaf
C'est vrai tu as raison, c'est comme tant d'autres abus de langage que nous avons en mathématiques.
Comme choisir au hasard une boule, exactement une boule...
![Clin d’oeil ;)](./images/smilies/icon_e_wink.gif)
Re: Programmation linéaire
Posté : jeu. 6 mai 2010, 21:21
par Zaf
J'ai installé la version 1.94 d'asymptote.
Génial ! ça marche ton exemple !!!
Pour le moment cela suffit pour préparer des sujets ou des corrigés.
Merci encore.
Zaf.
Re: Programmation linéaire
Posté : ven. 7 mai 2010, 07:18
par GM
Zaf a écrit :Pour le moment cela suffit pour préparer des sujets ou des corrigés.
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
import gm_programmation_lineaire;
size(300);
VWindow Fenetre = VWindow(xmin=-3, xmax=21,
ymin=-3, ymax=15);
// Attention : quand l'argument l de type line est défini
// avec la syntaxe line(m,p) plutôt que line(a,b,c), la convention
// des "I", "S", "IE", "SE" n'est pas la même : dommage !
DemiPlan dp1=DemiPlan("$D_1$",line(-3/2,12),"I",1bp+blue,he=2mm),
dp2=DemiPlan("$D_2$",line(-1,10),"IE",1bp+red),
dp3=DemiPlan("$D_3$",line(-1/3,4),"IE",1bp+green,ha=-20);
// he pour l'espacement des hachures, ha pour leur angle
// par rapport à la droite à laquelle elles se rapportent.
DemiPlan[] dps={dp2,dp1,dp3};
// S.P.L. : Situation de Programmation Linéaire
SPL spl=SPL(Fenetre,dps);
// Avant de tracer, on peut rectifier les paramètres.
// Cela dépend de l'ordre dans dps.
spl.contraintes[0].pl=2bp+gray+opacity(.3);
spl.contraintes[0].he=.1mm;
// Avec des hachures serrées, on a l'effet d'une surface colorée.
draw(spl,xStep=4);
C'est du vite fait pour te dépanner... donc
il faut rester dans les clous de son utilisation, en attendant que je l'équipe d'un gilet pare-balles
![M. Vert :mrgreen:](./images/smilies/icon_mrgreen.gif)
:
- quand l'argument l de type line est défini avec la syntaxe line(m,p) plutôt que line(a,b,c), la convention des "I", "S", "IE", "SE" n'est pas la même : dommage ! Je ne suis pas sûr que je vais pouvoir y faire quelque chose car je ne vois pas comment on pourrait détecter la syntaxe avec laquelle les objets de type line ont été définis. Si, il y a une solution qui pourrait consister à changer le type de mon argument : affaire à suivre...
- Il ne faut pas chercher à tracer une droite qui n'intercepte pas la Fenêtre... sinon badaboum : pour cela, je vais régler le problème dans quelques temps ;
- Il ne faut pas encore être trop exigeant au niveau de la personnalisation du style de la grille, des axes : je vais prévoir des facilités pour ces réglages.
Voir aussi les commentaires de
l'exemple ci-dessus.
Remarque à son propos : la transparence de la zone colorée ne passe pas sur le forum... mais uniquement sur le forum.