***************************************************************************/
#include "models.h"
+#include "reverseaction.h"
+#include "geneorder.h"
using namespace std;
ModelImpl::~ModelImpl(){}
-double ModelImpl::score(const SortAction& sa){
+double ModelImpl::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string ModelImpl::name(){
+const char* ModelImpl::name(){
return "Standard";
}
-double X::score(const SortAction& sa){
- return 1;
+double X::score(const SortAction& sa, const GeneOrder& go){
+ 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;
}
-string X::name(){
+const char* X::name(){
return "X";
}
-double Zipper::score(const SortAction& sa){
+double Zipper::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string Zipper::name(){
+const char* Zipper::name(){
return "Zipper";
}
-double Cloud::score(const SortAction& sa){
+double Cloud::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string Cloud::name(){
+const char* Cloud::name(){
return "Cloud";
}
-double FatX::score(const SortAction& sa){
+double FatX::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string FatX::name(){
+const char* FatX::name(){
return "FatX";
}