void RandomTest::randomListTest() { float minF = 10.f, maxF = 20.f; std::vector<float> randF(10); ::fwTools::random::fillContainer(minF, maxF, randF); for(size_t i = 0; i < randF.size(); ++i) { CPPUNIT_ASSERT_MESSAGE("Generate random number not in good interval.", randF[i] >= minF && randF[i] <= maxF); } int minI = 10, maxI = 20; std::vector<int> randI(10); ::fwTools::random::fillContainer(minI, maxI, randI); for(size_t i = 0; i < randF.size(); ++i) { CPPUNIT_ASSERT_MESSAGE("Generate random number not in good interval.", randI[i] >= minI && randI[i] <= maxI); } }
int pickParent(int prevChosen, int nInDeme ) { int i, j, n, count, dadi, momi, *ipt; int aliveOnes[nInDeme], nAlive=0; //double fitnessArray[TOTAL_N]; short int *offspringGenotyes, *sipt; int *offspringDemeLocations; offspringGenotyes = (short int *) malloc( (sizeof(short int) * 2 * totalSitesInGenome * TOTAL_N) ); offspringDemeLocations = (int *) malloc( (sizeof(int) * TOTAL_N) ); // momi = *(ipt + momi); // extract the right index from the overall index array; "momi" and "dadi" are "local" indexes in the consecutive fitness array // dadi = *(ipt + dadi); sipt = offspringGenotyes; int luckyOne; if ( MODEL_TYPE == MODEL_TYPE_NEUTRAL_ONLY ) { do { luckyOne = randI() % nInDeme; } while ( luckyOne == prevChosen ); } else if ( MODEL_TYPE == MODEL_TYPE_SELECTION ) { //fprintf(stderr, "\nError in pickParent()! Procedures not in place for MODEL_TYPE_SELECTION\n"); //exit(-1); int s_total=0; int s_sum; int individual=0; int i=0, j=0; double viabilityArray[nInDeme]; for (i; i<nSITES_PER_WINDOW; i++){ s_sum += selectionCoefficients[i]; } for(individual = 0; individual < nInDeme; individual++){ s_total=0, i=0; for (j; j<nSITES_PER_WINDOW; j++) { for (i=0;i<2;i++){ if (*sipt = 1){ s_total += selectionCoefficients[j]; } sipt++; } } //builds individual selection total for comparison to overall total viabilityArray[individual]=s_total; } cutoff = Cutoff(viabilityArray); i=0; int deadTracker; for (i; i<nInDeme; i++){ if (viabilityArray[i]>cutoff){ //aliveTracker[deadTracker] = i; deadTracker++; } //Scans through to find values less than cutoff; make 0 or 1 in living ones array instead? } luckyOne = randI() % deadTracker; //not nInDeme! Choose from array of live/dead //aliveTracker currently has nInDeme elements; is the current modulus operation OK?? } return aliveOnes[luckyOne]; }
void CSE_ALifeAnomalousZone::spawn_artefacts () { VERIFY2 (!m_bOnline,"Cannot spawn artefacts in online!"); float m_min_start_power = pSettings->r_float(name(),"min_start_power"); float m_max_start_power = pSettings->r_float(name(),"max_start_power"); u32 m_min_artefact_count= pSettings->r_u32 (name(),"min_artefact_count");; u32 m_max_artefact_count= pSettings->r_u32 (name(),"max_artefact_count");; u32 m_artefact_count; if (m_min_artefact_count == m_max_artefact_count) m_artefact_count = m_min_artefact_count; else m_artefact_count = randI(m_min_artefact_count,m_max_artefact_count); if (m_min_start_power == m_max_start_power) m_maxPower = m_min_start_power; else m_maxPower = randF(m_min_start_power,m_max_start_power); LPCSTR artefacts = pSettings->r_string(name(),"artefacts"); u32 n = _GetItemCount(artefacts); VERIFY2 (!(n % 2),"Invalid parameters count in line artefacts for anomalous zone"); n >>= 1; typedef std::pair<shared_str,float> ARTEFACT_PAIR; string256 temp0, temp1; ARTEFACT_PAIR *m_weights = (ARTEFACT_PAIR*)_alloca(n*sizeof(ARTEFACT_PAIR)); ARTEFACT_PAIR *I = m_weights; ARTEFACT_PAIR *E = m_weights + n; for (u32 i = 0; I != E; ++I, ++i) { _GetItem (artefacts,2*i,temp0); _GetItem (artefacts,2*i + 1,temp1); new (I) ARTEFACT_PAIR(temp0,(float)atof(temp1)); } for (u32 ii=0; ii<m_artefact_count; ++ii) { float fProbability = randF(1.f); float fSum = 0.f; for (u16 p=0; p<n; ++p) { fSum += m_weights[p].second; if (fSum > fProbability) break; } if (p < n) { CSE_Abstract *l_tpSE_Abstract = alife().spawn_item(*m_weights[p].first,position(),m_tNodeID,m_tGraphID,0xffff); R_ASSERT3 (l_tpSE_Abstract,"Can't spawn artefact ",*m_weights[p].first); CSE_ALifeDynamicObject *i = smart_cast<CSE_ALifeDynamicObject*>(l_tpSE_Abstract); R_ASSERT2 (i,"Non-ALife object in the 'game.spawn'"); i->m_tSpawnID = m_tSpawnID; i->m_bALifeControl = true; ai().alife().spawns().assign_artefact_position(this,i); Fvector t = i->o_Position ; u32 p = i->m_tNodeID ; float q = i->m_fDistance ; alife().graph().change(i,m_tGraphID,i->m_tGraphID); i->o_Position = t; i->m_tNodeID = p; i->m_fDistance = q; CSE_ALifeItemArtefact *l_tpALifeItemArtefact = smart_cast<CSE_ALifeItemArtefact*>(i); R_ASSERT2 (l_tpALifeItemArtefact,"Anomalous zone can't generate non-artefact objects since they don't have an 'anomaly property'!"); l_tpALifeItemArtefact->m_fAnomalyValue = m_maxPower*(1.f - i->o_Position.distance_to(o_Position)/m_offline_interactive_radius); } } for (I = m_weights; I != E; ++I) I->~ARTEFACT_PAIR (); }