]> ruin.nu Git - germs.git/blob - src/models.cpp
More help output
[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 double Whirl::score(const SortAction& sa, const GeneOrder& go){
40         const ReverseAction* ra = dynamic_cast<const ReverseAction*>(&sa.impl());
41
42         if (ra){
43                 return 1;
44         }
45         return -1;
46 }
47 const char* Whirl::name(){
48         return "Whirl";
49 }
50
51 double X::score(const SortAction& sa, const GeneOrder& go){
52         const ReverseAction* ra = dynamic_cast<const ReverseAction*>(&sa.impl());
53
54         if (ra){
55                 int l1 = go.size()/2 - ra->i();
56                 int l2 = ra->j() - go.size()/2;
57                 double C = abs(l1 - l2)/static_cast<double>(go.size());
58                 return 1/(C+1);
59         }
60         return -1;
61 }
62 const char* X::name(){
63         return "X";
64 }
65
66 double Zipper::score(const SortAction& sa, const GeneOrder& go){
67         const ReverseAction* ra = dynamic_cast<const ReverseAction*>(&sa.impl());
68
69         if (ra){
70                 return 1.0/(((ra->j()-ra->i())/static_cast<double>(go.size()))+1.0);
71         }
72         return -1;
73 }
74 const char* Zipper::name(){
75         return "Zipper";
76 }
77
78 double Cloud::score(const SortAction& sa, const GeneOrder& go){
79         return 1;
80 }
81 const char* Cloud::name(){
82         return "Cloud";
83 }
84
85 double FatX::score(const SortAction& sa, const GeneOrder& go){
86         return 1;
87 }
88 const char* FatX::name(){
89         return "FatX";
90 }
91
92 }