]> ruin.nu Git - germs.git/blob - src/models.cpp
give access to reverse action members, and calculate symmetric score according to...
[germs.git] / src / models.cpp
1 /***************************************************************************
2  *   Copyright (C) 2006 by Michael Andreen                                 *
3  *   andreen@student.chalmers.se                                           *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
19  ***************************************************************************/
20
21 #include "models.h"
22 #include "reverseaction.h"
23 #include "geneorder.h"
24
25 using namespace std;
26
27 namespace Models{
28
29 ModelImpl::~ModelImpl(){}
30
31 double ModelImpl::score(const SortAction& sa, const GeneOrder& go){
32         return 1;
33 }
34 const char* ModelImpl::name(){
35         return "Standard";
36 }
37
38
39
40 double X::score(const SortAction& sa, const GeneOrder& go){
41         const ReverseAction* ra = dynamic_cast<const ReverseAction*>(&sa.impl());
42
43         if (ra){
44                 int l1 = go.size()/2 - ra->i();
45                 int l2 = ra->j() - go.size()/2;
46                 double C = abs(l1 - l2)/static_cast<double>(go.size());
47                 return 1/(C+1);
48         }
49         return -1;
50 }
51 const char* X::name(){
52         return "X";
53 }
54
55 double Zipper::score(const SortAction& sa, const GeneOrder& go){
56         return 1;
57 }
58 const char* Zipper::name(){
59         return "Zipper";
60 }
61
62 double Cloud::score(const SortAction& sa, const GeneOrder& go){
63         return 1;
64 }
65 const char* Cloud::name(){
66         return "Cloud";
67 }
68
69 double FatX::score(const SortAction& sa, const GeneOrder& go){
70         return 1;
71 }
72 const char* FatX::name(){
73         return "FatX";
74 }
75
76 }