]> ruin.nu Git - germs.git/blobdiff - src/models.cpp
More help output
[germs.git] / src / models.cpp
index 9c13090647ca294bebf752405e6f10a245a83b0c..0511dd4726b231e38b3521981d01ba3ccf793831 100644 (file)
@@ -36,16 +36,40 @@ const char* ModelImpl::name(){
 }
 
 
+double Whirl::score(const SortAction& sa, const GeneOrder& go){
+       const ReverseAction* ra = dynamic_cast<const ReverseAction*>(&sa.impl());
+
+       if (ra){
+               return 1;
+       }
+       return -1;
+}
+const char* Whirl::name(){
+       return "Whirl";
+}
 
 double X::score(const SortAction& sa, const GeneOrder& go){
-       return 1;
+       const ReverseAction* ra = dynamic_cast<const ReverseAction*>(&sa.impl());
+
+       if (ra){
+               int l1 = go.size()/2 - ra->i();
+               int l2 = ra->j() - go.size()/2;
+               double C = abs(l1 - l2)/static_cast<double>(go.size());
+               return 1/(C+1);
+       }
+       return -1;
 }
 const char* X::name(){
        return "X";
 }
 
 double Zipper::score(const SortAction& sa, const GeneOrder& go){
-       return 1;
+       const ReverseAction* ra = dynamic_cast<const ReverseAction*>(&sa.impl());
+
+       if (ra){
+               return 1.0/(((ra->j()-ra->i())/static_cast<double>(go.size()))+1.0);
+       }
+       return -1;
 }
 const char* Zipper::name(){
        return "Zipper";