X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fmodels.cpp;h=a8289c7b3f9a5056dc2dc8fb9a3caefbf885c8d3;hb=6c059509f0e7230c2352963e559b623fadd27810;hp=cd89ef848aa6375af8d1e5d40d866ce1e39f1647;hpb=f8575ea6c0982bba5ccf42771b2994d19500c0a3;p=germs.git diff --git a/src/models.cpp b/src/models.cpp index cd89ef8..a8289c7 100644 --- a/src/models.cpp +++ b/src/models.cpp @@ -19,6 +19,8 @@ ***************************************************************************/ #include "models.h" +#include "reverseaction.h" +#include "geneorder.h" using namespace std; @@ -26,40 +28,53 @@ namespace Models{ 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(&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(go.size()); + return 1/(C+1); + } + return -1; } -string X::name(){ +const char* X::name(){ return "X"; } -double Zipper::score(const SortAction& sa){ - return 1; +double Zipper::score(const SortAction& sa, const GeneOrder& go){ + const ReverseAction* ra = dynamic_cast(&sa.impl()); + + if (ra){ + return 1.0/(((ra->j()-ra->i())/static_cast(go.size()))+1.0); + } + 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"; }