* fichier : mma_07.dgibi
************************************************************************
************************************************************************
************************************************************************
* Test de la procedure MOCA_MMA et de l'operateur MMA *
* Application au fit d'une fonction afin de *
* passer au mieux par une serie de points *
* *
* On cherche a optimiser les parametres p=(p1,p2,p3,p4,p5) de la *
* fonction h (fonction a 2 pentes p2 et p3) : *
* p2 + p3 p2 - p3 *
* h(x,p) = ------- (x-p1) + ------- sqrt((x-p1)^2 + p4^2) + p5 *
* 2 2 *
* passant au mieux par une serie de P points (Xi ; Hi) connus *
* *
* Sous contraintes que : *
* - cas 1 : -50 < p1 < 50 -50 < p2 < 50 *
* -50 < p3 < 50 -50 < p4 < 50 *
* -50 < p5 < 50 *
*
* - cas 2 : 7 < p1 < 50 -50 < p2 < 50 *
* 0 < p3 < 50 0 < p4 < 1 *
* -50 < p5 < 50 p2 > p3 + 5 *
* la 1ere pente (p2) doit etre superieure *
* a la 2nde pente (p3) *
************************************************************************
* Options
itrac = FAUX ;
* Procedure pour calculer la fonction h(x,p) ainsi que les
* derivees partielles de h selon chaque composante de p (en option)
DEBP H x
*'LISTREEL' p
*'LISTREEL' mot1
/'
MOT'
; ideri = VRAI ;
h0 = ((p2 + p3) * (x - p1) / 2.)
+ ((p3 - p2) * ((((x - p1) ** 2) + (p4 ** 2)) ** 0.5) / 2.)
+ p5 ;
SI (EGA mot1 'VISU') ;
ideri = FAUX ;
FINSI ;
FINSI ;
SI ideri ;
dval = ENUM ;
dhdp
= PROG (-0.5 * (p2
+ p3
+ ((p3
- p2
) * ((x1
- p1
) / ((((x1
- p1
) ** 2) + (p4
** 2)) ** 0.5))))) (0.5 * ((x1 - p1) - ((((x1 - p1) ** 2) + (p4 ** 2)) ** 0.5)))
(0.5 * ((x1 - p1) + ((((x1 - p1) ** 2) + (p4 ** 2)) ** 0.5)))
(0.5 * (p3 - p2) * p4 / ((((x1 - p1) ** 2) + (p4 ** 2)) ** 0.5))
1. ;
dval = dval ET dhdp ;
FIN b1 ;
SINON ;
FINSI ;
FINP ;
* Choix des points connus (Xi,Hi)
* ici on prend des points definits exactement par la fonction h
* avec comme parametres pref
pref
= PROG 8.
1.
6.
1.
14.
;xmes
= PROG 2. 'PAS'
2.
20.
;hmes = H xmes pref 'VISU' ;
**************** Cas n°1 : optimisation sans contrainte ****************
MESS '
***** OPTIMISATION SANS CONTRAINTE
*****'
; * Valeurs initiales p0
p0
= PROG 0.1 0.1 0.1 0.1 0.1 ;
* Bornes min/max pour p (ici on ne contraint pas vraiment)
pmin
= PROG -50.
-50.
-50.
0.
-50.
;pmax
= PROG 50.
50.
50.
50.
50.
;
* Optimisation
SI itrac ;
xplot
= PROG 0. 'PAS'
0.01 25.
; p mse lp
= MOCA_MMA 'X0' p0 'ABSC' xmes '
ORDO' hmes 'PROC'
(MOT 'H'
) 'XMIN' pmin 'XMAX' pmax 'ECHO' 2 'VISU' xplot ;
SINON ;
p mse lp
= MOCA_MMA 'X0' p0 'ABSC' xmes '
ORDO' hmes 'PROC'
(MOT 'H'
) 'XMIN' pmin 'XMAX' pmax 'ECHO' 2 ;
FINSI ;
* Historique des parametres
SI itrac ;
l1hist
= l1hist
ET (EXTR lp1
1) ; l2hist
= l2hist
ET (EXTR lp1
2) ; l3hist
= l3hist
ET (EXTR lp1
3) ; l4hist
= l4hist
ET (EXTR lp1
4) ; l5hist
= l5hist
ET (EXTR lp1
5) ; FIN b1 ;
SI itrac ;
nit
= (DIME l1hist
) - 1 ; lit
= LECT 0 'PAS'
1 nit
; evmse
= EVOL 'ROUG' '
MANU' 'Iteration' lit 'Erreur S
(x
)' mse
; DESS evmse '
TITR' 'Erreur quadratique VS Iterations'
; ev1
= EVOL 'ROUG' '
MANU' 'LEGE' 'p1 calcule' 'Iteration' lit 'Parametres' l1hist
; ev2
= EVOL 'ORAN' '
MANU' 'LEGE' 'p2 calcule' 'Iteration' lit 'Parametres' l2hist
; ev3
= EVOL 'VERT' '
MANU' 'LEGE' 'p3 calcule' 'Iteration' lit 'Parametres' l3hist
; ev4
= EVOL 'BLEU' '
MANU' 'LEGE' 'p4 calcule' 'Iteration' lit 'Parametres' l4hist
; ev5
= EVOL 'VIOL' '
MANU' 'LEGE' 'p5 calcule' 'Iteration' lit 'Parametres' l5hist
; ev1r
= EVOL 'ROUG' '
MANU' 'LEGE' 'p1 ref.' 'STYL' 'TIRR' 'Iteration'
(PROG 0.
nit) 'Parametres'
(PROG p1ref p1ref
) ; ev2r
= EVOL 'ORAN' '
MANU' 'LEGE' 'p2 ref.' 'STYL' 'TIRR' 'Iteration'
(PROG 0.
nit) 'Parametres'
(PROG p2ref p2ref
) ; ev3r
= EVOL 'VERT' '
MANU' 'LEGE' 'p3 ref.' 'STYL' 'TIRR' 'Iteration'
(PROG 0.
nit) 'Parametres'
(PROG p3ref p3ref
) ; ev4r
= EVOL 'BLEU' '
MANU' 'LEGE' 'p4 ref.' 'STYL' 'TIRR' 'Iteration'
(PROG 0.
nit) 'Parametres'
(PROG p4ref p4ref
) ; ev5r
= EVOL 'VIOL' '
MANU' 'LEGE' 'p5 ref.' 'STYL' 'TIRR' 'Iteration'
(PROG 0.
nit) 'Parametres'
(PROG p5ref p5ref
) ; DESS (ev1
ET ev1r
ET ev2
ET ev2r
ET ev3
ET ev3r
ET ev4
ET ev4r
ET ev5
ET ev5r
) '
TITR' 'Parametres VS Iterations' 'LEGE'
; FINSI ;
FINSI ;
* Bilan et verification du resultat de l'optimisation
err2
= MAXI '
ABS'
((p
- pref
) / pref
) ;MESS 'Erreur quadratique finale
=' err1
; MESS 'Erreur sur les parametres finaux
=' err2
; ierr = (err1 > 1.E-10) OU (err2 > 1.E-7) ;
SI ierr ;
FINSI ;
**************** Cas n°2 : optimisation avec contraintes ***************
MESS '
***** OPTIMISATION AVEC CONTRAINTE
*****'
; * Procedure pour calculer les fonctions contraintes gi(p) ainsi que les
* derivees partielles des fonctions gi selon chaque composante de p
DEBP G p*'LISTREEL' ;
g0
= PROG (p3
- p2
+ 5.
) ; dg0
= ENUM
(PROG 0.
-1.
1.
0.
0.
) ;FINP g0 dg0 ;
* Valeurs initiales p0
p0
= PROG 20.
0.
25.
0.5 0.
;
* Bornes min/max pour p
pmin
= PROG 7.
-50.
0.
0.
-50.
;pmax
= PROG 50.
50.
50.
1.
50.
;
* Optimisation
SI itrac ;
xplot
= PROG 0. 'PAS'
0.01 25.
; p mse lp
= MOCA_MMA 'X0' p0 'ABSC' xmes '
ORDO' hmes 'PROC'
(MOT 'H'
) 'XMIN' pmin 'XMAX' pmax 'ECHO'
2 '
CONT'
(MOT 'G'
) 'VISU' xplot
;SINON ;
p mse lp
= MOCA_MMA 'X0' p0 'ABSC' xmes '
ORDO' hmes 'PROC'
(MOT 'H'
) 'XMIN' pmin 'XMAX' pmax 'ECHO'
2 '
CONT'
(MOT 'G'
) ;FINSI ;
* Historique des parametres
SI itrac ;
l1hist
= l1hist
ET (EXTR lp1
1) ; l2hist
= l2hist
ET (EXTR lp1
2) ; l3hist
= l3hist
ET (EXTR lp1
3) ; l4hist
= l4hist
ET (EXTR lp1
4) ; l5hist
= l5hist
ET (EXTR lp1
5) ; FIN b1 ;
SI itrac ;
nit
= (DIME l1hist
) - 1 ; lit
= LECT 0 'PAS'
1 nit
; evmse
= EVOL 'ROUG' '
MANU' 'Iteration' lit 'Erreur S
(x
)' mse
; DESS evmse '
TITR' 'Erreur quadratique VS Iterations'
; ev1
= EVOL 'ROUG' '
MANU' 'LEGE' 'p1 calcule' 'Iteration' lit 'Parametres' l1hist
; ev2
= EVOL 'ORAN' '
MANU' 'LEGE' 'p2 calcule' 'Iteration' lit 'Parametres' l2hist
; ev3
= EVOL 'VERT' '
MANU' 'LEGE' 'p3 calcule' 'Iteration' lit 'Parametres' l3hist
; ev4
= EVOL 'BLEU' '
MANU' 'LEGE' 'p4 calcule' 'Iteration' lit 'Parametres' l4hist
; ev5
= EVOL 'VIOL' '
MANU' 'LEGE' 'p5 calcule' 'Iteration' lit 'Parametres' l5hist
; DESS (ev1
ET ev2
ET ev3
ET ev4
ET ev5
) '
TITR' 'Parametres VS Iterations' 'LEGE'
; FINSI ;
FINSI ;
* Bilan et verification du resultat de l'optimisation
MESS 'Erreur quadratique finale
=' err1
;
* Fin du cas test
SI (NON ierr) ;
MESS 'Cas test passe avec succes !'
; FINSI ;
FIN ;