Changeset 27766


Ignore:
Timestamp:
05/19/23 08:08:54 (22 months ago)
Author:
Mathieu Morlighem
Message:

CHG: adding new field to m1qn3 inversions (initial cost function reduction)

Location:
issm/trunk-jpl/src/m/classes
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/adm1qn3inversion.m

    r22515 r27766  
    1010                maxiter                     = 0
    1111                dxmin                       = 0
     12                dfmin_frac                  = 0
    1213                gttol                       = 0
    1314
     
    3839
    3940                        %m1qn3 parameters
    40                         self.dxmin  = 0.1;
    41                         self.gttol = 1e-4;
     41                        self.dxmin      = 0.1;
     42                        self.dfmin_frac = 1.;
     43                        self.gttol      = 1e-4;
    4244
    4345                end % }}}
     
    5557                        md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0);
    5658                        md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
     59         md = checkfield(md,'fieldname','inversion.dfmin_frac','numel',1,'>=',0., '<=', 1.);
    5760                        md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0);
    5861
     
    6467                        fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)');
    6568                        fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');
     69         fielddisplay(self,'dfmin_frac','expected reduction of J during the first step (e.g., 0.3=30% reduction in cost function)');
    6670                        fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');
    6771                end % }}}
     
    7680                        WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
    7781                        WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
     82         WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dfmin_frac','format','Double');
    7883                        WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
    7984
     
    8590                        writejsdouble(fid,[modelname '.inversion.maxiter'],self.maxiter);
    8691                        writejsdouble(fid,[modelname '.inversion.dxmin'],self.dxmin);
     92         writejsdouble(fid,[modelname '.inversion.dfmin_frac'],self.dfmin_frac);
    8793                        writejsdouble(fid,[modelname '.inversion.gttol'],self.gttol);
    8894
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.m

    r25421 r27766  
    1313                maxiter                     = 0
    1414                dxmin                       = 0
     15                dfmin_frac                  = 0
    1516                gttol                       = 0
    1617                cost_functions              = NaN
     
    6667
    6768                        %m1qn3 parameters
    68                         self.dxmin  = 0.1;
    69                         self.gttol = 1e-4;
     69                        self.dxmin      = 0.1;
     70                        self.dfmin_frac = 1;
     71                        self.gttol      = 1e-4;
    7072
    7173                end % }}}
     
    8890                        md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0);
    8991                        md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
     92         md = checkfield(md,'fieldname','inversion.dfmin_frac','numel',1,'>=',0,'<=',1);
    9093                        md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0);
    9194                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
     
    115118                        fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)');
    116119                        fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');
     120         fielddisplay(self,'dfmin_frac','expected reduction of J during the first step (e.g., 0.3=30% reduction in cost function)');
    117121                        fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');
    118122                        fielddisplay(self,'cost_functions','indicate the type of response for each optimization step');
     
    148152                        WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
    149153                        WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
     154         WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dfmin_frac','format','Double');
    150155                        WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
    151156                        WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
     
    184189                        writejsdouble(fid,[modelname '.inversion.maxiter'],self.maxiter);
    185190                        writejsdouble(fid,[modelname '.inversion.dxmin'],self.dxmin);
     191         writejsdouble(fid,[modelname '.inversion.dfmin_frac'],self.dfmin_frac);
    186192                        writejsdouble(fid,[modelname '.inversion.gttol'],self.gttol);
    187193                        writejs2Darray(fid,[modelname '.inversion.cost_functions'],self.cost_functions);
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.py

    r27458 r27766  
    1919        if not len(args):
    2020            print('empty init')
    21             self.iscontrol = 0
    22             self.incomplete_adjoint = 0
    23             self.control_parameters = np.nan
    24             self.control_scaling_factors = np.nan
    25             self.maxsteps = 0
    26             self.maxiter = 0
    27             self.dxmin = 0.
    28             self.gttol = 0.
    29             self.cost_functions = np.nan
     21            self.iscontrol                   = 0
     22            self.incomplete_adjoint          = 0
     23            self.control_parameters          = np.nan
     24            self.control_scaling_factors     = np.nan
     25            self.maxsteps                    = 0
     26            self.maxiter                     = 0
     27            self.dxmin                       = 0.
     28            self.dfmin_frac                  = 0.
     29            self.gttol                       = 0.
     30            self.cost_functions              = np.nan
    3031            self.cost_functions_coefficients = np.nan
    31             self.min_parameters = np.nan
    32             self.max_parameters = np.nan
    33             self.vx_obs = np.nan
    34             self.vy_obs = np.nan
    35             self.vz_obs = np.nan
    36             self.vel_obs = np.nan
    37             self.thickness_obs = np.nan
     32            self.min_parameters              = np.nan
     33            self.max_parameters              = np.nan
     34            self.vx_obs                      = np.nan
     35            self.vy_obs                      = np.nan
     36            self.vz_obs                      = np.nan
     37            self.vel_obs                     = np.nan
     38            self.thickness_obs               = np.nan
    3839
    3940            self.setdefaultparameters()
     
    7172        s += '{}\n'.format(fielddisplay(self, 'maxiter', 'maximum number of Function evaluation (forward run)'))
    7273        s += '{}\n'.format(fielddisplay(self, 'dxmin', 'convergence criterion: two points less than dxmin from eachother (sup - norm) are considered identical'))
     74        s += '{}\n'.format(fielddisplay(self, 'dfmin_frac', 'expected reduction of J during the first step (e.g., 0.3=30% reduction in cost function)'))
    7375        s += '{}\n'.format(fielddisplay(self, 'gttol', '||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)'))
    7476        s += '{}\n'.format(fielddisplay(self, 'cost_functions', 'indicate the type of response for each optimization step'))
     
    108110        #m1qn3 parameters
    109111        self.dxmin = 0.1
     112        self.dfmin_frac = 1.
    110113        self.gttol = 1e-4
    111114
     
    142145        md = checkfield(md, 'fieldname', 'inversion.maxiter', 'numel', [1], '>=', 0)
    143146        md = checkfield(md, 'fieldname', 'inversion.dxmin', 'numel', [1], '>', 0.)
     147        md = checkfield(md, 'fieldname', 'inversion.dfmin_frac', 'numel', [1], '>=', 0., '<=', 1.)
    144148        md = checkfield(md, 'fieldname', 'inversion.gttol', 'numel', [1], '>', 0.)
    145149        md = checkfield(md, 'fieldname', 'inversion.cost_functions', 'size', [num_costfunc], 'values', supportedcostfunctions())
     
    169173        WriteData(fid, prefix, 'object', self, 'class', 'inversion', 'fieldname', 'maxiter', 'format', 'Integer')
    170174        WriteData(fid, prefix, 'object', self, 'class', 'inversion', 'fieldname', 'dxmin', 'format', 'Double')
     175        WriteData(fid, prefix, 'object', self, 'class', 'inversion', 'fieldname', 'dfmin_frac', 'format', 'Double')
    171176        WriteData(fid, prefix, 'object', self, 'class', 'inversion', 'fieldname', 'gttol', 'format', 'Double')
    172177        WriteData(fid, prefix, 'object', self, 'class', 'inversion', 'fieldname', 'cost_functions_coefficients', 'format', 'DoubleMat', 'mattype', 1)
Note: See TracChangeset for help on using the changeset viewer.