11 #include "geneorder.h"
12 #include "modelidentifier.h"
13 #include "genesorter.h"
14 #include "sortaction.h"
15 #include "genealgorithms.h"
18 int main(int argc, char** argv){
20 string ann = "default.ann";
22 bool detectModel = true;
23 bool onlyIdentify = false;
24 bool printPerm = false;
26 //Parse command line arguments
28 while ((opt = getopt(argc, argv, "im:n:hp")) != -1) {
31 model = Model::modelFactory(optarg);
44 cout << "Usage: " << argv[0] << " [OPTION] [FILE]" << endl
45 << endl << " -m <model> Specifies which model to use for sorting: Whirl, X, Zipper, FatX or Cloud "
46 << endl << " -n <ann> Specifies which artificial neural network to use for identification. '" << ann << "' is used by default"
47 << endl << " -i Only identify the model, don't try to sort it"
48 << endl << " -p Print the resulting permutation at each sorting step"
49 << endl << " -h Prints this help message"
51 << "With no FILE, or if FILE is '-', stdin will be used"
56 cerr << "Usage: " << argv[0] << " [-n <ann>] [-h] [FILE]" << endl;
64 if (optind == argc || *argv[optind] == '-'){
67 file.open(argv[optind]);
69 cerr << "Could not open file: '" << argv[optind] << "'" << endl;
75 //Parse the gene order permutation
77 copy(istream_iterator<int>(*in), istream_iterator<int>(),
79 GeneOrder go(g.begin(),g.end());
82 ModelIdentifier mi(ann);
83 priority_queue<pair<double,Model> > pq = mi.identify(go);
85 model = pq.top().second;
87 while (pq.size() > 0){
88 cout << "Model: " << pq.top().second.name() << " score: " << pq.top().first << endl;
91 cout << "Using model: " << model.name() << endl;
93 cout << "Distance: " << inversionDistance(go) << endl;
94 //copy(go.begin(), go.end(), ostream_iterator<int>(cout, " "));
102 GeneSorter::ActionList al = so.sort(go,model);
108 for (GeneSorter::ActionList::iterator sa = al.begin(); sa != al.end(); ++sa){
109 cout << "Action: " << sa->toString() << " model score: " << model.score(*sa,temp) << endl;
111 score += model.score(*sa,temp);
114 copy(temp.begin(), temp.end(), ostream_iterator<int>(cout, " "));
118 cout << "Avg score: " << score / al.size() << endl;