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 | |
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; |