Show
Ignore:
Timestamp:
09/21/11 20:35:02 (13 years ago)
Author:
sindj
Message:

Dodelavani toho zatracenyho samplingu. JS

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/robust/robustlib.h

    r1394 r1395  
    7676 
    7777        double probability; 
     78 
     79        double volume; 
    7880 
    7981        vector<multimap<double,double>> positive_gamma_parameters; 
     
    22372239        { 
    22382240                double sigma = 0; 
    2239                 double pg_sum; 
    2240                 double ng_sum; 
    2241                 do 
    2242                 {                        
    2243                         double rnumber = randu(); 
    2244                          
    2245                                                  
    2246                         double sum_g = 0; 
    2247                         for(int i = 0;i<sampled_simplex->positive_gamma_parameters.size();i++) 
    2248                         { 
    2249                                 for(multimap<double,double>::iterator g_ref = sampled_simplex->positive_gamma_parameters[i].begin();g_ref != sampled_simplex->positive_gamma_parameters[i].end();g_ref++) 
    2250                                 { 
    2251                                         sum_g += (*g_ref).first/sampled_simplex->positive_gamma_sum; 
    2252  
    2253                                                                  
    2254                                         if(sum_g>rnumber) 
    2255                                         { 
    2256                                                 //itpp::Gamma_RNG* gamma = new itpp::Gamma_RNG(conditions.size()-number_of_parameters,1/(*g_ref).second); 
    2257                                                 //sigma = 1/(*gamma)(); 
    2258                                                  
    2259                                                 // TODO: Tady je chyba, musi zaviset i na parametru order, coz je tady i, ale nevim, jestli +i 
    2260                                                 // nebo -i 
    2261                                                 GamRNG.setup(conditions.size()-number_of_parameters+3,(*g_ref).second); 
    2262                                                                                                                                          
    2263                                                 sigma = 1/GamRNG(); 
    2264  
    2265                                                 // cout << "Sigma mean:   " << (*g_ref).second/(conditions.size()-number_of_parameters-1) << endl;                                                               
    2266                                                 break; 
    2267                                         }                                                        
    2268                                 } 
    2269  
    2270                                 if(sigma!=0) 
    2271                                 { 
     2241                double pg_sum;                                   
     2242                double rnumber = randu();                        
     2243                                         
     2244                double sum_g = 0; 
     2245                for(int i = 0;i<sampled_simplex->positive_gamma_parameters.size();i++) 
     2246                { 
     2247                        for(multimap<double,double>::iterator g_ref = sampled_simplex->positive_gamma_parameters[i].begin();g_ref != sampled_simplex->positive_gamma_parameters[i].end();g_ref++) 
     2248                        { 
     2249                                sum_g += (*g_ref).first/sampled_simplex->positive_gamma_sum; 
     2250 
     2251                                                         
     2252                                if(sum_g>rnumber) 
     2253                                {                                        
     2254                                        GamRNG.setup(condition_order-number_of_parameters-1+i,1/(*g_ref).second); 
     2255                                                                                                                                 
     2256                                        sigma = 1/GamRNG(); 
     2257                                        // cout << "Sigma mean:   " << (*g_ref).second/(conditions.size()-number_of_parameters-1) << endl;                                                               
     2258 
    22722259                                        break; 
    2273                                 } 
     2260                                }                                                        
    22742261                        } 
    22752262 
    2276                         rnumber = randu(); 
    2277  
    2278                         pg_sum = 0; 
    2279                         for(vector<multimap<double,double>>::iterator v_ref = sampled_simplex->positive_gamma_parameters.begin();v_ref!=sampled_simplex->positive_gamma_parameters.end();v_ref++) 
    2280                         { 
    2281                                 for(multimap<double,double>::iterator pg_ref = (*v_ref).begin();pg_ref!=(*v_ref).end();pg_ref++) 
    2282                                 { 
    2283                                         pg_sum += exp((sampled_simplex->min_beta-(*pg_ref).second)/sigma)*pow((*pg_ref).second/sigma,(int)conditions.size())*(*pg_ref).second/fact(conditions.size())*(*pg_ref).first; 
    2284                                 }                                        
     2263                        if(sigma!=0) 
     2264                        { 
     2265                                break; 
    22852266                        } 
    2286  
    2287                         ng_sum = 0; 
    2288                         for(vector<multimap<double,double>>::iterator v_ref = sampled_simplex->negative_gamma_parameters.begin();v_ref!=sampled_simplex->negative_gamma_parameters.end();v_ref++) 
    2289                         { 
    2290                                 for(multimap<double,double>::iterator ng_ref = (*v_ref).begin();ng_ref!=(*v_ref).end();ng_ref++) 
    2291                                 { 
    2292                                         ng_sum += exp((sampled_simplex->min_beta-(*ng_ref).second)/sigma)*pow((*ng_ref).second/sigma,(int)conditions.size())*(*ng_ref).second/fact(conditions.size())*(*ng_ref).first; 
    2293                                 }                                        
     2267                }        
     2268 
     2269                pg_sum = 0; 
     2270                int i = 0; 
     2271                for(vector<multimap<double,double>>::iterator v_ref = sampled_simplex->positive_gamma_parameters.begin();v_ref!=sampled_simplex->positive_gamma_parameters.end();v_ref++) 
     2272                { 
     2273                        for(multimap<double,double>::iterator pg_ref = (*v_ref).begin();pg_ref!=(*v_ref).end();pg_ref++) 
     2274                        { 
     2275                                pg_sum += exp(-(*pg_ref).second/sigma)*pow((*pg_ref).second/sigma,condition_order-number_of_parameters-1+i)/sigma/fact(condition_order-number_of_parameters-1+i)*(*pg_ref).first;  // pg_sum += exp((sampled_simplex->min_beta-(*pg_ref).second)/sigma)*pow((*pg_ref).second/sigma,(int)conditions.size())*(*pg_ref).second/fact(conditions.size())*(*pg_ref).first; 
    22942276                        } 
    2295                 } 
    2296                 while(pg_sum-ng_sum<0); 
    2297  
    2298                 return pair<double,double>((pg_sum-ng_sum)/pg_sum,sigma); 
     2277 
     2278                        i++; 
     2279                }        
     2280 
     2281                return pair<double,double>(sum_g/pg_sum,sigma); 
    22992282        } 
    23002283 
     
    26562639 
    26572640                        double exponent = extended_coords*condition_and_simplex.first; 
    2658                         double sample_prob = 1/condition_and_simplex.second->probability/pow(probability_and_sigma.second,(int)conditions.size()-number_of_parameters+3)*exp((-1)/probability_and_sigma.second*exponent); 
    2659                         sample_prob *= probability_and_sigma.first; 
     2641                        double sample_prob = 1*condition_and_simplex.second->volume/condition_and_simplex.second->probability/pow(2*probability_and_sigma.second,condition_order)*exp(-exponent/probability_and_sigma.second)*probability_and_sigma.first;                       
    26602642 
    26612643                        sample_coords.ins(sample_coords.size(),probability_and_sigma.second); 
     
    26632645                        samples.ins_col(0,sample_coords); 
    26642646                        probabilities.ins(0,sample_prob); 
     2647 
     2648                        cout << "C:" << sample_coords << "   p:" << sample_prob << endl; 
     2649                        pause(1 ); 
    26652650                } 
    26662651