X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain.cpp;h=abd520f43a29f7a3ec9b4cb7cb8f893895f16cbc;hb=69cfdf79b7597ee6133dc3add1a759bc94861fa6;hp=d9bce2f37ba2f901c38470a0d0b59ab1f2e323b3;hpb=8e617d91244bf6c8b22503850e10909fa2071c44;p=germs.git diff --git a/src/main.cpp b/src/main.cpp index d9bce2f..abd520f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,10 +20,12 @@ int main(int argc, char** argv){ string ann = "default.ann"; Model model(0); bool detectModel = true; + bool onlyIdentify = false; + bool printPerm = false; //Parse command line arguments int opt; - while ((opt = getopt(argc, argv, "m:n:h")) != -1) { + while ((opt = getopt(argc, argv, "im:n:hp")) != -1) { switch (opt) { case 'm': model = Model::modelFactory(optarg); @@ -32,10 +34,18 @@ int main(int argc, char** argv){ case 'n': ann = optarg; break; + case 'i': + onlyIdentify = true; + break; + case 'p': + printPerm = true; + break; case 'h': cout << "Usage: " << argv[0] << " [OPTION] [FILE]" << endl << endl << " -m Specifies which model to use for sorting: Whirl, X, Zipper, FatX or Cloud " << endl << " -n Specifies which artificial neural network to use for identification. '" << ann << "' is used by default" + << endl << " -i Only identify the model, don't try to sort it" + << endl << " -p Print the resulting permutation at each sorting step" << endl << " -h Prints this help message" << endl << endl << "With no FILE, or if FILE is '-', stdin will be used" @@ -84,15 +94,26 @@ int main(int argc, char** argv){ //copy(go.begin(), go.end(), ostream_iterator(cout, " ")); //cout << endl; + if (onlyIdentify){ + return EXIT_SUCCESS; + } //Sort GeneSorter so; GeneSorter::ActionList al = so.sort(go,model); //Print the result double score = 0; + + GeneOrder temp(go); for (GeneSorter::ActionList::iterator sa = al.begin(); sa != al.end(); ++sa){ - cout << "Action: " << sa->toString() << " model score: " << model.score(*sa,go) << endl; - score += model.score(*sa,go); + cout << "Action: " << sa->toString() << " model score: " << model.score(*sa,temp) << endl; + (*sa)(temp); + score += model.score(*sa,temp); + + if (printPerm){ + copy(temp.begin(), temp.end(), ostream_iterator(cout, " ")); + cout << endl; + } } cout << "Avg score: " << score / al.size() << endl;