X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fmodels.cpp;h=a8289c7b3f9a5056dc2dc8fb9a3caefbf885c8d3;hb=8e617d91244bf6c8b22503850e10909fa2071c44;hp=9c13090647ca294bebf752405e6f10a245a83b0c;hpb=d7c119fefaf9cce07974afbefb4b6a017689a961;p=germs.git diff --git a/src/models.cpp b/src/models.cpp index 9c13090..a8289c7 100644 --- a/src/models.cpp +++ b/src/models.cpp @@ -38,14 +38,27 @@ const char* ModelImpl::name(){ double X::score(const SortAction& sa, const GeneOrder& go){ - return 1; + 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; } const char* X::name(){ return "X"; } double Zipper::score(const SortAction& sa, const GeneOrder& go){ - return 1; + const ReverseAction* ra = dynamic_cast(&sa.impl()); + + if (ra){ + return 1.0/(((ra->j()-ra->i())/static_cast(go.size()))+1.0); + } + return -1; } const char* Zipper::name(){ return "Zipper";