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é... :lol:
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....
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)pour la fonction économique f(x,y)=Ax+By, où c=-1 pour rendre minimale, c=+1 pour rendre maximale la fonction économique.
En sortie
Représentation graphique du système, le ou les points (x_o , y_o) solutions
des droites Ax+By=K, notamment pour la (les) valeur optimale de K.

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

Figure asymptote 57419901b21df259040d4379296b028f
*** 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
  1. import gm_programmation_lineaire;
  2. size(400);
  3. VWindow Fenetre = VWindow(xmin=-3, xmax=21,
  4. ymin=-3, ymax=15);
  5.  
  6. DemiPlan dp1=DemiPlan("$D_1$",line(1,0,-4),"SE",1bp+blue),
  7. dp2=DemiPlan("$D_2$",line(0,1,-5),"SE",1bp+red),
  8. dp3=DemiPlan("$D_3$",line(1,1,-17),"I",1bp+green),
  9. dp4=DemiPlan("$D_4$",line(9,21,-250),"IE");
  10.  
  11. DemiPlan[] dps={dp1,dp2,dp3,dp4};
  12.  
  13. // S.P.L. : Situation de Programmation Linéaire
  14. SPL spl=SPL(Fenetre,dps);
  15.  
  16. 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 > et supérieur ou égal" pour \geqslant : 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... ;)

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.


Figure asymptote 6d32799723ef2f30ce389a302710a6ff
*** 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
  1. import gm_programmation_lineaire;
  2. size(300);
  3. VWindow Fenetre = VWindow(xmin=-3, xmax=21,
  4. ymin=-3, ymax=15);
  5.  
  6. // Attention : quand l'argument l de type line est défini
  7. // avec la syntaxe line(m,p) plutôt que line(a,b,c), la convention
  8. // des "I", "S", "IE", "SE" n'est pas la même : dommage !
  9. DemiPlan dp1=DemiPlan("$D_1$",line(-3/2,12),"I",1bp+blue,he=2mm),
  10. dp2=DemiPlan("$D_2$",line(-1,10),"IE",1bp+red),
  11. dp3=DemiPlan("$D_3$",line(-1/3,4),"IE",1bp+green,ha=-20);
  12. // he pour l'espacement des hachures, ha pour leur angle
  13. // par rapport à la droite à laquelle elles se rapportent.
  14.  
  15. DemiPlan[] dps={dp2,dp1,dp3};
  16.  
  17. // S.P.L. : Situation de Programmation Linéaire
  18. SPL spl=SPL(Fenetre,dps);
  19.  
  20. // Avant de tracer, on peut rectifier les paramètres.
  21. // Cela dépend de l'ordre dans dps.
  22. spl.contraintes[0].pl=2bp+gray+opacity(.3);
  23. spl.contraintes[0].he=.1mm;
  24. // Avec des hachures serrées, on a l'effet d'une surface colorée.
  25.  
  26. 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 :mrgreen: :
  • 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.