Пример #1
0
def processResults(experiment):
	import os
	import shutil
	import numpy as np
	import pbsGridWalker.tools.plotutils as tplt
	tfs.makeDirCarefully('results', maxBackups=100)
	def fitnessFileName(gp):
		return 'NI' + str(gp['newIndividualsPerGeneration']) + '_IP' + gp['initialPopulationType'] + '_fitness'
	def columnExtractor(gp):
		outFile = fitnessFileName(gp)
		subprocess.call('cut -d \' \' -f 2 bestIndividual*.log | tail -n +4 | tr \'\n\' \' \' >> ../results/' + outFile, shell=True)
		subprocess.call('echo >> ../results/' + outFile, shell=True)
	experiment.executeAtEveryGridPointDir(columnExtractor)
	os.chdir('results')
	xlabel = 'Generations'
	ylimit = None
	yscale = 'lin'
	xscale = 'lin'
	margins = 0.5
	xlimit = None
	alpha = 0.3
	title = None

	def robustLoadTxt(ffn):
		arr0 = []
		with open(ffn, 'r') as ff:
			for line in ff:
				vals = map(float, line.split())
				arr0.append(vals)
		minlen = min([ len(vs) for vs in arr0 ])
		arr1 = []
		for vs in arr0:
			arr1.append(vs[:minlen])
		arr1 = np.array(arr1)
		return arr1

#	dataDict = { str(mg): np.loadtxt(fitnessFileName(mg)) for mg in [0.1, 0.3, 0.5, 0.7, 0.9] }
#	dataDict = { str(mg): robustLoadTxt(fitnessFileName(mg)) for mg in [0.1, 0.3, 0.5, 0.7, 0.9] }

#	tplt.plotAverageTimeSeries(dataDict, 'Error', 'mg.png',
#	                           title=title, legendLocation=None, xlabel=xlabel,
#	                           xlimit=xlimit, ylimit=ylimit, figsize=(2.5,4), xscale=xscale, yscale=yscale, margins=margins)

	for ip in ['sparse', 'random']:
		dataDict = { ('NI='+str(ni)): robustLoadTxt(fitnessFileName({'initialPopulationType': ip, 'newIndividualsPerGeneration': ni})) for ni in [1,4,16] }

		tplt.plotAllTimeSeries(dataDict, 'Fitness', 'tu_IP' + ip + '.png',
		                           title=title, legendLocation=1, xlabel=xlabel,
	  	                         xlimit=xlimit, ylimit=ylimit, xscale=xscale, yscale=yscale, margins=margins, alpha=alpha)

#	def plotAllTSForInitalPopulationType(initPopType):
#		title = None
#		dataDict = {attachments[x]: -1.*np.loadtxt(fitnessFileName(x, initPopType)) for x in attachments.keys()}
#		tplt.plotAverageTimeSeries(dataDict, 'Error', 'errorComparison_GENS50_IP' + initPopType + '.png', title=title, legendLocation=None, xlabel=xlabel, xlimit=50, ylimit=ylimit, figsize=(2.5,4), xscale=xscale, yscale=yscale, margins=margins)
#		tplt.plotAllTimeSeries(dataDict, 'Error', 'errorAllTrajectories_GEN50_IP' + initPopType + '.png', title=title, legendLocation=None, xlabel=xlabel, xlimit=50, ylimit=ylimit, figsize=(2.5,4), xscale=xscale, yscale=yscale, margins=margins, alpha=alpha)
#		tplt.plotAverageTimeSeries(dataDict, 'Error', 'errorComparison_IP' + initPopType + '.png', title=title, legendLocation=1, xlabel=xlabel, xlimit=500, ylimit=ylimit, xscale=xscale, yscale=yscale, margins=margins)
#		tplt.plotAllTimeSeries(dataDict, 'Error', 'errorAllTrajectories_IP' + initPopType + '.png', title=title, legendLocation=1, xlabel=xlabel, xlimit=500, ylimit=ylimit, xscale=xscale, yscale=yscale, margins=margins, alpha=alpha)
#	for ip in initialPopulationTypes:
#		plotAllTSForNew(ip)
	os.chdir('..')
Пример #2
0
def processResults(experiment):
	import os
	import numpy as np
	import pbsGridWalker.tools.plotutils as tplt
	tfs.makeDirCarefully('results', maxBackups=100)

	# We'll take a look at some parameters vs relative mutation rate at several stages (generation counts) along the evolutionary process

	# Linear stages
	stagesToConsider = 5
	stages = tal.splitIntegerRangeIntoStages(0, evsAdditionalParams['genStopAfter'], stagesToConsider)

	##### Extracting and plotting the distance to the maximally modular morphology (MMM) for various values relative mutation rate #####
	# mmmmdist and similar abbreviations stand for "minimal distance to the maximally modular morphology" (across the Pareto front)

	xlabel = r'$P_{mm}$'
	fieldNames = [ 'gen {}'.format(st) for st in stages ]

	def generateMinMMMDistTimeSlices(gridPoint):
		return [ gctools.minParetoFrontHammingDistanceToMMM(gen) for gen in stages ]
	tplt.plotComputationVariableAgainstParameter(experiment, 'mmmmd', generateMinMMMDistTimeSlices, 'probabilityOfMutatingClass0',
	                                     fieldNames=fieldNames, xlabel=xlabel, ylabel=r'$\mu$')

	def generateFitnessTimeSlices(gridPoint):
		bestIndividualData = np.loadtxt('bestIndividual{}.log'.format(gridPoint['randomSeed']))
		fitnessData = []
		for genRec in range(bestIndividualData.shape[0]):
			gen = int(bestIndividualData[genRec,0])
			if gen in stages:
				fitnessData.append(bestIndividualData[genRec,1]) # WILL break if the best individual records are not in the order of increasing generation
		return fitnessData
	tplt.plotComputationVariableAgainstParameter(experiment, 'error', generateFitnessTimeSlices, 'probabilityOfMutatingClass0',
	                                     fieldNames=fieldNames, transform=lambda x: x, yscale='lin', xlabel=xlabel, ylabel=r'$\log_10 E$', strips='conf95', forcedYLabelPos=[0.05,1])
def processResults(experiment):
	import os
	import shutil
	import numpy as np
	import pbsGridWalker.tools.plotutils as tplt
	tfs.makeDirCarefully('results', maxBackups=100)
	def fitnessFileName(sensAttType, initPopType):
		return 'SA' + sensAttType + '_IP' + initPopType + '_fitness'
	def columnExtractor(gp):
		outFile = fitnessFileName(gp['sensorAttachmentType'], gp['initialPopulationType'])
		subprocess.call('cut -d \' \' -f 2 bestIndividual*.log | tail -n +4 | tr \'\n\' \' \' >> ../results/' + outFile, shell=True)
		subprocess.call('echo >> ../results/' + outFile, shell=True)
	experiment.executeAtEveryGridPointDir(columnExtractor)
	os.chdir('results')
	xlabel = 'Generations'
	ylimit = None
	yscale = 'log'
	xscale = 'log'
	margins = 0.5
	xlimit = 500
	alpha=0.3
	def plotAllTSForInitalPopulationType(initPopType):
		title = None # 'Fitness time series for the two types of sensors attachment'
		dataDict = {attachments[x]: -1.*np.loadtxt(fitnessFileName(x, initPopType)) for x in attachments.keys()}
		tplt.plotAverageTimeSeries(dataDict, 'Error', 'errorComparison_GENS50_IP' + initPopType + '.png', title=title, legendLocation=None, xlabel=xlabel, xlimit=50, ylimit=ylimit, figsize=(2.5,4), xscale=xscale, yscale=yscale, margins=margins)
		tplt.plotAllTimeSeries(dataDict, 'Error', 'errorAllTrajectories_GEN50_IP' + initPopType + '.png', title=title, legendLocation=None, xlabel=xlabel, xlimit=50, ylimit=ylimit, figsize=(2.5,4), xscale=xscale, yscale=yscale, margins=margins, alpha=alpha)
		tplt.plotAverageTimeSeries(dataDict, 'Error', 'errorComparison_IP' + initPopType + '.png', title=title, legendLocation=1, xlabel=xlabel, xlimit=500, ylimit=ylimit, xscale=xscale, yscale=yscale, margins=margins)
		tplt.plotAllTimeSeries(dataDict, 'Error', 'errorAllTrajectories_IP' + initPopType + '.png', title=title, legendLocation=1, xlabel=xlabel, xlimit=500, ylimit=ylimit, xscale=xscale, yscale=yscale, margins=margins, alpha=alpha)
	for ip in initialPopulationTypes:
		plotAllTSForInitalPopulationType(ip)
	os.chdir('..')
Пример #4
0
def processResults(experiment):
	tfs.makeDirCarefully('results', maxBackups=100)
	plotTTCvsMMMD(experiment)

	def gridFileNamePrefix(gridPoint):
		if gridPoint['probabilityOfMutatingClass0'] == 0.2:
			if gridPoint['compositeClass0'] == 'integerVectorSymmetricRangeMutations':
				return 'move_sensor_by_1_segment'
			elif gridPoint['compositeClass0'] == 'integerVectorRandomJumps':
				return 're-generate_morphology'
		elif gridPoint['probabilityOfMutatingClass0'] == 0 and gridPoint['compositeClass0'] == 'integerVectorSymmetricRangeMutations':
				return 'no_morphological_mutation'
		raise ValueError('Wrong point {} in the non-RS grid'.format(gridPoint))

	plotErrorTSs(experiment, gridFileNamePrefix)
	plotMinMMMDistTSs(experiment, gridFileNamePrefix)
Пример #5
0
def processResults(experiment):
	import os
	import shutil
	import numpy as np
	import pbsGridWalker.tools.plotutils as tplt

	tfs.makeDirCarefully('results', maxBackups=100)

	def fitnessFileName(paramsDict):
		gid = 'NOGID'
		if paramsDict['lineageInjectionPeriod'] == 30000:
			if paramsDict['individual'] == 'ctrnnDiscreteWeightsFleetOfIdenticalsFixedFitness':
				gid = '1'
			elif paramsDict['individual'] == 'ctrnnDiscreteWeightsFleetOfIdenticalsEvolvableFitness':
				gid = '2'
		elif paramsDict['lineageInjectionPeriod'] == 50:
			if paramsDict['mutatedLineagesRatio'] == 0.:
				if paramsDict['evolver'] == 'ageFunction':
					if paramsDict['initialPopulationType'] == 'random':
						gid = '3'
					elif paramsDict['initialPopulationType'] == 'sparse':
						gid = '6'
				elif paramsDict['evolver'] == 'ageFunctionSparsityBiased':
					if paramsDict['initialPopulationType'] == 'random':
						gid = '4'
					elif paramsDict['initialPopulationType'] == 'sparse':
						gid = '5'
			elif paramsDict['mutatedLineagesRatio'] == 1.0:
				if paramsDict['lineageMutationType'] == 'individualClassDefault':
					gid = '7'
				elif paramsDict['lineageMutationType'] == 'randomJump':
					gid = '8'
		if gid == 'NOGID':
			raise ValueError('Unclassified parameter dictionary {}'.format(paramsDict))
		return 'gid{}'.format(gid)

	def columnExtractor(gp):
		print('Extracting fitness times series to {}...'.format(fitnessFileName(gp)))
		outFile = fitnessFileName(gp)
		subprocess.call('cut -d \' \' -f 2 bestIndividual*.log | tail -n +4 | tr \'\n\' \' \' >> ../results/' + outFile, shell=True)
		subprocess.call('echo >> ../results/' + outFile, shell=True)

	experiment.executeAtEveryGridPointDir(columnExtractor)

	def plotAll():
		os.chdir('results')
		xlabel = 'Generations'
		ylimit = None
		yscale = 'lin'
		xscale = 'lin'
		margins = 0.5
		xlimit = 6000
		alpha = 0.3
		title = None
#		figsize = (2.5,4)
		figsize = None
		striptype = 'conf95'

		filenames = [ 'gid{}'.format(x) for x in range(1,9) ]
		dataDict = { fn: np.loadtxt(fn) for fn in filenames }

		comp3 = { tsn: dataDict[fn] for tsn,fn in {'no turning': 'gid3', 'smooth turning': 'gid7', 'abrupt turning': 'gid8'}.items() }

		comparisons = { 'comp3': comp3 }

		for e,d in comparisons.items():
			tplt.plotAverageTimeSeries(d, 'Fitness', e + '-avg.png',
			                           title=title, legendLocation=4, xlabel=xlabel,
			                           xlimit=xlimit, ylimit=ylimit, figsize=figsize, xscale=xscale, yscale=yscale, margins=margins, strips=striptype)
			tplt.plotAllTimeSeries(d, 'Fitness', e + '-all.png', alpha=alpha,
			                       title=title, legendLocation=4, xlabel=xlabel,
			                       xlimit=xlimit, ylimit=ylimit, figsize=figsize, xscale=xscale, yscale=yscale, margins=margins)

		os.chdir('..')

	plotAll()