1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008-2009 - INRIA - Michael Baudin
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 //
11 // optimsimplex_pfeffer --
12 //   Configure the current simplex so that it is computed from Pfeffer's method,
13 //   i.e. a relative delta for non-zero values and an absolute delta
14 //   for zero values.
15 // Arguments
16 //   x0 : the initial point, as a row vector
17 //   fun : name of the function
18 //   deltausual : the absolute delta for non-zero values
19 //   deltazero : the absolute delta for zero values
20 //   data : user-defined data
21 // References
22 //   "Global Optimization Of Lennard-Jones Atomic Clusters"
23 //   Ellen Fan, Thesis, February 26, 2002, McMaster University
24 //
25 function [ this , data ] = optimsimplex_pfeffer ( this , x0 , fun , deltausual , deltazero , data )
26    if (~isdef('deltausual','local')) then
27     deltausual = 0.05
28   end
29    if (~isdef('deltazero','local')) then
30     deltazero = 0.0075
31   end
32   n = length(x0);
33   this.n = n;
34   this.nbve = n + 1;
35   this.x = zeros ( n , n+1 )
36   this.fv = zeros ( n+1 )
37   //
38   // Set 1st point
39   //
40   this.x ( 1:n,1 ) = x0 (1:n)'
41   //
42   // Set points #2 to #n+1
43   //
44   for j = 2 : this.n+1
45     this.x ( 1:n,j ) = x0 (1:n)'
46     if x0( j-1 ) == 0.0 then
47       this.x ( j-1,j ) = deltazero
48     else
49       this.x ( j-1,j ) = this.x ( j-1,j ) + deltausual * x0( j-1 )
50     end
51   end
52   // Compute Function Value
53   if (~isdef('data','local')) then
54     this = optimsimplex_computefv ( this , fun )
55   else
56     [ this , data ] = optimsimplex_computefv ( this , fun , data )
57   end
58 endfunction