void test_copies() { // Test for range of integers std::vector<int> val_1 = {12,2,3,4,5,1,6,7,8,9,10}; std::vector<int> val_2(11); auto it = copies(val_1.begin(),val_1.end(),val_2.begin()); assert(*(val_1.begin())==*(val_2.begin())); assert(it == val_2.end()); // Test for range of Strings std::vector<std::string> str_1={"Hi", "this", "is", "a", "test", "for", "equal"}; std::vector<std::string> str_2(7); auto StrIterator = copies(str_1.begin(),str_1.end(),str_2.begin()); }
ParameterList printPurchaseOrder::getParamsOneCopy(const int row, XSqlQuery *qry) { ParameterList params = printMulticopyDocument::getParamsOneCopy(row, qry); params.append("title", copies()->watermark(row)); return params; }
ParameterList printShippingForms::getParamsOneCopy(const int row, XSqlQuery *qry) { ParameterList params = printMulticopyDocument::getParamsOneCopy(row, qry); params.append("shiphead_id", qry->value("shiphead_id")); params.append("shipchrg_id", qry->value("shiphead_shipchrg_id")); if (_metrics->boolean("MultiWhs")) params.append("MultiWhs"); if (copies()->showCosts(row)) params.append("showcosts"); return params; }
vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<vector<int> > result; int n = candidates.size(); if(!n) return result; sort(candidates.begin(), candidates.end()); vector<int> selection(n, 0); vector<int> copies(n, 0); int value = target; int index = 0; selection[index] = 0; copies[index] = 1; value -= candidates[selection[index]] * copies[index]; while(true) { if(selection[0] >= n) break; if(value == 0){ addResultItem(candidates, selection, copies, index, result); value += candidates[selection[index]] * copies[index]; if(selection[index] == n-1) { if(!index) break; // --index; ++copies[index]; value -= candidates[selection[index]]; } else { ++selection[index]; copies[index] = 1; value -= candidates[selection[index]]; } } else if(value > 0) { if(selection[index] == n-1) { ++copies[index]; value -= candidates[selection[index]]; } else { ++index; selection[index] = selection[index-1] +1 ; copies[index] = 1; value -= candidates[selection[index]]; } } else { value += candidates[selection[index]] * copies[index]; if(selection[index] >= n-1) if(!index) break; else { --index; ++copies[index]; value -= candidates[selection[index]]; } else if(copies[index] == 1) { // go back if(!index) break; else { --index; ++copies[index]; value -= candidates[selection[index]]; } } else { ++selection[index]; copies[index] = 1; value -= candidates[selection[index]]; } } } return result; }
Particles ResamplingResidual::resample(Particles* particles){ Particles resampledSet; Particles stage1; int count = 0; resampledSet.samples = fmat(particles->samples.n_rows,particles->samples.n_cols); resampledSet.weights = frowvec(particles->weights.n_cols); fvec cumsum; fvec random; unsigned int number = particles->samples.n_cols; unsigned int numberOfStage1 = 0; // Generating copie information of every particle ivec copies = zeros<ivec>(particles->samples.n_cols); for (unsigned int i=0;i<particles->samples.n_cols;++i){ copies = (int) floor(number*particles->weights(i)); } numberOfStage1 = sum(copies); stage1.samples = fmat(particles->samples.n_rows,numberOfStage1); stage1.weights = frowvec(numberOfStage1); //Picking N_i = N*w_i copies of i-th particle for (unsigned int i=1; i < copies.n_rows;++i){ for (int j=0;j<copies(i);++j){ for (unsigned int k=0;k<particles->samples.n_rows;++k){ stage1.samples(k,count) = particles->samples(k,i); } stage1.weights(count) = particles->weights(i) - (float)copies(i)/number; count++; } } // multinomial resampling with residuum weights w_i = w_i - N_i/N cumsum = zeros<fvec>(numberOfStage1); for (unsigned int i=1; i < stage1.weights.n_cols;++i){ cumsum(i) = cumsum(i-1) + stage1.weights(i); } // generate sorted random set random = randu<fvec>(numberOfStage1); random=random*cumsum(cumsum.n_rows-1); random = sort(random); for (unsigned int j=0; j < random.n_rows; ++j){ for (unsigned int i=0 ; i < cumsum.n_rows; ++i){ if (random(j) <= cumsum(i)){ if(i > 0){ if(random(j) >= cumsum(i-1)) { for (unsigned int k=0;k<stage1.samples.n_rows;++k){ resampledSet.samples(k,j) = stage1.samples(k,i); assignmentVec.push_back(i); } break; } } else { for (unsigned int k=0; k<stage1.samples.n_rows; ++k){ resampledSet.samples(k,j) = stage1.samples(k,i); assignmentVec.push_back(i); } break; } } // Normalize weights resampledSet.weights(j) = 1.0f/particles->weights.n_cols; } } return resampledSet; }
void optiq_opi_compute_stat() { int size, rank; MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); if (rank == 0) { int mincopies = 0, maxcopies = 0, medcopies = 0, total_numcopies = 0; int minrputs = 0, maxrputs = 0, medrputs = 0, total_rputs = 0; int minlinkloads = 0, maxlinkloads = 0, medlinkloads = 0; double total_linkloads = 0; double avgcopies = 0, avglinkloads = 0, avgrputs = 0; std::vector<int> copies (max_opi.all_numcopies, max_opi.all_numcopies + size); std::sort (copies.begin(), copies.end()); std::vector<int> rputs (max_opi.all_numrputs, max_opi.all_numrputs + size); std::sort (rputs.begin(), rputs.end()); std::vector<int> linkloads (max_opi.all_link_loads, max_opi.all_link_loads + size * 9); std::sort (linkloads.begin(), linkloads.end()); opi.linkloads = linkloads; int ncpy = 0, nrput = 0, nlinks = 0; maxcopies = copies[size - 1]; maxrputs = rputs[size - 1]; maxlinkloads = linkloads[size * 9 - 1]; std::map<int, int>::iterator it; opi.copies_dist.clear(); for (int i = size; i >= 0; i--) { if (copies[i] != 0) { total_numcopies += copies[i]; mincopies = copies[i]; ncpy++; it = opi.copies_dist.find(copies[i]); if (it == opi.copies_dist.end()) { opi.copies_dist.insert(std::pair<int, int>(copies[i], 1)); } else { it->second++; } } if (rputs[i] != 0) { total_rputs += rputs[i]; minrputs = rputs[i]; nrput++; } } for (int i = size * 9; i >= 0; i--) { if (linkloads[i] != 0) { total_linkloads += linkloads[i]; minlinkloads = linkloads[i]; nlinks++; } } medcopies = copies[size - 1 - ncpy/2]; avgcopies = (double) total_numcopies / ncpy; medrputs = rputs[size - 1 - nrput/2]; avgrputs = (double) total_rputs / nrput; medlinkloads = linkloads[size * 9 - 1 - nlinks/2]; avglinkloads = total_linkloads / nlinks; opi.copies.max = maxcopies; opi.copies.min = mincopies; opi.copies.avg = avgcopies; opi.copies.med = medcopies; opi.copies.total = total_numcopies; opi.rputs.max = maxrputs; opi.rputs.min = minrputs; opi.rputs.avg = avgrputs; opi.rputs.med = medrputs; opi.rputs.total = total_rputs; opi.load_link.max = maxlinkloads; opi.load_link.min = minlinkloads; opi.load_link.avg = avglinkloads; opi.load_link.med = medlinkloads; opi.load_link.total = total_linkloads; } }