void Segmenter::segment() { if (featureSet != NULL) { frames = featureSet->getMinHistorySize(); initialize(); for (int i = 0; i < frames; i++) { for (int j = 0; j < features.size(); j++) y[j] = features[j]->getHistoryFrame(i); viterbi(i); } vector<int> state_sequence(frames, 0); vector<double>::iterator minimum_cost = min_element(oldCosts.begin(), oldCosts.end()); state_sequence[frames - 1] = distance(oldCosts.begin(), minimum_cost); for (int i = frames - 2; i > -1; i--) state_sequence[i] = psi[i][state_sequence[i + 1]]; for (int i = 0; i < frames; i++) modes[i] = modeMatrix[0][state_sequence[i]]; } }
// Private functions double Anneal::AcceptRatioNow(int sequence_size) const { std::uniform_real_distribution<double> distribution(0.0, 1.0); int accept_state_num = 0; int total_state_num = 0; std::vector<Path> state_sequence(sequence_size); std::vector<double> state_value(sequence_size); for (int i = 0; i < sequence_size; i++) { state_sequence[i] = std::move(GenerateRandomPath()); state_value[i] = Evaluate(state_sequence[i]); } for (int i = 0; i < sequence_size; i++) { for (int j = 0; j < sequence_size; j++) { total_state_num++; if (state_value[j] <= state_value[i] || distribution(generator_) < TransitionProbability(state_value[i], state_value[j])) accept_state_num++; } } return static_cast<double>(accept_state_num) / static_cast<double>(total_state_num); }
int main(int argc, char** argv) { core::term_signal=0; size_t n=1; const char* filename=NULL; if (argc<2 || argc>3) { fprintf(stderr,"%s [repeat] pulsesequence\n",argv[0]); return 1; } if (argc==3) { char* endptr=NULL; n=strtoul(argv[1],&endptr,10); if (*endptr!=0 && n<1) { fprintf(stderr,"%s [repeat] pulsesequence\n",argv[0]); return 1; } filename=argv[2]; } if (argc==2) { filename=argv[1]; } if (0!=access(filename, R_OK)) { fprintf(stderr, "%s: could not open file %s, reason: %s\n",argv[0],filename, strerror(errno)); return 1; } int value_returned=0; size_t i=0; while (i<n && value_returned==0) { value_returned=state_sequence(filename); i++; } if (n>1) { fprintf(stdout,"%s: executed %s %lu times\n",argv[0],filename,i); } return value_returned; }