Changeset 22836


Ignore:
Timestamp:
06/11/18 09:58:30 (7 years ago)
Author:
erobo
Message:

CHG: record best controls during optimization and allow for differnt sized controls

Location:
issm/trunk-jpl/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp

    r22829 r22836  
    8484        int           JlistN       = input_struct->N;
    8585        int*          Jlisti       = input_struct->i;
     86        IssmPDouble* X_best                     = input_struct->X_best;
     87        IssmPDouble* G_best                     = input_struct->G_best;
    8688        IssmPDouble*  J_best       = input_struct->J_best;
    87         IssmPDouble*  X_best                    = input_struct->X_best;
    88         IssmPDouble*  G_best                    = input_struct->G_best;
    8989        int           intn         = (int)*n;
    9090
     
    166166                }
    167167        }
     168        if(my_rank==0){
     169                if(*J_best<0 || J<*J_best){
     170                        *J_best = reCast<IssmPDouble>(J);
     171                        for(int i=0;i<intn;i++){
     172                                X_best[i] = reCast<IssmPDouble>(X[i]);
     173                                G_best[i] = reCast<IssmPDouble>(G[i]);
     174                        }
     175                }
     176}
    168177
    169178        /*Turning off trace tape*/
     
    298307        Jlist[(*Jlisti)*JlistN+num_responses] = reCast<IssmPDouble>(J);
    299308
    300        
    301         if(*J_best<0 || J<*J_best){
    302                 *J_best = reCast<IssmPDouble>(J);
    303                 for(int i=0;i<intn;i++){
    304                         X_best[i] = reCast<IssmPDouble>(X[i]);
    305                         G_best[i] = reCast<IssmPDouble>(G[i]);
    306                 }
    307         }
    308 
    309309/*
    310310        IssmDouble* test = xNew<IssmDouble>(intn);
     
    351351        _printf0_("\n");
    352352
     353        input_struct->X_best = X_best;
     354        input_struct->G_best = G_best;
     355        input_struct->J_best = J_best;
     356       
    353357        /*Clean-up and return*/
    354358        *Jlisti = (*Jlisti) +1;
     
    450454        mystruct.X_best = xNewZeroInit<IssmPDouble>(intn);
    451455        mystruct.G_best   = xNewZeroInit<IssmPDouble>(intn);
     456        *mystruct.J_best = -10.;
    452457        /*Initialize Gradient and cost function of M1QN3*/
    453458        indic = 4; /*gradient required*/
     
    490495        }
    491496       
    492         IssmDouble* aX_best = NULL;
    493         IssmDouble* aG_best = NULL;
    494 
    495         femmodel->parameters->FindParam(&aX_best,NULL,InversionXBestEnum);
    496         femmodel->parameters->FindParam(&aG_best,NULL,InversionGBestEnum);
    497        
    498497        /*Set X as our new control*/
    499498        IssmDouble* aX=xNew<IssmDouble>(intn);
     
    505504                aX[i] = reCast<IssmDouble>(X[i]);
    506505                aG[i] = reCast<IssmDouble>(G[i]);
    507                 X_best[i] = reCast<double>(aX_best[i]);
    508                 G_best[i] = reCast<double>(aG_best[i]);
     506                X_best[i] = reCast<double>(mystruct.X_best[i]);
     507                G_best[i] = reCast<double>(mystruct.G_best[i]);
    509508                }
    510509
  • issm/trunk-jpl/src/m/classes/autodiff.m

    r22744 r22836  
    125125                                types=zeros(num_independent_objects,1);
    126126
     127                                max_parameters_pre = [];
     128                                min_parameters_pre = [];
     129                                M_size = false;
     130                                for i=1:num_independent_objects,
     131                                        indep=self.independents{i};
     132                                        if M_size == false && indep.control_size>1
     133                                                M_size = true;
     134                                        end
     135                                end
     136
    127137                                for i=1:num_independent_objects,
    128138                                        indep=self.independents{i};
     
    130140                                        names{i}=indep.name;
    131141                                        types(i)=indep.typetoscalar();
    132                                         min_parameters(:,:,i)=indep.min_parameters;
    133                                         max_parameters(:,:,i)=indep.max_parameters;
     142                                        size(indep.min_parameters)
     143                                        if indep.control_size == 1 && M_size == true
     144                                                indep.min_parameters = [indep.min_parameters;NaN];
     145                                                indep.max_parameters = [indep.max_parameters;NaN];
     146                                        end
     147                                        min_parameters_pre=[min_parameters_pre,indep.min_parameters];
     148                                        max_parameters_pre=[max_parameters_pre,indep.max_parameters];
    134149                                        scaling_factors(i)=indep.control_scaling_factor;
    135150                                        control_sizes(i) = indep.control_size;
    136151
    137152                                end
     153
     154                                size(max_parameters_pre)
     155                                max_parameters=reshape(max_parameters_pre,size(max_parameters_pre,1),sum(control_sizes));
     156                                min_parameters=reshape(min_parameters_pre,size(min_parameters_pre,1),sum(control_sizes));
     157
     158                                size(max_parameters)
    138159                                WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','StringArray');
    139160                                WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3);
Note: See TracChangeset for help on using the changeset viewer.