Changeset 896 for cpp/frams/genetics/fL


Ignore:
Timestamp:
11/30/19 01:30:22 (5 years ago)
Author:
Maciej Komosinski
Message:

Replaced #defined macros for popular random-related operations with functions

Location:
cpp/frams/genetics/fL
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/genetics/fL/fL_matheval.cpp

    r821 r896  
    613613void MathEvaluation::mutateValueOrVariable(MathEvaluation::Number *&currval, bool usetime)
    614614{
    615         if (randomN(2) == 0 && varcount > 0) // use variable
     615        if (rndUint(2) == 0 && varcount > 0) // use variable
    616616        {
    617617                if (currval && currval->type == TokenType::NUMBER)
     
    619619                        delete currval;
    620620                }
    621                 int var = randomN(varcount + (usetime ? 1 : 0));
     621                int var = rndUint(varcount + (usetime ? 1 : 0));
    622622                if (varcount == var) // time is used
    623623                {
     
    633633                if (!currval || currval->type == TokenType::VARIABLE)
    634634                {
    635                         currval = new Number(rnd01);
     635                        currval = new Number(rndDouble(1));
    636636                }
    637637                else
    638638                {
    639                         currval->value = rnd01;
     639                        currval->value = rndDouble(1);
    640640                }
    641641        }
     
    654654                count = operatorstrings.size() - arithmeticoperatorscount;
    655655        }
    656         randop += randomN(count);
     656        randop += rndUint(count);
    657657        return operators[operatorstrings[randop]];
    658658}
     
    663663        {
    664664                int currsize = postfixlist.size();
    665                 int varid = randomN(varcount);
     665                int varid = rndUint(varcount);
    666666                postfixlist.push_back(vars[varid]);
    667                 if (randomN(2) == 0 && varcount > 1)
    668                 {
    669                         int varid2 = randomN(varcount - 1);
     667                if (rndUint(2) == 0 && varcount > 1)
     668                {
     669                        int varid2 = rndUint(varcount - 1);
    670670                        if (varid2 >= varid) varid2++;
    671671                        postfixlist.push_back(vars[varid2]);
     
    673673                else
    674674                {
    675                         Number *num = new Number(rnd01);
     675                        Number *num = new Number(rndDouble(1));
    676676                        postfixlist.push_back(num);
    677677                }
    678                 int opid = arithmeticoperatorscount + randomN(comparisonoperatorscount);
     678                int opid = arithmeticoperatorscount + rndUint(comparisonoperatorscount);
    679679                postfixlist.push_back(operators[operatorstrings[opid]]);
    680680                if (currsize > 0)
     
    689689        if (postfixlist.size() == 0)
    690690        {
    691                 Number *val = new Number(rnd01);
     691                Number *val = new Number(rndDouble(1));
    692692                postfixlist.push_back(val);
    693693                return -1;
    694694        }
    695         int method = randomN(postfixlist.size() < MAX_MUT_FORMULA_SIZE ? MATH_MUT_COUNT : MATH_MUT_COUNT - 1);
     695        int method = rndUint(postfixlist.size() < MAX_MUT_FORMULA_SIZE ? MATH_MUT_COUNT : MATH_MUT_COUNT - 1);
    696696        switch (method)
    697697        {
     
    704704                std::list<Token *>::iterator it = postfixlist.begin();
    705705                // insertion can be applied from 1st occurrence
    706                 int insertlocation = 1 + randomN(postfixlist.size() - 1);
     706                int insertlocation = 1 + rndUint(postfixlist.size() - 1);
    707707                std::advance(it, insertlocation);
    708708                Operator *rndop;
     
    732732                        id++;
    733733                }
    734                 int randid = randomN(numbersineval.size());
     734                int randid = rndUint(numbersineval.size());
    735735                Number *numptr = (Number *)(*numbersineval[randid]);
    736736                mutateValueOrVariable(numptr, usetime);
     
    750750                if (ops.size() > 0)
    751751                {
    752                         int randid = randomN(ops.size());
     752                        int randid = rndUint(ops.size());
    753753                        Operator *rndop;
    754754                        if (randid == (int)ops.size() - 1)
     
    783783                if (firstofpairs.size() > 0)
    784784                {
    785                         int rndid = randomN(firstofpairs.size());
     785                        int rndid = rndUint(firstofpairs.size());
    786786                        if ((*firstofpairs[rndid])->type == TokenType::NUMBER)
    787787                        {
  • cpp/frams/genetics/fL/fL_oper.cpp

    r853 r896  
    133133                if (newword->name.startsWith("rot"))
    134134                {
    135                         double rot = 2 * rnd01;
     135                        double rot = rndDouble(2);
    136136                        MathEvaluation *eval = new MathEvaluation(0);
    137137                        eval->convertString(SString::valueOf(rot).c_str());
     
    149149                {
    150150                        MathEvaluation *eval = new MathEvaluation(0);
    151                         eval->convertString(SString::valueOf(2 * rnd01 - 1).c_str());
     151                        eval->convertString(SString::valueOf(rndDouble(2) - 1).c_str());
    152152                        newword->parevals[0] = eval;
    153153                }
     
    171171        else
    172172        {
    173                 int rid = randomN(creature->rules.size());
     173                int rid = rndUint(creature->rules.size());
    174174                list = &creature->rules[rid]->objsucc;
    175175                numparams = creature->rules[rid]->objpred->npar;
     
    183183        if (method == FL_ADD_OTHER && creature->builtincount < (int)creature->words.size())
    184184        {
    185                 return creature->words[creature->wordnames[creature->builtincount + randomN((int)creature->words.size() - creature->builtincount)]];
     185                return creature->words[creature->wordnames[creature->builtincount + rndUint((int)creature->words.size() - creature->builtincount)]];
    186186        }
    187187        else
     
    209209                case FL_ADD_ROT:
    210210                {
    211                         int rottype = randomN(3);
     211                        int rottype = rndUint(3);
    212212                        switch (rottype)
    213213                        {
     
    287287                case FL_CHG_ITER:
    288288                {
    289                         if (randomN(2) == 0)
     289                        if (rndUint(2) == 0)
    290290                        {
    291291                                creature->time = creature->time + iterchangestep <= ExtValue::getDouble(FL_MAXITER) ?
     
    303303                        if (creature->rules.size() > 0)
    304304                        {
    305                                 int ruleid = randomN(creature->rules.size());
     305                                int ruleid = rndUint(creature->rules.size());
    306306                                if (!creature->rules[ruleid]->condeval)
    307307                                {
     
    340340                        if (wordswithnorules.size() > 0)
    341341                        {
    342                                 int predid = randomN(wordswithnorules.size());
     342                                int predid = rndUint(wordswithnorules.size());
    343343                                fL_Rule *newrule = new fL_Rule(0,0);
    344344                                fL_Word *pred = new fL_Word();
     
    352352                        else if (creature->rules.size() > 0)
    353353                        {
    354                                 int ruleid = randomN(creature->rules.size());
     354                                int ruleid = rndUint(creature->rules.size());
    355355                                fL_Rule *newrule = new fL_Rule(0, 0);
    356356                                fL_Word *pred = new fL_Word();
     
    392392                        if (creature->countDefinedWords() <= maxdefinedwords)
    393393                        {
    394                                 int npar = randomN(ExtValue::getInt(FL_MAXPARAMS, false));
     394                                int npar = rndUint(ExtValue::getInt(FL_MAXPARAMS, false));
    395395                                for (int i = 0; i < maxdefinedwords; i++)
    396396                                {
     
    421421                                if (list->size() > 1)
    422422                                {
    423                                         int rndid = randomN(list->size() - 1);
     423                                        int rndid = rndUint(list->size() - 1);
    424424                                        int j = 0;
    425425                                        std::list<fL_Word *>::iterator it = list->begin();
     
    455455                        else
    456456                        {
    457                                 int rndid = randomN(list->size());
     457                                int rndid = rndUint(list->size());
    458458                                std::list<fL_Word *>::iterator it = list->begin();
    459459                                std::advance(it, rndid);
     
    482482                        int tmp = 0;
    483483                        std::list<fL_Word *> *list = selectRandomSequence(creature, numpars, tmp);
    484                         int rndid = randomN(list->size());
     484                        int rndid = rndUint(list->size());
    485485                        std::list<fL_Word *>::iterator it = list->begin();
    486486                        std::advance(it, rndid);
     
    512512                                fL_Branch *start = new fL_Branch(fL_Branch::BranchType::OPEN, 0, 0);
    513513                                list->insert(it, start);
    514                                 int rottype = randomN(2);
     514                                int rottype = rndUint(2);
    515515                                switch (rottype)
    516516                                {
     
    531531                        int tmp = 0;
    532532                        std::list<fL_Word *> *list = selectRandomSequence(creature, numpars, tmp);
    533                         int rndid = randomN(list->size());
     533                        int rndid = rndUint(list->size());
    534534                        std::list<fL_Word *>::iterator selectedword = list->begin();
    535535                        std::advance(selectedword, rndid);
     
    545545                                int numpars = 0;
    546546                                std::list<fL_Word *> *list = selectRandomSequence(creature, numpars, tmp);
    547                                 int rndid = randomN(list->size());
     547                                int rndid = rndUint(list->size());
    548548                                std::list<fL_Word *>::iterator it = list->begin();
    549549                                std::advance(it, rndid);
     
    577577                                        if (available.size() > 0)
    578578                                        {
    579                                                 int newnameid = randomN(available.size());
     579                                                int newnameid = rndUint(available.size());
    580580                                                (*selectedword)->name = available[newnameid]->name;
    581581                                        }
     
    593593                                if ((*selectedword)->npar > 0)
    594594                                {
    595                                         int randeval = randomN((*selectedword)->npar);
     595                                        int randeval = rndUint((*selectedword)->npar);
    596596                                        Param par((*selectedword)->tab, (*selectedword)->data);
    597597                                        if ((*selectedword)->builtin && (*selectedword)->name == "N"
     
    614614                                                        if (w->npar > 0)
    615615                                                        {
    616                                                                 int rndattr = randomN(w->npar);
     616                                                                int rndattr = rndUint(w->npar);
    617617                                                                if (!w->parevals[rndattr])
    618618                                                                {
     
    638638                                                                if (w->npar > 0)
    639639                                                                {
    640                                                                         int rndattr = randomN(w->npar);
     640                                                                        int rndattr = rndUint(w->npar);
    641641                                                                        for (int i = 0; i < w->npar; i++)
    642642                                                                        {
     
    752752                for (int i = 0; i < numselrules; i++)
    753753                {
    754                         int rulid = randomN(from->rules.size());
     754                        int rulid = rndUint(from->rules.size());
    755755                        fL_Rule *rul = from->rules[rulid];
    756756                        fL_Rule *newrule = new fL_Rule(0, 0);
     
    841841        creature2template->parseGenotype(g2);
    842842
    843         int numselrules = 1 + randomN(XOVER_MAX_MIGRATED_RULES);
     843        int numselrules = 1 + rndUint(XOVER_MAX_MIGRATED_RULES);
    844844        numselrules = numselrules < (int)creature1->rules.size() ? numselrules : (int)creature1->rules.size();
    845845
    846846        migrateRandomRules(creature1template, creature2, numselrules);
    847847
    848         numselrules = 1 + randomN(XOVER_MAX_MIGRATED_RULES);
     848        numselrules = 1 + rndUint(XOVER_MAX_MIGRATED_RULES);
    849849        numselrules = numselrules < (int)creature1->rules.size() ? numselrules : (int)creature1->rules.size();
    850850
Note: See TracChangeset for help on using the changeset viewer.