Example #1
0
	def myProgram( self ):
		c = None

		c = breve.createInstances( breve.PushProgram, 1 )
		c.parse( self.pushCode.getString() )
		self.pushInterpreter.pushCode( c )
		breve.deleteInstances( c )
Example #2
0
	def randC( self ):
		c = None

		c = breve.createInstances( breve.PushProgram, 1 )
		c.makeRandomCode( self.pushInterpreter, 80 )
		self.pushInterpreter.pushCode( c )
		breve.deleteInstances( c )
Example #3
0
	def friendProgram( self ):
		c = None

		c = breve.createInstances( breve.PushProgram, 1 )
		c.parse( self.closestFriend().getPushCode().getString() )
		self.pushInterpreter.pushCode( c )
		breve.deleteInstances( c )
Example #4
0
	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))
Example #5
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
Example #6
0
	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
Example #7
0
	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()
Example #8
0
	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 )
Example #9
0
	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 )
Example #10
0
	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()
Example #11
0
    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 )
Example #13
0
    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)
Example #14
0
File: Real.py Project: B-Rich/breve
	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 )
Example #15
0
	def iterate(self):
		self.age = self.getAge()

		if self.age >= LIFESPAN:
			self.getController().unwatch(self)
			breve.deleteInstances(self)

		self.updateSexuality()
Example #16
0
 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
Example #17
0
    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
Example #18
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)
Example #19
0
File: Real.py Project: B-Rich/breve
	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
Example #20
0
File: Push.py Project: B-Rich/breve
	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 )
Example #21
0
File: Push.py Project: B-Rich/breve
	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 )
Example #22
0
    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)
Example #23
0
    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
Example #24
0
    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
Example #25
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)
Example #26
0
    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()
Example #27
0
    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 )
Example #30
0
	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 )
Example #31
0
    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)
Example #32
0
    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)
Example #33
0
    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
Example #34
0
	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
Example #35
0
    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 )
Example #37
0
	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()
Example #41
0
	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 ) ) )
Example #43
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 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 )
Example #45
0
    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)))
Example #46
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()
Example #47
0
    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()
Example #49
0
    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
Example #51
0
	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 )
Example #54
0
    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 )
Example #56
0
	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 )
Example #57
0
    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)
Example #59
0
    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)