* Bug #8190 fixed - Optimization: Fixed ICSE demos
[scilab.git] / scilab / modules / optimization / demos / icse / lqv.sce
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 // Copyright (C) 2010 - DIGITEO - Yann COLLETTE
5 // Copyright (C) 2010 - DIGITEO - Allan CORNET
6 //
7 // This file is distributed under the same license as the Scilab package.
8 //
9
10 //                     lqv.bas : demo of icse
11 //  *************************************************************
12 //
13
14 function demo_lqv()
15
16     cd "SCI/modules/optimization/demos/icse/"
17
18     libn  = ilib_for_link("icsez0","icsez0.f",[],"f")
19     nlink = link("./"+libn,"icsez0","f")
20
21     exec("icsecontexte.sce");  // context
22
23     t0   = 0;     // instant initial
24     tf   = 20;    // instant final
25     dti  = 1;     // premier pas de temps
26     dtf  = 1;     // second pas de temps
27     ermx = 1.d-6; // test d'arret absolu sur la valeur du second membre dans la resolution de l'etat
28     iu = [0,0,1]; //  iu   :indications sur la structure du controle
29     //    iu(1)=1 si l'etat initial depend du controle constant,0 sinon
30     //    iu(2)=1 si l'etat initial depend du controle variable,0 sinon
31     //    iu(3)=1 si le second membre depend du controle constant,0 sinon
32     nuc  = 5;     // nombre de parametres independants du temps
33     nuv  = 1;     // nombre de parametres dependants du temps
34     ilin = 2;     // indicateur de linearite :
35     // 0 pour un systeme non affine
36     // 1 pour un systeme affine dont la partie lineaire n'est pas autonome
37     // 2 pour un systeme affine dont la partie lineaire est autonome
38     nti = 10;     // nombre de pas de temps correspondant a dti (premier pas de temps)
39     ntf = 10;     // nombre de pas de temps correspondant a dtf (second pas de temps)
40     // si l'on utilise un seul pas de temps, on doit prendre ntf=0
41     ny   = 4;     // dimension de l'etat a un instant donne
42     nea  = 0;     // nombre d'equations algebriques (eventuellement nul)
43     itmx = 10;    // nombre maximal d'iterations dans la resolution de l'equation d'etat discrete a un pas de temps donne
44     nex = 1;      // nombre d'experiences effectuees
45     nob = 2;      // dimension du vecteur des mesures pour une experience donnee en un instant donne
46     ntob  = 10;   // nombre d'instants de mesure pour une experience donnee
47     ntobi = 5;    // nombre d'instants de mesure correspondant a dti (premier pas de temps)
48
49     nu = nuc + nuv * (nti + ntf + 1); // dimension du vecteur des parametres de controle
50
51     //  uc(1,nuc)          :controle constant
52     uc = 100*ones(1,nuc);
53
54     //  uv(1,nuv*(nti+ntf+1)):controle variable
55     if nuv>0 then uv(1,nuv*(nti+ntf+1))=0; end;
56
57     //  itu(1,nitu)        :tableau de travail entier reserve a l'utilisateur
58     itu = [0];
59
60     //  dtu(1,ndtu)        :tableau de travail double precision reserve a l'utilisateur
61     dtu = [0];
62
63     //  y0(ny)             :etat initial (valeur arbitraire si iu(1) ou iu(2) est non nul)
64     y0 = ones(1,ny);
65
66     //  tob(1,ntob)        :instants de mesure (compatibilite avec ntob et ntobi)
67     tob  = 2*(1:10);
68     binf = -10*ones(1,nu); // borne inf des parametres
69     bsup =     ones(1,nu); // borne sup des parametres
70
71     //  termes utiles pour une dynamique lineaire ou une observation quadratique
72     b(1,ny) = 0;                    // terme constant d'une dynamique lineaire
73     fy      = 0.1*ones(ny,ny);      // derivee de la dynamique par rapport a l'etat
74     fu       =    ones(ny,nuc+nuv); // derivee de la dynamique par rapport au controle
75
76     obs(nob,ny) = 0; // matrice d'observation
77     obs         = ones(nob,ny);
78
79     don=0*ones(1,nex*ntob*nob);
80
81     nap   = 20;  // nombre d'appels du simulateur
82     imp   = 2;   // niveau de debug pour optim
83     large = 100; // taille de nu au dela de laquelle on choisit un optimiseur
84     // pour les problemes de grande taille (alg='gc' dans l'appel de optim)
85
86     saveFormat = format();
87
88     exec("icseinit.sce");
89
90     exec("icse.sci");
91     exec("icsegen.sci");
92
93     [co, u, g, itv, dtv] = icse(u, "icsemc", nap, imp);
94
95     disp(u', "Best value:")
96     disp(co, "Final cost:")
97
98     deletefile("libicsez0.so");
99     deletefile("loader.sce");
100     deletefile("cleaner.sce");
101
102     format(saveFormat(1, $:-1:1));
103
104 endfunction
105
106 demo_lqv();
107 clear demo_lqv;
108