1 /*
2  *  core/Defintions.h
3  *  avida-core
4  *
5  *  Created by David on 4/17/11.
6  *  Copyright 2011 Michigan State University. All rights reserved.
7  *  http://avida.devosoft.org/
8  *
9  *
10  *  This file is part of Avida.
11  *
12  *  Avida is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
13  *  as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
14  *
15  *  Avida is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
17  *
18  *  You should have received a copy of the GNU Lesser General Public License along with Avida.
19  *  If not, see <http://www.gnu.org/licenses/>.
20  *
21  *  Authors: David M. Bryson <david@programerror.com>
22  *
23  */
24 
25 #ifndef AvidaCoreDefinitions_h
26 #define AvidaCoreDefinitions_h
27 
28 const int MIN_GENOME_LENGTH = 8;
29 const int MAX_GENOME_LENGTH = 2048;
30 
31 const int MIN_INJECT_SIZE = 8;
32 
33 
34 // Number of distinct input and outputs stored in the IOBufs (to test tasks)
35 const int INPUT_SIZE_DEFAULT = 3;
36 const int OUTPUT_SIZE_DEFAULT = 1;
37 
38 const int RECEIVED_MESSAGES_SIZE = 10;
39 const int MARKET_SIZE = 10000;
40 
41 
42 enum eFileType
43 {
44   FILE_TYPE_TEXT,
45   FILE_TYPE_HTML
46 };
47 
48 enum eHARDWARE_TYPE
49 {
50   HARDWARE_TYPE_CPU_ORIGINAL = 0,
51   HARDWARE_TYPE_CPU_SMT,
52   HARDWARE_TYPE_CPU_TRANSSMT,
53   HARDWARE_TYPE_CPU_EXPERIMENTAL,
54   HARDWARE_TYPE_CPU_GX
55 };
56 
57 enum eTIMESLICE
58 {
59   SLICE_CONSTANT = 0,
60   SLICE_PROB_MERIT,
61   SLICE_INTEGRATED_MERIT,
62   SLICE_DEME_PROB_MERIT,
63   SLICE_PROB_DEMESIZE_PROB_MERIT,
64   SLICE_CONSTANT_BURST,
65 };
66 
67 enum ePOSITION_OFFSPRING
68 {
69   POSITION_OFFSPRING_RANDOM = 0,
70   POSITION_OFFSPRING_AGE,
71   POSITION_OFFSPRING_MERIT,
72   POSITION_OFFSPRING_EMPTY,
73   POSITION_OFFSPRING_FULL_SOUP_RANDOM,
74   POSITION_OFFSPRING_FULL_SOUP_ELDEST,
75   POSITION_OFFSPRING_DEME_RANDOM,
76   POSITION_OFFSPRING_PARENT_FACING,
77   POSITION_OFFSPRING_NEXT_CELL,
78   POSITION_OFFSPRING_FULL_SOUP_ENERGY_USED,
79   POSITION_OFFSPRING_NEIGHBORHOOD_ENERGY_USED,
80   POSITION_OFFSPRING_DISPERSAL,
81 };
82 const int NUM_LOCAL_POSITION_OFFSPRING = POSITION_OFFSPRING_FULL_SOUP_RANDOM;
83 
84 enum eDEATH_METHOD
85 {
86   DEATH_METHOD_OFF = 0,
87   DEATH_METHOD_CONST,
88   DEATH_METHOD_MULTIPLE
89 };
90 
91 enum eALLOC_METHOD
92 {
93   ALLOC_METHOD_DEFAULT = 0,
94   ALLOC_METHOD_NECRO,
95   ALLOC_METHOD_RANDOM
96 };
97 
98 enum eDIVIDE_METHOD
99 {
100   DIVIDE_METHOD_OFFSPRING = 0,
101   DIVIDE_METHOD_SPLIT,
102   DIVIDE_METHOD_BIRTH,
103 };
104 
105 enum eEPIGENETIC_METHOD
106 {
107   EPIGENETIC_METHOD_NONE = 0,
108   EPIGENETIC_METHOD_OFFSPRING,
109   EPIGENETIC_METHOD_PARENT,
110   EPIGENETIC_METHOD_BOTH
111 };
112 
113 enum eINJECT_METHOD
114 {
115   INJECT_METHOD_OFFSPRING = 0,
116   INJECT_METHOD_SPLIT
117 };
118 
119 enum eGENERATION_INCREMENT
120 {
121   GENERATION_INC_OFFSPRING = 0,
122   GENERATION_INC_BOTH
123 };
124 
125 enum eBASE_MERIT
126 {
127   BASE_MERIT_CONST = 0,
128   BASE_MERIT_COPIED_SIZE,
129   BASE_MERIT_EXE_SIZE,
130   BASE_MERIT_FULL_SIZE,
131   BASE_MERIT_LEAST_SIZE,
132   BASE_MERIT_SQRT_LEAST_SIZE,
133   BASE_MERIT_NUM_BONUS_INST,
134   BASE_MERIT_GESTATION_TIME
135 
136 };
137 
138 enum eINST_CODE_DEFAULT
139 {
140   INST_CODE_ZEROS = 0,
141   INST_CODE_INSTNUM
142 };
143 
144 
145 enum ePHENPLAST_BONUS_METHOD{
146   DEFAULT = 0,
147   NO_BONUS,
148   FRAC_BONUS,
149   FULL_BONUS
150 };
151 
152 enum eDEME_TRIGGERS {
153   DEME_TRIGGER_ALL = 0,
154   DEME_TRIGGER_FULL,                // 1
155   DEME_TRIGGER_CORNERS,             // 2
156   DEME_TRIGGER_AGE,                 // 3
157   DEME_TRIGGER_BIRTHS,              // 4
158   DEME_TRIGGER_MOVE_PREDATORS,      // 5
159   DEME_TRIGGER_GROUP_KILL,          // 6
160   DEME_TRIGGER_MESSAGE_PREDATORS,   // 7
161   DEME_TRIGGER_PREDICATE,           // 8
162   DEME_TRIGGER_PERFECT_REACTIONS,   // 9
163   DEME_TRIGGER_CONSUME_RESOURCES,   // 10
164   DEME_TRIGGER_UNKNOWN              // 11
165 };
166 
167 enum eSELECTION_TYPE {
168   SELECTION_TYPE_PROPORTIONAL = 0,
169   SELECTION_TYPE_TOURNAMENT
170 };
171 
172 enum eMP_SCHEDULING {
173 	MP_SCHEDULING_NULL = 0,
174 	MP_SCHEDULING_INTEGRATED
175 };
176 
177 enum eVerbosity {
178   VERBOSE_SILENT = 0,   // 0: No output at all
179   VERBOSE_NORMAL,       // 1: Notification at start of commands.
180   VERBOSE_ON,           // 2: Verbose output, detailing progress
181   VERBOSE_DETAILS,      // 3: High level of details, as available.
182   VERBOSE_DEBUG         // 4: Print Debug Information, as applicable.
183 };
184 
185 
186 enum eBioUnitSource {
187   SRC_DEME_COMPETE,
188   SRC_DEME_COPY,
189   SRC_DEME_GERMLINE,
190   SRC_DEME_RANDOM,
191   SRC_DEME_REPLICATE,
192   SRC_DEME_SPAWN,
193   SRC_ORGANISM_COMPETE,
194   SRC_ORGANISM_DIVIDE,
195   SRC_ORGANISM_FILE_LOAD,
196   SRC_ORGANISM_RANDOM,
197   SRC_PARASITE_FILE_LOAD,
198   SRC_PARASITE_INJECT,
199   SRC_TEST_CPU
200 };
201 
202 enum eMatingTypes {
203   MATING_TYPE_JUVENILE = -1,
204   MATING_TYPE_FEMALE = 0,
205   MATING_TYPE_MALE = 1
206 };
207 
208 enum eMatePreferences {
209   MATE_PREFERENCE_RANDOM,
210   MATE_PREFERENCE_HIGHEST_DISPLAY_A,
211   MATE_PREFERENCE_HIGHEST_DISPLAY_B,
212   MATE_PREFERENCE_HIGHEST_MERIT
213 };
214 
215 namespace Avida
216 {
217   extern const char* const BioUnitSourceMap[];
218 };
219 
220 
221 #endif
222