~ubuntu-branches/ubuntu/hoary/scilab/hoary

« back to all changes in this revision

Viewing changes to routines/optim/qnbd.f

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2002-03-21 16:57:43 UTC
  • Revision ID: james.westby@ubuntu.com-20020321165743-e9mv12c1tb1plztg
Tags: upstream-2.6
ImportĀ upstreamĀ versionĀ 2.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      subroutine qnbd(indqn,simul,n,x,f,g,imp,io,zero,
 
2
     & napmax,itmax,epsf,epsg,epsx,df0,binf,bsup,nfac,
 
3
     & trav,ntrav,itrav,nitrav,izs,rzs,dzs)
 
4
c!but
 
5
c     code de minimisation d une fonction reguliere sous contraintes
 
6
c     de bornes , aux normes modulopt
 
7
c!origine
 
8
c     f. bonnans , inria , 1986
 
9
c!methode
 
10
c     principe de l algorithme : quasi-newton + projection
 
11
c     details dans le rapport inria n. 242,1983
 
12
c     cette version permet de tester plusieurs variantes de l algorithme
 
13
c     en modifiant certains parametres internes (cf comment dans le code)
 
14
c     taille memoire necessaire de l ordre de n**2/2
 
15
c     pour les problemes de grande taille le code gcbd est mieux adapte
 
16
c
 
17
c!sous programmes appeles
 
18
c     zqnbd   optimiseur effectif
 
19
c     proj    projection
 
20
c     calmaj  mise a jour du hessien 
 
21
c     ajour mise a jour des facteurs de choleski 
 
22
c     rlbd,satur   recherche lineaire avec bornes
 
23
c
 
24
c!liste d'appel
 
25
c
 
26
c     subroutine qnbd(indqn,simul,n,x,f,g,imp,io,zero,
 
27
c    & napmax,itmax,epsf,epsg,epsx,df0,binf,bsup,nfac,
 
28
c    & trav,ntrav,itrav,nitrav,izs,rzs,dzs)
 
29
c
 
30
c     indqn   indicateur de qnbd                                  es
 
31
c       en entree =1 standard
 
32
c                 =2 dh et indic initialises au debut de trav et itrav
 
33
c                    ifac,f,g initialises
 
34
c       en sortie
 
35
c        si < 0 incapacite de calculer un point meilleur que le point initial
 
36
c        si = 0 arret demande par l utilisateur
 
37
c        si > 0 on fournit un point meilleur que le point de depart
 
38
c        < -10 parametres d entree non convenables
 
39
c        = -6  arret lors du calcul de la direction de descente et iter=1
 
40
c        = -5  arret lors du calcul de l approximation du hessien  iter=1
 
41
c        = -3  anomalie de simul : indic negatif en un point ou
 
42
c              f et g ont ete precedemment calcules
 
43
c        = -2  echec de la recherche lineaire a la premiere iteration
 
44
c        = -1  f non definie au point initial
 
45
c        =  1  arret sur epsg
 
46
c        =  2            epsf
 
47
c        =  3            epsx
 
48
c        =  4            napmax
 
49
c        =  5            itmax
 
50
c        =  6  pente dans la direction opposee au gradient trop petite
 
51
c        =  7  arret lors du calcul de la direction de descente
 
52
c        =  8  arret lors du calcul de l approximation du hessien
 
53
c        = 10  arret par echec de la recherche lineaire , cause non precisee
 
54
c        = 11  idem avec indsim < 0
 
55
c        = 12            un pas trop petit proche d un pas trop grand
 
56
c                        ceci peut resulter d une erreur dans le gradient
 
57
c        = 13            trop grand nombre d appels dans une recherche lineaire
 
58
c     simul voir les normes modulopt
 
59
c     n dim de x                                                 e
 
60
c     binf,bsup bornes inf,sup,de dim n                          e
 
61
c     x variables a optimiser (controle)                          es
 
62
c     f valeur du critere                                         s
 
63
c     g gradient de f                                             s
 
64
c     zero  proche zero machine                                             e
 
65
c     napmax nombre maximum d appels de simul                               e
 
66
c     itmax nombre maximum d iterations de descente               e
 
67
c     itrav vect travail dim nitrav=2n , se decompose en indic et izig
 
68
c     nfac nombre de variables factorisees                  (e si indqn=2)  s
 
69
c     imp facteur d impression                                              e
 
70
c         varie de 0 (pas d impressions) a 3 (nombreuses impressions)
 
71
c     io numero du fichier de resultats                                     e
 
72
c     epsx vect dim n precision sur x                                       e
 
73
c     epsf critere arret sur f                                              e
 
74
c     epsg arret si sup a norm2(g+)/n                                       e
 
75
c     trav vect travail dim ntrav
 
76
c     il faut ntrav > n(n+1)/2 +6n
 
77
c     df0>0 decroissance f prevue     (prendre 1. par defaut)               e
 
78
c     izs,rzs,dzs : cf normes modulopt                                     es
 
79
c!
 
80
c     indications sur les variables internes a qnbd et zqnbd
 
81
c     izig  sert a la memorisation des contraintes (actif si izag>1)
 
82
c     si i ne change pas d ens on enleve 1 a izig  (positif)
 
83
c     sinon on ajoute izag
 
84
c     factorisation seulement si izig est nul
 
85
c     dh estimation hessien dim n(n+1)/2 rangee en troismorceaux es
 
86
c     indic(i) nouvel indice de l indice i
 
87
c     indic vect dim n ordre de rangement des indices                       es
 
88
c     pas necessaire de l initialiser si indqn=1
 
89
c
 
90
c     parametres de la recherche lineaire
 
91
c     amd,amf param. du test de wolfe .    (.7,.1)
 
92
c     napm nombre max d appels dans la rl  (=15)
 
93
c
 
94
      implicit double precision (a-h,o-z)
 
95
      real rzs(*)
 
96
      double precision dzs(*)
 
97
      dimension binf(n),bsup(n),x(n),g(n),epsx(n)
 
98
      dimension trav(ntrav),itrav(nitrav),izs(*)
 
99
      external simul
 
100
c
 
101
      if(imp.ge.1)write(io,1010)
 
102
1010  format(' *********** qnbd ****************')
 
103
c
 
104
c
 
105
c     parametres caracteristiques de l algorithme
 
106
c     si les parametres sont nuls l algorithme est celui du rr 242
 
107
c     ig=1 test sur grad(i) pour relach var
 
108
c     in=1 limite le nombre de factorisations par iter a n/10
 
109
c     irel=1 test sur decroissance grad pour rel a iter courante
 
110
c     epsrel taux de decroissance permettant le relachement (cf irit)
 
111
c     iact blocage variables dans ib (gestion contraintes actives)
 
112
c     ieps1 =1 eps1 egal a zero
 
113
c     note eps1 correspond a eps(xk)
 
114
      ig=0
 
115
      in=0
 
116
      irel=1
 
117
      epsrel=.50d+0
 
118
      izag=0
 
119
      iact=1
 
120
      ieps1=0
 
121
c
 
122
c     decoupage du vecteur trav
 
123
      n1=(n*(n+1))/2 +1
 
124
      n2=n1+n
 
125
      n3=n2+n
 
126
      n4=n3+n
 
127
      n5=n4+n-1
 
128
      if(ntrav.lt.n5) then
 
129
         if(imp.gt.0)write(io,110)ntrav,n5
 
130
110      format(' qnbd : ntrav=',i8,' devrait valoir ',i8)
 
131
         indqn=-11
 
132
         return
 
133
      endif
 
134
      ni1=n+1
 
135
      if(nitrav.lt.2*n) then
 
136
         ni2=2*n
 
137
         if(imp.gt.0)write(io,111)nitrav,ni2
 
138
111      format(' qnbd : nitrav=',i8,'devrait valoir',i8)
 
139
         indqn=-12
 
140
         return
 
141
      endif
 
142
      call zqnbd(indqn,simul,trav(1),n,binf,bsup,x,f,g,zero,napmax,
 
143
     &itmax,itrav,itrav(ni1),nfac,imp,io,epsx,epsf,epsg,trav(n1),
 
144
     &trav(n2),trav(n3),trav(n4),df0,ig,in,irel,izag,iact,
 
145
     &epsrel,ieps1,izs,rzs,dzs)
 
146
      return
 
147
      end