| 161 | |
| 162 | |
| 163 | void cMutationalNeighborhood::ProcessInitialize(cAvidaContext& ctx) |
| 164 | { |
| 165 | // Generate base information |
| 166 | cTestCPU* testcpu = m_world->GetHardwareManager().CreateTestCPU(ctx); |
| 167 | cCPUTestInfo test_info; |
| 168 | testcpu->TestGenome(ctx, test_info, m_base_genome); |
| 169 | |
| 170 | cPhenotype& phenotype = test_info.GetColonyOrganism()->GetPhenotype(); |
| 171 | m_base_fitness = test_info.GetColonyFitness(); |
| 172 | m_base_merit = phenotype.GetMerit().GetDouble(); |
| 173 | m_base_gestation = phenotype.GetGestationTime(); |
| 174 | m_base_tasks = phenotype.GetLastTaskCount(); |
| 175 | |
| 176 | m_neut_min = m_base_fitness * nHardware::FITNESS_NEUTRAL_MIN; |
| 177 | m_neut_max = m_base_fitness * nHardware::FITNESS_NEUTRAL_MAX; |
| 178 | |
| 179 | // If invalid target supplied, set to the last task |
| 180 | if (m_target >= m_base_tasks.GetSize() || m_target < 0) m_target = m_base_tasks.GetSize() - 1; |
| 181 | |
| 182 | delete testcpu; |
| 183 | |
| 184 | // Setup state to begin processing |
| 185 | m_onestep_point.ResizeClear(m_base_genome_size); |
| 186 | m_onestep_insert.ResizeClear(m_base_genome_size + 1); |
| 187 | m_onestep_delete.ResizeClear(m_base_genome_size); |
| 188 | |
| 189 | m_twostep_point.ResizeClear(m_base_genome_size); |
| 190 | m_twostep_insert.ResizeClear(m_base_genome_size + 1); |
| 191 | m_twostep_delete.ResizeClear(m_base_genome_size); |
| 192 | |
| 193 | m_insert_point.ResizeClear(m_base_genome_size + 1); |
| 194 | m_insert_delete.ResizeClear(m_base_genome_size + 1); |
| 195 | m_delete_point.ResizeClear(m_base_genome_size); |
| 196 | |
| 197 | m_fitness_point.ResizeClear(m_base_genome_size, m_inst_set.GetSize()); |
| 198 | m_fitness_insert.ResizeClear(m_base_genome_size + 1, m_inst_set.GetSize()); |
| 199 | m_fitness_delete.ResizeClear(m_base_genome_size, 1); |
| 200 | |
| 201 | m_cur_site = 0; |
| 202 | m_completed = 0; |
| 203 | m_initialized = true; |
| 204 | |
| 205 | // Unlock internal mutex (was locked on Process() entrance) |
| 206 | // - will allow workers to begin processing if job queue already active |
| 207 | m_mutex.Unlock(); |
| 208 | |
| 209 | // Load enough jobs to process all sites |
| 210 | cAnalyzeJobQueue& jobqueue = m_world->GetAnalyze().GetJobQueue(); |
| 211 | for (int i = 0; i < m_base_genome_size; i++) |
| 212 | jobqueue.AddJob(new tAnalyzeJob<cMutationalNeighborhood>(this, &cMutationalNeighborhood::Process)); |
| 213 | |
| 214 | jobqueue.Start(); |
| 215 | } |
| 216 | |
| 217 | |
| 218 | void cMutationalNeighborhood::ProcessOneStepPoint(cAvidaContext& ctx, cTestCPU* testcpu, cCPUTestInfo& test_info, int cur_site) |
nothing calls this directly
no test coverage detected