Beispiel #1
0
        private void randomizeInstruction(IOrganismo o)
        {
            int memPos = CRJavaUtils.randomInt(-10, 10);

            int index = o.ip() + memPos;
            int inst  = o.getMemory(index);

            inst = changeInstruction(inst);
            o.setMemory(index, inst);
        }
Beispiel #2
0
        // chamado cada vez que uma instrução é gravada em memoria
        public int mutateInstruction(int inst, IOrganismo o)
        {
            float rnd            = CRJavaUtils.random();
            float mutationChance = calcMutationChance(settings.writeInstructionMutationChance, o);

            if (rnd < mutationChance)
            {
                inst = changeInstruction(inst);
            }

            return(inst);
        }
Beispiel #3
0
        // chamado quando o erro do organismo excedeu o limite definido
        public void errorLimitAction(IOrganismo o)
        {
            float rnd            = CRJavaUtils.random();
            float error          = o.getError();
            float ratio          = error / settings.getErrorLimit;
            float mutationChance = calcMutationChance(settings.errorKillChance
                                                      * ratio, o);

            if (rnd < mutationChance)
            {
                o.fatalError();
            }
        }
Beispiel #4
0
        // Esse método é chamado quando o organismo gera um filho (podendo mudar o
        // organismo, representando decaimento, quanto mais divisões maiores as
        // chances)
        public void divisionMutation(IOrganismo o)
        {
            float rnd            = CRJavaUtils.random();
            float mutationChance = calcMutationChance(settings.getDivisionMutationChance, o);

            if (rnd < mutationChance)
            {
                /*
                 * if (mundo.size()<CONSTS.DIVISION_MIN_AMOUNT){ return; }
                 */
                randomizeInstruction(o);
                // Log.info("Mutation index:"+index+" inst:"+inst+" id:"+o.id());
            }
        }
Beispiel #5
0
        private int changeInstruction(int inst)
        {
            int instChange = CRJavaUtils.randomInt(-10, 10);

            inst += instChange;
            if (inst < 0)
            {
                inst = CRJavaUtils.randomInt(2, 10);
            }
            if (inst >= settings.getInstructionCount)
            {
                inst -= CRJavaUtils.randomInt(2, 10);
            }
            return(inst);
        }
Beispiel #6
0
        public void randomPosition(int memoryPos)
        {
            int rnd = CRJavaUtils.randomInt(0, settings.getInstructionCount);

            mundo.cpu().setMemory(memoryPos, rnd);
        }