#include <vector>
#include <queue>
#include <iterator>
+#include <fstream>
+
using namespace std;
+#include <unistd.h>
+
#include "geneorder.h"
#include "modelidentifier.h"
#include "genesorter.h"
#include "sortaction.h"
+#include "genealgorithms.h"
+#include "model.h"
-typedef pair<ModelIdentifier::Model,double> 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 <ann> 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 <ann>] [-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<Gene> g;
- copy(istream_iterator<int>(cin), istream_iterator<int>(),
+ copy(istream_iterator<int>(*in), istream_iterator<int>(),
back_inserter(g));
GeneOrder go(g.begin(),g.end());
//TODO: Identify
- ModelIdentifier mi("default.ann");
- map<ModelIdentifier::Model,double> scores = mi.identify(go);
- for (map<ModelIdentifier::Model,double>::iterator m = scores.begin();
- m != scores.end(); ++m){
- cout << "Model: " << m->first << " score: " << m->second << endl;
- }
+ ModelIdentifier mi(ann);
+ priority_queue<pair<double,Model> > 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) << " : ";
+ copy(go.begin(), go.end(), ostream_iterator<int>(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;
}