be83daeb3f055ed877236caaf1661e4b4b458c6a
[scilab.git] / scilab / modules / optimization / tests / unit_tests / optim_costflist.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA - Michael Baudin
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 //
7 // optim_costflist.tst --
8 //   Test the optim command in the case where the cost function is a list.
9 //
10 //
11 // In the following case, costf is equal to list(sipn,sip2,ne,nc,cpen)
12 // where sipn is a function.
13 // The case is even more complex, since the 3d argument
14 // of sipn is the dummy argument sip1, which is, in turn,
15 // a function which real value is sip2.
16 // penalization (see doc)
17 //
18 // min (x1^2 +x2^2)/2 ; x1>=0, x1 + x2 =1 (solution [0.5 0.5] )
19 function [f,g,ind]=sip2(x,ind)
20   f= [ x(1)+x(2)-1, -x(1), (x(1)^2+x(2)^2)/2]
21   g= [ 1, -1, x(1); 1,  0, x(2)]
22 endfunction
23 cpen=50;
24 ne=1;
25 nc=2;
26 bi=[0 0];
27 bs=[2 2];
28 function [fpen,gpen,ind]=sipn(x,ind,sip1,ne,nc,cpen)
29   [f,g,indic]=sip1(x,ind)
30   if indic < 0 then
31     ind=indic
32     return
33   end
34   if nc >ne then
35     for i=ne+1:nc
36       f(i)=max([0 f(i)])
37     end
38   end
39   fpen=f(nc+1) + cpen*norm(f(1:nc))^2/2';
40   if ind==2 then
41     return
42   end
43   gpen=g(:,nc+1)
44   if ne > 0 then
45     for i=1:ne
46       gpen=gpen + cpen*f(i)*g(:,i)
47     end
48   end
49   if nc > ne then
50     for i=ne+1:nc
51       if f(i) > 0 then
52          gpen=gpen + cpen*f(i)*g(:,i)
53       end
54     end
55   end;
56 endfunction
57 [f,x,g]=optim(list(sipn,sip2,ne,nc,cpen),...
58               'b',bi,bs,[1 1],'ar',20,20,1.e-15);
59 if norm(x-[0.5 0.5]) + norm(g) > 0.1 then bugmes();quit;end