X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fmain.cpp;h=1ead839eee2502e3be6283e27e4c7701aa2466e3;hb=467ca9f6a60b70eeb9353f83f6e5abd40892a464;hp=5e6a5c99902915cd28e344b4d63eecec0ed8f375;hpb=5f37e9f08f736f4fe4576dd530c60ecb87017907;p=germs.git diff --git a/src/main.cpp b/src/main.cpp index 5e6a5c9..1ead839 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,35 +2,86 @@ #include #include #include +#include + using namespace std; +#include + #include "geneorder.h" #include "modelidentifier.h" #include "genesorter.h" #include "sortaction.h" +#include "genealgorithms.h" +#include "model.h" -typedef pair modelpair; +int main(int argc, char** argv){ -int main(){ + string ann = "default.ann"; + int opt; + while ((opt = getopt(argc, argv, "n:h")) != -1) { + switch (opt) { + case 'n': + ann = optarg; + break; + case 'h': + cout << "Usage: " << argv[0] << " [OPTION] [FILE]" << endl + << endl << " -n Specifies which artificial neural network to use for identification. '" << ann << "' is used by default" + << endl << " -h Prints this help message" + << endl << endl + << "With no FILE, or if FILE is '-', stdin will be used" + << endl; + exit(EXIT_SUCCESS); + break; + default: /* '?' */ + cerr << "Usage: " << argv[0] << " [-n ] [-h] [FILE]" << endl; + exit(EXIT_FAILURE); + } + } + + istream* in; + ifstream file; + if (optind == argc || *argv[optind] == '-'){ + in = &cin; + }else{ + file.open(argv[optind]); + if (file.fail()){ + cerr << "Could not open file: '" << argv[optind] << "'" << endl; + exit(EXIT_FAILURE); + } + in = &file; + } //TODO: Parse vector g; - copy(istream_iterator(cin), istream_iterator(), + copy(istream_iterator(*in), istream_iterator(), back_inserter(g)); GeneOrder go(g.begin(),g.end()); //TODO: Identify - ModelIdentifier mi("default.ann"); - map scores = mi.identify(go); - for (map::iterator m = scores.begin(); - m != scores.end(); ++m){ - cout << "Model: " << m->first << " score: " << m->second << endl; - } + ModelIdentifier mi(ann); + priority_queue > pq = mi.identify(go); + Model model = pq.top().second; + //while (pq.size() > 0){ + cout << "Model: " << model.name() << " score: " << pq.top().first << endl; + //pq.pop(); + //} + + cout << "Distance: " << inversionDistance(go) << endl; + //copy(go.begin(), go.end(), ostream_iterator(cout, " ")); + //cout << endl; //TODO: Chose a sorter GeneSorter so; //TODO: Sort - GeneSorter::ActionList al = so.sort(go); + GeneSorter::ActionList al = so.sort(go,model); + + double score = 0; + 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 << "Avg score: " << score / al.size() << endl; //TODO: Print result - return 0; + return EXIT_SUCCESS; }