public override void executa(IOrganismo o) { int memSize = o.getReg(getByteOrganismo(o, 1)); if (o.child != null) { mundo.dealloc(o.child); o.clearChild(); o.fatalError(); return; } memSize = ALifeConsts.validateMemorySize(o, memSize); if (memSize == 0) { o.fatalError(); return; } IOrganismo child = mundo.alloc(memSize, o); if (child.isAlive()) { o.addFitness(); o.setChild(child); o.setReg(getByteOrganismo(o, 2), child.sp()); } else { o.error(); o.setReg(getByteOrganismo(o, 2), 0); } }
// chamado quando o erro do organismo excedeu o limite definido public void errorLimitAction(IOrganismo o) { double rnd = Utils.RandomDouble(); float error = o.getError(); float ratio = error / settings.getErrorLimit; float mutationChance = calcMutationChance(settings.errorKillChance * ratio, o); if (rnd < mutationChance) { o.fatalError(); } }
public override void executa(IOrganismo o) { mundo.getMutation().divisionMutation(o); if (o.child != null) { if (!o.child.isAlive()) { mundo.dealloc(o.child); o.criticalError(); o.clearChild(); return; } o.child.parent = o; if (mundo.start(o.child)) { if (o.child == null) { o.clearChild(); return; } o.addChild(); o.child.clearParent(); o.clearChild(); o.addFitness(); } else { o.clearChild(); o.criticalError(); } } else { o.fatalError(); } }