def myProgram( self ): c = None c = breve.createInstances( breve.PushProgram, 1 ) c.parse( self.pushCode.getString() ) self.pushInterpreter.pushCode( c ) breve.deleteInstances( c )
def randC( self ): c = None c = breve.createInstances( breve.PushProgram, 1 ) c.makeRandomCode( self.pushInterpreter, 80 ) self.pushInterpreter.pushCode( c ) breve.deleteInstances( c )
def friendProgram( self ): c = None c = breve.createInstances( breve.PushProgram, 1 ) c.parse( self.closestFriend().getPushCode().getString() ) self.pushInterpreter.pushCode( c ) breve.deleteInstances( c )
def iterate(self): self.age = self.getAge() if self.age >= BIRTH_TIME: sex = random() if sex < 0.5: #TODO restore 0.5 from Male import MaleVehicle child = breve.createInstances(MaleVehicle, 1) else: from Female import FemaleVehicle child = breve.createInstances(FemaleVehicle, 1) child.move(self.getLocation()) child.rotate(d.UP, math.pi*2*random()) if self.getController().unwatch(self): self.getController().watch(child) # Continue to watch the child (if the egg was the camera target) breve.deleteInstances(self) return shape = breve.createInstances(breve.Sphere, 1).initWithSphere(self.age/BIRTH_TIME*(MAX_SIZE-MIN_SIZE)+MIN_SIZE) self.setShape(shape) self.offset(breve.vector(0,0.01,0))
def createPopulation( self ): n = 0 if self.pop1: breve.deleteInstances( self.pop1 ) if self.pop2: breve.deleteInstances( self.pop2 ) self.pop1 = breve.createInstances( breve.PushGPIndividuals, self.populationSize ) self.pop2 = breve.createInstances( breve.PushGPIndividuals, self.populationSize ) self.pop1.setInterpreter( self.interpreter ) self.pop2.setInterpreter( self.interpreter ) self.current = self.pop1 self.next = self.pop2 if self.seed: self.pop1[ 0 ].parse( self.seed ) n = 0 while ( n < self.countFitnessCases() ): self._solutionCountsGeneration.append( 0.000000 ) self._solutionCountsTotal.append( 0.000000 ) self._solutionRatesGeneration.append( 0.000000 ) self._solutionRatesTotal.append( 0.000000 ) n = ( n + 1 ) self.inited = 1
def untrack( self, theDiffusable ): '''Removes a OBJECT(PatchChemcial) from the patch grid.''' chem = None newChems = breve.objectList() if self.chemicalConcentrationMatrix[ theDiffusable ]: breve.deleteInstances( self.chemicalConcentrationMatrix[ theDiffusable ] ) for chem in self.chemicals: if ( chem != theDiffusable ): newChems.append( chem ) self.chemicals = newChems for chem in self.diffusingChemicals: if ( chem != theDiffusable ): newChems.append( chem ) self.diffusingChemicals = newChems for chem in self.linearlyDecayingChemicals: if ( chem != theDiffusable ): newChems.append( chem ) self.linearlyDecayingChemicals = newChems for chem in self.exponentiallyDecayingChemicals: if ( chem != theDiffusable ): newChems.append( chem ) self.exponentiallyDecayingChemicals = newChems
def generatePopulation( self ): n = 0 newI = None if self.populations[ 0 ]: breve.deleteInstances( self.populations[ 0 ] ) if self.populations[ 1 ]: breve.deleteInstances( self.populations[ 1 ] ) if ( self.individualClass == '' ): raise Exception( '''A GeneticAlgorithmIndividual subclass must be specified using the method "set-individual-class"''' ) self.populations = [ [], [] ] n = 0 while ( n < self.populationSize ): newI = self.controller.makeNewInstance( self.individualClass ) self.populations[ 0 ].append( newI ) self.addDependency( newI ) newI = self.controller.makeNewInstance( self.individualClass ) self.populations[ 1 ].append( newI ) self.addDependency( newI ) n = ( n + 1 ) if self.seed: self.populations[ 0 ][ 0 ].copy( self.seed ) self.currentIndividual = -1 self.switchIndividual()
def makePrismaticJoint( self ): if self.joint: breve.deleteInstances( self.joint ) self.joint = breve.createInstances( breve.ExamplePrismaticJoint, 1 ) self.joint.link( self.links[ 0 ], self.links[ 1 ], breve.vector( 0, -1.000000, 0 ), breve.vector( 0, 1.000000, 0 ), breve.vector( 0, 1, 0 ) ) self.joint.setStrengthLimit( 1000 )
def iterate( self ): self.age = ( self.age + 1 ) if ( self.landed == 0 ): self.setAcceleration( breve.vector( 0, -10, 0 ) ) if ( self.age > 10 ): breve.deleteInstances( self )
def changeDrivers( self ): newDriver = 0 newOffset = breve.vector() if self.locked: return newOffset = ( breve.randomExpression( breve.vector( 30, 6, 30 ) ) + breve.vector( -15, 1, -15 ) ) if ( breve.length( newOffset ) < 9 ): newOffset = ( ( 9 * newOffset ) / breve.length( newOffset ) ) self.panCameraOffset( newOffset, 30 ) self.seats[ self.currentSeat ].setDistance( breve.length( self.wigglyThing.getLocation() ) ) self.currentSeat = ( self.currentSeat + 1 ) if ( self.currentSeat > 3 ): self.breedNewMonkeys() self.pickDrivers() newDriver = self.seats[ self.currentSeat ].getNumber() if self.wigglyThing: breve.deleteInstances( self.wigglyThing ) self.wigglyThing = breve.createInstances( breve.Creature, 1 ) self.wigglyThing.initWith( self.seats[ self.currentSeat ].getGenome() ) self.wigglyThing.move( breve.vector( 0, 3, 0 ) ) self.watch( self.wigglyThing ) self.schedule( 'changeDrivers', ( self.getTime() + 20.000000 ) ) self.displayCurrentDriver()
def makeFixedJoint(self): if self.joint: breve.deleteInstances(self.joint) self.joint = breve.createInstances(breve.FixedJoint, 1) self.joint.link(self.links[0], self.links[1], breve.vector(0, -1.000000, 0), breve.vector(0, 1.000000, 0))
def destroy( self ): blockList = breve.objectList() block = None breve.deleteInstances( self.outsideFrame ) for blockList in self.blocks: for block in blockList: breve.deleteInstances( block )
def setSize(self, newSize): """Changes the size of the floor to newSize.""" if self.shape: breve.deleteInstances(self.shape) self.shape = breve.createInstances(breve.Cube, 1).initWith(newSize) self.setShape(self.shape)
def deleteInstance( self ): '''Produces a dialog box (if supported by the current breve engine) asking if the user wants to delete the object. This is typically used in response to a user action like a click or menu callback.''' result = 0 result = self.controller.showDialog( '''Really Delete Instance?''', '''Deleting this object may cause a fatal error in the simulation. Really remove it?''', 'Okay', 'Cancel' ) if result: breve.deleteInstances( self )
def iterate(self): self.age = self.getAge() if self.age >= LIFESPAN: self.getController().unwatch(self) breve.deleteInstances(self) self.updateSexuality()
def killNoTagZone(self): """ Destroys the no tag zone around the flag. """ if self.my_no_tag_zone: # A call to the breve engine to delete the # no tag zone. del won't do it here... breve.deleteInstances(self.my_no_tag_zone) self.my_no_tag_zone = None
def deleteRootNode(self): """Deletes the root node and all connected objects. This method "clears" the GADirectedGraph so that it may be reused.""" if self.rootNode: self.removeDependency(self.rootNode) self.rootNode.destroyConnectedObjects() breve.deleteInstances(self.rootNode) self.rootNode = 0
def makeBallJoint(self): if self.joint: breve.deleteInstances(self.joint) self.joint = breve.createInstances(breve.ExampleBallJoint, 1) self.joint.link(self.links[0], self.links[1], breve.vector(0, -1.000000, 0), breve.vector(0, 1.000000, 0)) self.joint.setStrengthLimit(100)
def removeLine( self, otherObject ): '''Removes the line connecting this object to otherObject.''' line = None for line in self.lines: if line.isLinked( otherObject ): breve.deleteInstances( line ) return
def read( self, fileName ): '''Reads a push program from a text file.''' f = None f = breve.createInstances( breve.File, 1 ) f.openForReading( fileName ) self.parse( f.readAsString() ) breve.deleteInstances( f )
def write( self, fileName ): '''Writes this push program to a text file.''' f = None f = breve.createInstances( breve.File, 1 ) f.openForWriting( fileName ) f.write( self.getString() ) breve.deleteInstances( f )
def write(self, fileName): '''Writes this push program to a text file.''' f = None f = breve.createInstances(breve.File, 1) f.openForWriting(fileName) f.write(self.getString()) breve.deleteInstances(f)
def removeLine(self, otherObject): '''Removes the line connecting this object to otherObject.''' line = None for line in self.lines: if line.isLinked(otherObject): breve.deleteInstances(line) return
def deleteRootNode(self): '''Deletes the root node and all connected objects. This method "clears" the GADirectedGraph so that it may be reused.''' if self.rootNode: self.removeDependency(self.rootNode) self.rootNode.destroyConnectedObjects() breve.deleteInstances(self.rootNode) self.rootNode = 0
def read(self, fileName): '''Reads a push program from a text file.''' f = None f = breve.createInstances(breve.File, 1) f.openForReading(fileName) self.parse(f.readAsString()) breve.deleteInstances(f)
def toggleRecordingToMovie(self): if self.movie: self.movieMenu.uncheck() self.movie.close() breve.deleteInstances(self.movie) return self.movie = breve.createInstances(breve.Movie, 1) self.movie.record('simulation.mpeg') self.movieMenu.check()
def deleteInstance(self): '''Produces a dialog box (if supported by the current breve engine) asking if the user wants to delete the object. This is typically used in response to a user action like a click or menu callback.''' result = 0 result = self.controller.showDialog( '''Really Delete Instance?''', '''Deleting this object may cause a fatal error in the simulation. Really remove it?''', 'Okay', 'Cancel') if result: breve.deleteInstances(self)
def toggleRecordingToMovie( self ): if self.movie: self.movieMenu.uncheck() self.movie.close() breve.deleteInstances( self.movie ) return self.movie = breve.createInstances( breve.Movie, 1 ) self.movie.record( 'simulation.mpeg' ) self.movieMenu.check()
def mutate( self ): c = None size = 0 size = ( self.pushInterpreter.getIntegerStackTop() % 15 ) if ( size > 0 ): c = breve.createInstances( breve.PushProgram, 1 ) self.pushInterpreter.copyCodeStackTop( c ) c.mutate( self.pushInterpreter, size ) self.pushInterpreter.popIntegerStack() self.pushInterpreter.popCodeStack() self.pushInterpreter.pushCode( c ) breve.deleteInstances( c )
def destroyConnectedObjectsInternal(self, seenhash): connection = None if seenhash[self]: return seenhash[self] = 1 for connection in self.connections: if connection.getTarget(): connection.getTarget().destroyConnectedObjectsInternal(seenhash) breve.deleteInstances(connection) breve.deleteInstances(self)
def destroyConnectedObjectsInternal(self, seenhash): connection = None if seenhash[self]: return seenhash[self] = 1 for connection in self.connections: if connection.getTarget(): connection.getTarget().destroyConnectedObjectsInternal( seenhash) breve.deleteInstances(connection) breve.deleteInstances(self)
def setMigrationPercent(self, percent): '''Sets the probability of migration to percent%. This specifies the approximate percentage that individuals will migrate to another host during reproduction, if migration is enabled and migration hosts are specified using METHOD(set-migration-hosts).''' if (percent == 0): breve.deleteInstances(self.migrationServer) else: if (not self.migrationServer): self.migrationServer = breve.createInstances( breve.NetworkServer, 1) self.migrationServer.listen(self.migrationPort) self.migrationServer.setUploadRecipient(self) self.transferOut = breve.createInstances(breve.GAIndividualTransporter, 1) self.migrationPercent = percent
def setMigrationPercent( self, percent ): '''Sets the probability of migration to percent%. This specifies the approximate percentage that individuals will migrate to another host during reproduction, if migration is enabled and migration hosts are specified using METHOD(set-migration-hosts).''' if ( percent == 0 ): breve.deleteInstances( self.migrationServer ) else: if ( not self.migrationServer ): self.migrationServer = breve.createInstances( breve.NetworkServer, 1 ) self.migrationServer.listen( self.migrationPort ) self.migrationServer.setUploadRecipient( self ) self.transferOut = breve.createInstances( breve.GAIndividualTransporter, 1 ) self.migrationPercent = percent
def loadImage(self, file): '''Loads an image from a file, returning an OBJECT(Image) object. <P> This method is provided for backwards compatability only. The p <p>''' image = None print '''warning: the Control method "load-image" is now deprecated!''' image = breve.createInstances(breve.Image, 1) if image.load(file): self.addDependency(image) else: breve.deleteInstances(image) return -1 return image.getTextureNumber()
def randomize( self, nMax, np, cp, p = 0.500000 ): '''Randomizes this genome by creating a directed graph containing up to nMax nodes. Sets the number of node and connection parameters to np and cp, respectively. The optional connection probability, p, specifies the probability that a connection will be made from one node to another.''' count = 0 nodes = breve.objectList() m = None n = None connection = None keep = breve.hash() self.deleteRootNode() count = ( breve.randomExpression( ( nMax - 1 ) ) + 1 ) if ( count < 2 ): count = ( count + 1 ) nodes = breve.createInstances( breve.GADirectedGraphNodes, count ) nodes.setParameterLength( np ) nodes.randomizeParameters() for n in nodes: for m in nodes: if ( ( n != m ) and ( breve.randomExpression( 1.000000 ) < p ) ): connection = n.connect( m, [] ) connection.setParameterLength( cp ) connection.randomizeParameters() self.rootNode = self.pickRootNode( nodes ) if ( not self.rootNode ): self.rootNode = breve.createInstances( breve.GADirectedGraphNode, 1 ) self.rootNode.setParameterLength( np ) self.rootNode.randomizeParameters() for n in self.rootNode.getConnectedNodes(): keep[ n ] = 1 for n in nodes: if ( not keep[ n ] ): breve.deleteInstances( n ) self.addDependency( self.rootNode )
def computeDiversity( self, t ): '''Computes the diversity of the current population, as defined by the OBJECT(PushDiversityPool) object. Returns the number of unique "species" which differ by less than t points.''' pool = None n = 0 pool = breve.createInstances( breve.PushDiversityPool, 1 ) pool.setTolerance( t ) n = 0 while ( n < breve.length( self.current ) ): pool.add( self.current[ n ] ) n = ( n + 1 ) n = pool.getSize() breve.deleteInstances( pool ) return n
def createMenu(self, menuName, theObject, methodName): '''This method initializes a menu item with title menuName for theObject which will call methodName when selected.''' self.name = menuName self.method = methodName self.owner = theObject self.owner.addDependency(self) self.menuPointer = breve.breveInternalFunctionFinder.menuItemNew( self, self.owner, self.method, self.name) if (not self.menuPointer): print '''error adding menu item for method %s.''' % (methodName) breve.deleteInstances(self) self.enabled = 1 return 0 return self
def computeDiversity(self, t): '''Computes the diversity of the current population, as defined by the OBJECT(PushDiversityPool) object. Returns the number of unique "species" which differ by less than t points.''' pool = None n = 0 pool = breve.createInstances(breve.PushDiversityPool, 1) pool.setTolerance(t) n = 0 while (n < breve.length(self.current)): pool.add(self.current[n]) n = (n + 1) n = pool.getSize() breve.deleteInstances(pool) return n
def loadImage( self, file ): '''Loads an image from a file, returning an OBJECT(Image) object. <P> This method is provided for backwards compatability only. The p <p>''' image = None print '''warning: the Control method "load-image" is now deprecated!''' image = breve.createInstances( breve.Image, 1 ) if image.load( file ): self.addDependency( image ) else: breve.deleteInstances( image ) return -1 return image.getTextureNumber()
def createMenu( self, menuName, theObject, methodName ): '''This method initializes a menu item with title menuName for theObject which will call methodName when selected.''' self.name = menuName self.method = methodName self.owner = theObject self.owner.addDependency( self ) self.menuPointer = breve.breveInternalFunctionFinder.menuItemNew( self, self.owner, self.method, self.name ) if ( not self.menuPointer ): print '''error adding menu item for method %s.''' % ( methodName ) breve.deleteInstances( self ) self.enabled = 1 return 0 return self
def checkPenetration( self ): link = None self.running = 1 if self.body.checkSelfPenetration(): breve.deleteInstances( breve.allInstances( "Links" ) ) breve.allInstances( "SineJoints" ).activate() self.startlocation = breve.vector( 0, 0, 0 ) for link in breve.allInstances( "Links" ): self.startlocation = ( self.startlocation + link.getLocation() ) if breve.length( breve.allInstances( "Links" ) ): self.startlocation = ( self.startlocation / breve.length( breve.allInstances( "Links" ) ) ) self.flag.move( ( self.startlocation - breve.vector( 0, ( self.startlocation.y - 2 ), 0 ) ) )
def dropDead( self ): c = None self.controller.incrementDeaths() c = breve.createInstances( breve.Corpse, 1 ) c.move( self.getLocation() ) c.point( breve.vector( 0, 1, 0 ), self.getVelocity() ) breve.deleteInstances( self.pushCode ) breve.deleteInstances( self.pushInterpreter ) breve.deleteInstances( self.shape ) breve.deleteInstances( self )
def checkPenetration(self): link = None self.running = 1 if self.body.checkSelfPenetration(): breve.deleteInstances(breve.allInstances("Links")) breve.allInstances("SineJoints").activate() self.startlocation = breve.vector(0, 0, 0) for link in breve.allInstances("Links"): self.startlocation = (self.startlocation + link.getLocation()) if breve.length(breve.allInstances("Links")): self.startlocation = (self.startlocation / breve.length(breve.allInstances("Links"))) self.flag.move( (self.startlocation - breve.vector(0, (self.startlocation.y - 2), 0)))
def go(self): self.interpreter.pushInteger(100) self.interpreter.clearStacks() self.code = breve.createInstances(breve.PushProgram, 1).parse("""( 0 0 INTEGER./ )""") self.code2 = breve.createInstances(breve.PushProgram, 1).parse( """( 1 ( 3 ) ( 4 5 6 ) 8 4 CALLBACK-TEST CALLBACK2-TEST ( 1 ) ( INTEGER.* ) )""" ) self.testSetFromList() print "Discrepancy", self.code.getDiscrepancy(self.code2) print """Top level diff""", self.code.getTopLevelDifference(self.code2) print self.code2.getString() self.interpreter.run(self.code2) print """Effort = """, self.interpreter.getEffort() self.interpreter.printStacks() self.interpreter.printConfig() self.interpreter.clearStacks() print self.interpreter.getIntegerStackTop() breve.deleteInstances(self.interpreter) self.controller.endSimulation()
def mutate(self, temp_object): print temp_object.pushCode.getList() c = breve.createInstances(breve.PushProgram, 1) temp_object.pushInterpreter.copyCodeStackTop(c) c.mutate(temp_object.pushInterpreter) self.object1.pushInterpreter.clearStacks() if len(c.getList()) > 0: print "diversity", temp_object.pushCode.getTopLevelDifference(c) print temp_object.pushCode.getTopLevelSize(), c.getTopLevelSize() temp_object.pushInterpreter.pushCode(c) b = temp_object.pushCode temp_object.pushCode = c breve.deleteInstances(b) else: temp_object.pushInterpreter.pushCode(temp_object.pushCode) print temp_object.pushCode.getList()
def go(self): self.interpreter.pushInteger(100) self.interpreter.clearStacks() self.code = breve.createInstances(breve.PushProgram, 1).parse('''( 0 0 INTEGER./ )''') self.code2 = breve.createInstances(breve.PushProgram, 1).parse( '''( 1 ( 3 ) ( 4 5 6 ) 8 4 CALLBACK-TEST CALLBACK2-TEST ( 1 ) ( INTEGER.* ) )''' ) self.testSetFromList() print 'Discrepancy', self.code.getDiscrepancy(self.code2) print '''Top level diff''', self.code.getTopLevelDifference(self.code2) print self.code2.getString() self.interpreter.run(self.code2) print '''Effort = ''', self.interpreter.getEffort() self.interpreter.printStacks() self.interpreter.printConfig() self.interpreter.clearStacks() print self.interpreter.getIntegerStackTop() breve.deleteInstances(self.interpreter) self.controller.endSimulation()
def randomize(self, nMax, np, cp, p=0.500000): '''Randomizes this genome by creating a directed graph containing up to nMax nodes. Sets the number of node and connection parameters to np and cp, respectively. The optional connection probability, p, specifies the probability that a connection will be made from one node to another.''' count = 0 nodes = breve.objectList() m = None n = None connection = None keep = breve.hash() self._nodeParamCount = np self._connParamCount = cp self.deleteRootNode() count = (breve.randomExpression((nMax - 1)) + 1) if (count < 2): count = (count + 1) nodes = breve.createInstances(breve.GADirectedGraphNodes, count) nodes.setParameterLength(np) nodes.randomizeParameters() for n in nodes: for m in nodes: if ((n != m) and (breve.randomExpression(1.000000) < p)): connection = n.connect(m, []) connection.setParameterLength(cp) connection.randomizeParameters() self.rootNode = self.pickRootNode(nodes) if (not self.rootNode): self.rootNode = breve.createInstances(breve.GADirectedGraphNode, 1) self.rootNode.setParameterLength(np) self.rootNode.randomizeParameters() for n in self.rootNode.getConnectedNodes(): keep[n] = 1 for n in nodes: if (not keep[n]): breve.deleteInstances(n) self.addDependency(self.rootNode)
def autoSimplify(self, p): '''Programs generated through genetic programming are often complicated and difficult to understand. This method attempts to simplify an evolved push program while maintaining the same fitness. <P> Each time this method is invoked, a random simplification is preformed on the program p. If the simplification does not harm the fitness, p is modified to contain the simplification, otherwise, nothing happens. This method should be called repeatedly -- perhaps 100 times or more to aggressively simplify an unweildy program.''' newFitness = 0 fitness = 0 newProgram = None fitness = self.computeZeroDurationFitness(p) newProgram = breve.createInstances(breve.PushGPIndividual, 1) newProgram.copyFrom(p) if breve.randomExpression(1): newProgram.deleteRandomSubtree() else: newProgram.flattenRandomSubtree() newFitness = self.computeZeroDurationFitness(newProgram) if (newFitness == fitness): p.copyFrom(newProgram) breve.deleteInstances(newProgram) return p
def crossover_push(self, newBird, parent1, parent2): newBird.pushInterpreter.clearStacks() error = True c1 = breve.createInstances( breve.PushProgram, 1 ) c2 = breve.createInstances( breve.PushProgram, 1 ) c3 = breve.createInstances( breve.PushProgram, 1 ) parent1.pushInterpreter.copyCodeStackTop( c1 ) if ( c1.getSize() > 0 ): parent2.pushInterpreter.copyCodeStackTop( c2 ) if ( c2.getSize() > 0 ): c3.crossover( c1, c2, newBird.pushInterpreter ) if len(c3.getList()) > 0: print "diversity", parent1.pushCode.getTopLevelDifference(parent2.pushCode) print "diversity", parent1.pushCode.getTopLevelDifference(c3) print "diversity", parent2.pushCode.getTopLevelDifference(c3) newBird.pushInterpreter.pushCode( c3 ) a = self.object3.pushCode self.object3.pushCode = c3 c3 = a error = False if error: newBird.pushInterpreter.pushCode( c1 ) a = self.object3.pushCode self.object3.pushCode = c1 c1 = a breve.deleteInstances( c1 ) breve.deleteInstances( c2 ) breve.deleteInstances( c3 )
def crossover( self ): c3 = None c2 = None c1 = None c1 = breve.createInstances( breve.PushProgram, 1 ) c2 = breve.createInstances( breve.PushProgram, 1 ) c3 = breve.createInstances( breve.PushProgram, 1 ) self.pushInterpreter.copyCodeStackTop( c1 ) if ( c1.getSize() > 0 ): self.pushInterpreter.popCodeStack() self.pushInterpreter.copyCodeStackTop( c2 ) if ( c2.getSize() > 0 ): self.pushInterpreter.popCodeStack() c3.crossover( c1, c2, self.pushInterpreter ) self.pushInterpreter.pushCode( c3 ) else: self.pushInterpreter.pushCode( c1 ) breve.deleteInstances( c1 ) breve.deleteInstances( c2 ) breve.deleteInstances( c3 )
def spawn( self ): child = None tempCode = None numBirds = 0 mutRate = 0 numBirds = breve.allInstances( "Birds" ) if ( self.energy > ( 2 * 0.150000 ) ): self.controller.incrementNaturalBirths() if ( numBirds < 0 ): self.adjustEnergy( ( 0 - ( 0.150000 - ( ( ( 0 - numBirds ) * 0.150000 ) / ( 0 - 10 ) ) ) ) ) self.controller.incrementReproductiveDiscounts() else: self.adjustEnergy( ( 0 - 0.150000 ) ) child = breve.createInstances( breve.Bird, 1 ) child.setEnergy( 0.150000 ) child.setHue( self.getHue() ) child.setColor( self.controller.getRgbColor( breve.vector( ( child.getHue() * 360 ), 1, 1 ) ) ) child.move( ( self.getLocation() + ( breve.randomExpression( breve.vector( ( 1.000000 * 2 ), ( 1.000000 * 2 ), ( 1.000000 * 2 ) ) ) - breve.vector( 1.000000, 1.000000, 1.000000 ) ) ) ) child.setVelocity( breve.vector( 0, 0, 0 ) ) child.point( breve.vector( 0, 1, 0 ), breve.randomExpression( breve.vector( 1, 1, 1 ) ) ) tempCode = breve.createInstances( breve.PushProgram, 1 ) self.pushInterpreter.copyCodeStackTop( tempCode ) mutRate = self.pushInterpreter.getIntegerStackTop() self.pushInterpreter.popIntegerStack() if ( mutRate < 0 ): mutRate = ( -mutRate ) self.controller.incrementReproMutationRates( mutRate ) if ( breve.randomExpression( mutRate ) == 0 ): tempCode.mutate( self.pushInterpreter, 15 ) self.controller.incrementReproMutations() child.getPushCode().parse( tempCode.getString() ) breve.deleteInstances( tempCode )
def iterate(self): if self.current_generation < 5000: if not self.movie: self.movie = breve.createInstances(breve.Movie, 1) self.movie.record('BOID_simple.mpeg') self.updateNeighbors() birds = breve.allInstances("Bird") for bird in birds: bird.fly() self.current_generation += 1 # needed to move the agents with velocity and acceleration # also needed to detect collisions breve.Control.iterate(self) elif self.movie: self.movie.close() breve.deleteInstances(self.movie) self.movie = None
def iterate( self ): self.updateNeighbors() self.numBirds = 0 for bird in breve.allInstances( "Bird" ): if bird.isAlive: bird.fly() self.numBirds += 1 self.numPred = 0 for predator in breve.allInstances( "Predator" ): if predator.isAlive: predator.fly() self.numPred += 1 self.totalFoodSupply = 0 for feeder in breve.allInstances( "Feeder" ): if feeder.rapid: feeder.rapidGrow() self.totalFoodSupply += feeder.VirtualEnergy self.totalFoodSupply += feeder.energy if feeder.energy <= 0 and not feeder.rapid: breve.deleteInstances( feeder ) self.addRandomFeederIfNecessary(rapid=True) for corpse in breve.allInstances( "Corpse" ): corpse.changeColor() if sum(corpse.getColor()) <= 0: breve.deleteInstances( corpse.shape ) breve.deleteInstances( corpse ) self.current_generation += 1 if self.current_generation % self.breeding_season == 0: if breve.length(self.pollBirds) < self.breeding_inc*self.numBirds: new_birds = int(math.ceil(self.breeding_inc*self.numBirds)) - breve.length(self.pollBirds) breve.createInstances( breve.Bird, new_birds).dropDead(False) if breve.length(self.pollPredators) < self.breeding_inc*self.numPred: new_preds = int(math.ceil(self.breeding_inc*self.numPred)) - breve.length(self.pollPredators) breve.createInstances( breve.Predator, new_preds).dropDead(False) for i in range(int(math.ceil(self.breeding_inc*self.numBirds))/2): self.evolutionayAlgorithm(self.pollBirds) if self.numPred < self.numBirds*self.max_pop_predadors: for i in range(int(min(math.ceil(self.breeding_inc*self.numPred), self.numBirds*self.max_pop_predadors))/2): self.evolutionayAlgorithm(self.pollPredators) self.setDisplayText("Birds Alive: "+str(self.numBirds), xLoc = -0.950000, yLoc = -0.650000, messageNumber = 2, theColor = breve.vector( 1, 1, 1 )) self.setDisplayText("Predators Alive: "+str(self.numPred), xLoc = -0.950000, yLoc = -0.750000, messageNumber = 3, theColor = breve.vector( 1, 1, 1 )) self.setDisplayText("Dead Birds: "+str(self.num_dead_birds), xLoc = -0.950000, yLoc = -0.850000, messageNumber = 0, theColor = breve.vector( 1, 1, 1 )) self.setDisplayText("Dead Predators: "+str(self.num_dead_predators), xLoc = -0.950000, yLoc = -0.950000, messageNumber = 1, theColor = breve.vector( 1, 1, 1 )) # needed to move the agents with velocity and acceleration # also needed to detect collisions # print str(self.numBirdsBirth) breve.Control.iterate( self )
def destroy( self ): chem = None if ( breve.length( self.diffusingChemicals ) > 0 ): breve.deleteInstances( self.patches ) for chem in self.diffusingChemicals: breve.deleteInstances( self.chemicalConcentrationMatrix[ chem ] ) breve.deleteInstances( self.tempMatrix ) if self.gridPointer: breve.breveInternalFunctionFinder.patchGridFree( self, self.gridPointer )
def setupTest(self, i): l = None low = breve.vector() lowest = 0 for l in breve.allInstances("Links"): breve.deleteInstances(l.getShape()) breve.deleteInstances(breve.allInstances("Links")) breve.deleteInstances(breve.allInstances("Joints")) if self.body: breve.deleteInstances(self.body) self.body = breve.createInstances(breve.MultiBody, 1) self.body.setRoot(self.parser.parseTopLevel(i.getGenome().getRoot())) self.body.disableSelfCollisions() self.addDependency(self.body) self.schedule('checkPenetration', (self.getTime() + 8.000000)) self.setDisplayText('''Preparing to test %s...''' % (i), -0.950000, -0.950000) self.updateText() self.running = 0
def iterate(self): self.updateNeighbors() for bird in breve.allInstances("Bird"): if bird.isAlive: bird.fly() for predator in breve.allInstances("Predator"): if predator.isAlive: predator.fly() self.totalFoodSupply = 0 for feeder in breve.allInstances("Feeder"): if feeder.rapid: feeder.rapidGrow() self.totalFoodSupply += feeder.VirtualEnergy self.totalFoodSupply += feeder.energy if feeder.energy <= 0 and not feeder.rapid: breve.deleteInstances(feeder) self.addRandomFeederIfNecessary(rapid=True) for corpse in breve.allInstances("Corpse"): corpse.changeColor() if sum(corpse.getColor()) <= 0: breve.deleteInstances(corpse.shape) breve.deleteInstances(corpse) for i in range(breve.length(self.pollBirds)): self.evolutionayAlgorithm(self.pollBirds) for i in range(breve.length(self.pollPredators)): self.evolutionayAlgorithm(self.pollPredators) self.setDisplayText("Dead Birds: " + str(self.num_dead_birds), xLoc=-0.950000, yLoc=-0.850000, messageNumber=0, theColor=breve.vector(1, 1, 1)) self.setDisplayText("Dead Predators: " + str(self.num_dead_predators), xLoc=-0.950000, yLoc=-0.950000, messageNumber=1, theColor=breve.vector(1, 1, 1)) # needed to move the agents with velocity and acceleration # also needed to detect collisions # print str(self.numBirdsBirth) breve.Control.iterate(self)
def iterate(self): self.updateNeighbors() # moviment of Prey self.numPreys = 0 for prey in breve.allInstances("Prey"): if prey.isAlive: prey.fly() self.numPreys += 1 # moviment of Predator self.numPredators = 0 for predator in breve.allInstances("Predator"): if predator.isAlive: predator.fly() self.numPredators += 1 # management of the energy from feeders self.totalFoodSupply = 0 for feeder in breve.allInstances("Feeder"): if feeder.rapid: feeder.rapidGrow() self.totalFoodSupply += feeder.VirtualEnergy self.totalFoodSupply += feeder.energy if feeder.energy <= 0 and not feeder.rapid: breve.deleteInstances(feeder) self.addRandomFeederIfNecessary(rapid=True) # vanish corpse for corpse in breve.allInstances("Corpse"): corpse.changeColor() if sum(corpse.getColor()) <= 0: breve.deleteInstances(corpse.shape) breve.deleteInstances(corpse) print corpse.getColor() self.current_generation += 1 # breeding if self.current_generation % self.breeding_season == 0: # preys tam_prey = int(math.ceil((self.breeding_inc * self.numPreys) / 2)) if breve.length(self.pollPreys) < tam_prey * 2: new_prey = tam_prey - breve.length(self.pollPreys) breve.createInstances(breve.Prey, new_prey).dropDead(False) for i in range(tam_prey): self.evolutionayAlgorithm(self.pollPreys) # predators predator_max = self.numPreys * self.max_pop_predadors predator_breed = self.breeding_inc * self.numPredators tam_predator = int(math.ceil( min(predator_max, predator_breed) / 2)) if breve.length(self.pollPredators) < tam_predator * 2: new_preds = tam_predator - breve.length(self.pollPredators) breve.createInstances(breve.Predator, new_preds).dropDead(False) for i in range(tam_predator): self.evolutionayAlgorithm(self.pollPredators) # immigrants else: if self.numPreys < 0.2 * self.initialNumPreys: self.revive(self.pollPreys, math.floor(0.15 * self.initialNumPreys)) self.createPreys(math.floor(0.05 * self.initialNumPreys)) if self.numPredators < 0.2 * self.initialNumPredators: self.revive(self.pollPredators, math.floor(0.15 * self.initialNumPredators)) self.createPredators( math.floor(0.05 * self.initialNumPredators)) # checkpoint if self.isToSave and self.current_generation % (self.breeding_season * 25) == 0: self.save_data() self.setDisplayText("Generation: " + str( (int)(math.ceil(self.current_generation / self.breeding_season))), xLoc=-0.950000, yLoc=-0.550000, messageNumber=5, theColor=breve.vector(1, 1, 1)) self.setDisplayText("Preys Alive: " + str(self.numPreys), xLoc=-0.950000, yLoc=-0.650000, messageNumber=4, theColor=breve.vector(1, 1, 1)) self.setDisplayText("Predators Alive: " + str(self.numPredators), xLoc=-0.950000, yLoc=-0.750000, messageNumber=3, theColor=breve.vector(1, 1, 1)) self.setDisplayText("Dead Preys: " + str(self.numDeadPreys), xLoc=-0.950000, yLoc=-0.850000, messageNumber=2, theColor=breve.vector(1, 1, 1)) self.setDisplayText("Dead Predators: " + str(self.numDeadPredators), xLoc=-0.950000, yLoc=-0.950000, messageNumber=1, theColor=breve.vector(1, 1, 1)) # needed to move the agents with velocity and acceleration # also needed to detect collisions # print str(self.numBirdsBirth) breve.Control.iterate(self)