示例#1
0
文件: views.py 项目: SJaskowski/OE_2
def selekcjaKolemRuletki(ustawienia, populacja=[]):
    score = {}
    lista_wynikow = []
    Populacja_elity = []
    najlepsi = []
    if ustawienia.rodzaj_Optymalizacj == "Max":
        # elita

        for x in populacja:
            lista_wynikow.append(x.wynik)
        elita = heapq.nlargest(ustawienia.elita, lista_wynikow)
        for i in elita:
            x = populacja[elita.index(i)]
            Populacja_elity.append(x)
            populacja.remove(x)
            lista_wynikow = []
        # elita
        for indiv in populacja:
            score.update({indiv: indiv.wynik})
        for x in range(0, populacja.__len__()):
            najlepsi.append(
                rouletteWheelSelect(getRouletteWheel(populacja, score)))
    else:
        if ustawienia.rodzaj_Optymalizacj == "Min":
            # elita

            for x in populacja:
                lista_wynikow.append(x.wynik)
            elita = heapq.nsmallest(ustawienia.elita, lista_wynikow)
            for i in elita:
                x = populacja[elita.index(i)]
                Populacja_elity.append(x)
                populacja.remove(x)
                lista_wynikow = []
            # elita
            for indiv in populacja:
                score.update({indiv: 1 / indiv.wynik})
            for x in range(0, populacja.__len__()):
                najlepsi.append(
                    rouletteWheelSelect(getRouletteWheel(populacja, score)))
    return najlepsi, Populacja_elity
示例#2
0
def runTSPGA(kwargs):
	"""
		pre:
			isinstance(kwargs, dict)
			'maxGens' in kwargs
			kwargs['maxGens'] > 0
		
		post[kwargs]:
			__old__.kwargs == kwargs
			__return__[0][1] >= kwargs['targetscore'] or __return__[1] == kwargs['maxGens']
			isinstance(__return__[0][0], Individual)
	"""
	
	if 'sanity' not in kwargs:
		raise TypeError("Expected argument 'sanity' not found")
	arguments = kwargs['sanity']
	
	if len(kwargs) < len(arguments):
		raise TypeError("Missing Arguements: %s" %' '.join([a for a in arguments if a not in kwargs]))

	# # # # # # PARAMETERS # # # # # #
	
	testmode = kwargs['testmode']
	
	maxGens = kwargs['maxGens']
	targetscore = kwargs['targetscore']
	genfunc = kwargs['genfunc']
	genparams = kwargs['genparams']

	scorefunc = kwargs['scorefunc']
	scoreparams = kwargs['scoreparams']

	selectfunc = kwargs['selectfunc']
	selectparams = kwargs['selectparams']
	
	numcross = kwargs['numcross']
	crossfunc = kwargs['crossfunc']
	crossprob = kwargs['crossprob']
	crossparams = kwargs['crossparams']

	mutfunc = kwargs['mutfunc']
	mutprob = kwargs['mutprob']
	mutparams = kwargs['mutparams']
	
	SCORES = kwargs['SCORES']
	visualize = kwargs['visualize']
	getWheel = kwargs['getWheel']
	
	if visualize:
		makeScreenParams = kwargs['makeScreenParams']
		drawParams = kwargs['drawParams']
		font = kwargs['font']
		fontParams = kwargs['fontParams']
		labelParams = kwargs['labelParams']

	# # # # # # /PARAMETERS # # # # # #
	
	pop = genfunc(*genparams)
	for p in pop:
		if p not in SCORES:
			SCORES[p] = scorefunc(p, *scoreparams)
	
	best = max(SCORES, key=SCORES.__getitem__)
	best = best, SCORES[best]	# indiv, score
	
	if visualize:
		screen = vis.makeScreen(*makeScreenParams)
		label = font.render("%d / %d" %(best[1], targetscore), *fontParams)
		screen.blit(label, *labelParams)
		pg.display.init()
		vis.draw(best[0], screen, *drawParams)
	
	g = 0
	while g < maxGens:
		if testmode:
			assert g < maxGens
			assert best[1] < targetscore
			
		if getWheel:
			wheel = selection.getRouletteWheel(pop, SCORES)
		
		newpop = []
		for _ in xrange(numcross):
			if getWheel:
				p1 = selectfunc(wheel, *selectparams)
				p2 = selectfunc(wheel, *selectparams)
			else:
				p1, p2 = selectfunc(pop, *selectparams)
			if rand() <= crossprob:
				c1 = crossfunc(p1, p2, *crossparams)
				c2 = crossfunc(p2, p1, *crossparams)
				newpop.extend([c1,c2])
		
		for i,p in enumerate(newpop):
			if rand() <= mutprob:
				newpop[i] = mutfunc(p, *mutparams)
				p = newpop[i]
			SCORES[p] = scorefunc(p, *scoreparams)
		
		pop = sorted(pop+newpop, key=SCORES.__getitem__, reverse=True)[:len(pop)]
		
		fittest = max(pop, key=SCORES.__getitem__)
		fittest = fittest, SCORES[fittest]
		log.info("Generation %03d | highest fitness: %s | fittest indiv: %r" %(g, fittest[1], fittest[0].chromosomes[0]) )
		
		if fittest[1] > best[1]:
			best = fittest
			if visualize:
				screen = vis.makeScreen(*makeScreenParams)
				label = font.render("%d / %d" %(best[1], targetscore), *fontParams)
				screen.blit(label, *labelParams)
				pg.display.init()
				vis.draw(fittest[0], screen, *drawParams)
		
			if best[1] >= targetscore:
				if visualize:
					raw_input("Hit <ENTER> to kill visualization: ")
					vis.killscreen()
				
				return best[0], g
		g += 1
	if visualize:
		raw_input("Hit <ENTER> to kill visualization: ")
		vis.killscreen()
	
	if testmode:
		assert (g == maxGens) or best[1] >= targetscore

	return best, g
示例#3
0
def runGA(kwargs, testmode=False):
	"""
		pre:
			isinstance(kwargs, dict)
			'maxGens' in kwargs
			kwargs['maxGens'] > 0
		
		post[kwargs]:
			__old__.kwargs == kwargs
			__return__[0][1] >= kwargs['targetscore'] or __return__[1] == kwargs['maxGens']
			isinstance(__return__[0][0], Individual)
	"""
	
	if 'sanity' not in kwargs:
		raise TypeError("Expected argument 'sanity' not found")
	arguments = kwargs['sanity']
	
	if len(kwargs) < len(arguments):
		raise TypeError("Missing Arguements: %s" %' '.join([a for a in arguments if a not in kwargs]))
	
	# # # # # # PARAMETERS # # # # # #
	
	maxGens = kwargs['maxGens']
	targetscore = kwargs['targetscore']
	genfunc = kwargs['genfunc']
	genparams = kwargs['genparams']

	scorefunc = kwargs['scorefunc']
	scoreparams = kwargs['scoreparams']

	selectfunc = kwargs['selectfunc']
	selectparams = kwargs['selectparams']
	
	numcross = kwargs['numcross']
	crossfunc = kwargs['crossfunc']
	crossprob = kwargs['crossprob']
	crossparams = kwargs['crossparams']

	mutfunc = kwargs['mutfunc']
	mutprob = kwargs['mutprob']
	mutparams = kwargs['mutparams']
	
	SCORES = kwargs['SCORES']
	diff = kwargs['diff']
	getWheel = kwargs['getWheel']

	# # # # # # /PARAMETERS # # # # # #
	

	df = pd.read_csv('Genetic/Data/simSEAData.csv',header=False)

	dfY = df.iloc[:,3]
	dfX = df.iloc[:,0:3]

	

	genparams = (genparams[0],genparams[1],[(8,2)])


	crossover.X = dfX.iloc[0:100].values
	crossover.Y = dfY.iloc[0:100].values


	population.X = dfX.iloc[0:100].values
	population.Y = dfY.iloc[0:100].values


	pop = genfunc(*genparams)

	N = len(pop)

	

	start = 100
	end  = start + diff

	fitness.currX = dfX.iloc[start:min(end,len(dfX))].values
	fitness.currY = dfY.iloc[start:min(end,len(dfX))].values


	for p in pop:
		if p not in SCORES:
			SCORES[p] = scorefunc(p, *scoreparams)
	
	best = max(SCORES, key=SCORES.__getitem__)
	best = best, SCORES[best]	# indiv, score
	
	g = 1

	acc = []

	while  g < maxGens and end < len(dfX):
		if testmode:
			assert g < maxGens
			assert best[1] < targetscore

		if getWheel:
			wheel = selection.getRouletteWheel(pop, SCORES)
		
		newpop = []
		for _ in xrange(numcross):
			
			if getWheel:
				p1 = selectfunc(wheel, *selectparams)
				p2 = selectfunc(wheel, *selectparams)
			else:
				p1, p2 = selectfunc(pop, *selectparams)
			
			if rand() <= crossprob:
				l = crossfunc(p1,p2,g,SCORES[p1],SCORES[p2])
				
				for a in l:
					SCORES[a] = scorefunc(a, *scoreparams)	

				newpop.extend(l)			
				
			else:
				newpop.extend([p1,p2])			

		
		for i,p in enumerate(newpop):
			if rand() <= mutprob:
				newpop[i] = mutfunc(p,SCORES[p],crossover.Y)
				p = newpop[i]
			SCORES[p] = scorefunc(p, *scoreparams)
		
		pop = newpop

		sorted(pop,key = fitness.scoreAccuracy)

		pop = pop[0:N]

		#print(len(pop))

		crossover.X = fitness.currX 
		crossover.Y = fitness.currY


		fitness.currX = dfX.iloc[start:min(end,len(dfX))].values
		fitness.currY = dfY.iloc[start:min(end,len(dfX))].values

		
		fittest = max(pop, key=SCORES.__getitem__)
		fittest = fittest, SCORES[fittest]
		#log.info("Generation %03d | highest fitness: %s | fittest indiv: %r" %(g, fittest[1], ''.join(fittest[0].chromosomes[0])) )
		a = fittest[0].chromosomes[0].score(fitness.currX,fitness.currY)
		#print("Generation %03d | highest fitness: %s | Born: %d | prediction: %s" %(g, fittest[1],fittest[0].chromosomes[1],a))
		
		acc.append(a) 
		
		if fittest[1] > best[1]:
			best = fittest
			if best[1] >= targetscore:
				return best, g

		g += 1


		fitness.evolution(pop)

		start += diff
		end += diff

	
	if testmode:
		assert (g == maxGens) or best[1] >= targetscore
	

	return acc
示例#4
0
def runGA(kwargs, testmode=False):
	"""
		pre:
			isinstance(kwargs, dict)
			'maxGens' in kwargs
			kwargs['maxGens'] > 0
		
		post[kwargs]:
			__old__.kwargs == kwargs
			__return__[0][1] >= kwargs['targetscore'] or __return__[1] == kwargs['maxGens']
			isinstance(__return__[0][0], Individual)
	"""
	
	# # # # # # PARAMETERS # # # # # #
	
	maxGens = kwargs['maxGens']
	targetscore = kwargs['targetscore']
	genfunc = kwargs['genfunc']
	genparams = kwargs['genparams']

	scorefunc = kwargs['scorefunc']
	scoreparams = kwargs['scoreparams']

	selectfunc = kwargs['selectfunc']
	selectparams = kwargs['selectparams']
	
	numcross = kwargs['numcross']
	crossfunc = kwargs['crossfunc']
	crossfuncs = kwargs['crossfuncs']
	crossprob = kwargs['crossprob']
	crossparams = kwargs['crossparams']

	mutfunc = kwargs['mutfunc']
	mutprob = kwargs['mutprob']
	mutparams = kwargs['mutparams']
	
	SCORES = kwargs['SCORES']
	getWheel = kwargs['getWheel']

	# # # # # # /PARAMETERS # # # # # #
	
	pop = genfunc(*genparams)
	for p in pop:
		if p not in SCORES:
			SCORES[p] = scorefunc(p, *scoreparams)
	
	best = max(SCORES, key=SCORES.__getitem__)
	best = best, SCORES[best]	# indiv, score
	
	g = 0
	while g < maxGens:
		if testmode:
			assert g < maxGens
			assert best[1] < targetscore

		if getWheel:
			wheel = selection.getRouletteWheel(pop, SCORES)
		
		newpop = []
		for _ in xrange(numcross):
			if getWheel:
				p1 = selectfunc(wheel, *selectparams)
				p2 = selectfunc(wheel, *selectparams)
			else:
				p1, p2 = selectfunc(pop, *selectparams)
			if rand() <= crossprob:
				p1, p2 = crossfunc(p1, p2, crossfuncs, crossparams)
			newpop.extend([p1,p2])
		
		for i,p in enumerate(newpop):
			if rand() <= mutprob:
				newpop[i] = mutfunc(p, *mutparams)
				p = newpop[i]
			SCORES[p] = scorefunc(p, *scoreparams)
		
		pop = newpop
		
		fittest = max(pop, key=SCORES.__getitem__)
		fittest = fittest, SCORES[fittest]
		log.info("Generation %03d | highest fitness: %s | fittest indiv: %r" %(g, fittest[1], ''.join(fittest[0].chromosomes[0])) )
		if fittest[1] > best[1]:
			best = fittest
			if best[1] >= targetscore:
				return best, g
		g += 1
	
	if testmode:
		assert (g == maxGens) or best[1] >= targetscore
		
	return best[0], g
示例#5
0
def runTSPGA(kwargs):
    """
		pre:
			isinstance(kwargs, dict)
			'maxGens' in kwargs
			kwargs['maxGens'] > 0
		
		post[kwargs]:
			__old__.kwargs == kwargs
			__return__[0][1] >= kwargs['targetscore'] or __return__[1] == kwargs['maxGens']
			isinstance(__return__[0][0], Individual)
	"""

    if 'sanity' not in kwargs:
        raise TypeError("Expected argument 'sanity' not found")
    arguments = kwargs['sanity']

    if len(kwargs) < len(arguments):
        raise TypeError("Missing Arguements: %s" %
                        ' '.join([a for a in arguments if a not in kwargs]))

    # # # # # # PARAMETERS # # # # # #

    testmode = kwargs['testmode']

    maxGens = kwargs['maxGens']
    targetscore = kwargs['targetscore']
    genfunc = kwargs['genfunc']
    genparams = kwargs['genparams']

    scorefunc = kwargs['scorefunc']
    scoreparams = kwargs['scoreparams']

    selectfunc = kwargs['selectfunc']
    selectparams = kwargs['selectparams']

    numcross = kwargs['numcross']
    crossfunc = kwargs['crossfunc']
    crossprob = kwargs['crossprob']
    crossparams = kwargs['crossparams']

    mutfunc = kwargs['mutfunc']
    mutprob = kwargs['mutprob']
    mutparams = kwargs['mutparams']

    SCORES = kwargs['SCORES']
    visualize = kwargs['visualize']
    getWheel = kwargs['getWheel']

    if visualize:
        makeScreenParams = kwargs['makeScreenParams']
        drawParams = kwargs['drawParams']
        font = kwargs['font']
        fontParams = kwargs['fontParams']
        labelParams = kwargs['labelParams']

    # # # # # # /PARAMETERS # # # # # #

    pop = genfunc(*genparams)
    for p in pop:
        if p not in SCORES:
            SCORES[p] = scorefunc(p, *scoreparams)

    best = max(SCORES, key=SCORES.__getitem__)
    best = best, SCORES[best]  # indiv, score

    if visualize:
        screen = vis.makeScreen(*makeScreenParams)
        label = font.render("%d / %d" % (best[1], targetscore), *fontParams)
        screen.blit(label, *labelParams)
        pg.display.init()
        vis.draw(best[0], screen, *drawParams)

    g = 0
    while g < maxGens:
        if testmode:
            assert g < maxGens
            assert best[1] < targetscore

        if getWheel:
            wheel = selection.getRouletteWheel(pop, SCORES)

        newpop = []
        for _ in xrange(numcross):
            if getWheel:
                p1 = selectfunc(wheel, *selectparams)
                p2 = selectfunc(wheel, *selectparams)
            else:
                p1, p2 = selectfunc(pop, *selectparams)
            if rand() <= crossprob:
                c1 = crossfunc(p1, p2, *crossparams)
                c2 = crossfunc(p2, p1, *crossparams)
                newpop.extend([c1, c2])

        for i, p in enumerate(newpop):
            if rand() <= mutprob:
                newpop[i] = mutfunc(p, *mutparams)
                p = newpop[i]
            SCORES[p] = scorefunc(p, *scoreparams)

        pop = sorted(pop + newpop, key=SCORES.__getitem__,
                     reverse=True)[:len(pop)]

        fittest = max(pop, key=SCORES.__getitem__)
        fittest = fittest, SCORES[fittest]
        log.info("Generation %03d | highest fitness: %s | fittest indiv: %r" %
                 (g, fittest[1], fittest[0].chromosomes[0]))

        if fittest[1] > best[1]:
            best = fittest
            if visualize:
                screen = vis.makeScreen(*makeScreenParams)
                label = font.render("%d / %d" % (best[1], targetscore),
                                    *fontParams)
                screen.blit(label, *labelParams)
                pg.display.init()
                vis.draw(fittest[0], screen, *drawParams)

            if best[1] >= targetscore:
                if visualize:
                    raw_input("Hit <ENTER> to kill visualization: ")
                    vis.killscreen()

                return best[0], g
        g += 1
    if visualize:
        raw_input("Hit <ENTER> to kill visualization: ")
        vis.killscreen()

    if testmode:
        assert (g == maxGens) or best[1] >= targetscore

    return best, g
示例#6
0
def runGA(kwargs, testmode=False):
    """
		pre:
			isinstance(kwargs, dict)
			'maxGens' in kwargs
			kwargs['maxGens'] > 0
		
		post[kwargs]:
			__old__.kwargs == kwargs
			__return__[0][1] >= kwargs['targetscore'] or __return__[1] == kwargs['maxGens']
			isinstance(__return__[0][0], Individual)
	"""

    if 'sanity' not in kwargs:
        raise TypeError("Expected argument 'sanity' not found")
    arguments = kwargs['sanity']

    if len(kwargs) < len(arguments):
        raise TypeError("Missing Arguements: %s" %
                        ' '.join([a for a in arguments if a not in kwargs]))

    # # # # # # PARAMETERS # # # # # #

    maxGens = kwargs['maxGens']
    targetscore = kwargs['targetscore']
    genfunc = kwargs['genfunc']
    genparams = kwargs['genparams']

    scorefunc = kwargs['scorefunc']
    scoreparams = kwargs['scoreparams']

    selectfunc = kwargs['selectfunc']
    selectparams = kwargs['selectparams']

    numcross = kwargs['numcross']
    crossfunc = kwargs['crossfunc']
    crossprob = kwargs['crossprob']
    crossparams = kwargs['crossparams']

    mutfunc = kwargs['mutfunc']
    mutprob = kwargs['mutprob']
    mutparams = kwargs['mutparams']

    SCORES = kwargs['SCORES']
    diff = kwargs['diff']
    getWheel = kwargs['getWheel']

    # # # # # # /PARAMETERS # # # # # #

    df = pd.read_csv('Genetic/Data/simSEAData.csv', header=False)

    dfY = df.iloc[:, 3]
    dfX = df.iloc[:, 0:3]

    genparams = (genparams[0], genparams[1], [(8, 2)])

    crossover.X = dfX.iloc[0:100].values
    crossover.Y = dfY.iloc[0:100].values

    population.X = dfX.iloc[0:100].values
    population.Y = dfY.iloc[0:100].values

    pop = genfunc(*genparams)

    N = len(pop)

    start = 100
    end = start + diff

    fitness.currX = dfX.iloc[start:min(end, len(dfX))].values
    fitness.currY = dfY.iloc[start:min(end, len(dfX))].values

    for p in pop:
        if p not in SCORES:
            SCORES[p] = scorefunc(p, *scoreparams)

    best = max(SCORES, key=SCORES.__getitem__)
    best = best, SCORES[best]  # indiv, score

    g = 1

    acc = []

    while g < maxGens and end < len(dfX):
        if testmode:
            assert g < maxGens
            assert best[1] < targetscore

        if getWheel:
            wheel = selection.getRouletteWheel(pop, SCORES)

        newpop = []
        for _ in xrange(numcross):

            if getWheel:
                p1 = selectfunc(wheel, *selectparams)
                p2 = selectfunc(wheel, *selectparams)
            else:
                p1, p2 = selectfunc(pop, *selectparams)

            if rand() <= crossprob:
                l = crossfunc(p1, p2, g, SCORES[p1], SCORES[p2])

                for a in l:
                    SCORES[a] = scorefunc(a, *scoreparams)

                newpop.extend(l)

            else:
                newpop.extend([p1, p2])

        for i, p in enumerate(newpop):
            if rand() <= mutprob:
                newpop[i] = mutfunc(p, SCORES[p], crossover.Y)
                p = newpop[i]
            SCORES[p] = scorefunc(p, *scoreparams)

        pop = newpop

        sorted(pop, key=fitness.scoreAccuracy)

        pop = pop[0:N]

        #print(len(pop))

        crossover.X = fitness.currX
        crossover.Y = fitness.currY

        fitness.currX = dfX.iloc[start:min(end, len(dfX))].values
        fitness.currY = dfY.iloc[start:min(end, len(dfX))].values

        fittest = max(pop, key=SCORES.__getitem__)
        fittest = fittest, SCORES[fittest]
        #log.info("Generation %03d | highest fitness: %s | fittest indiv: %r" %(g, fittest[1], ''.join(fittest[0].chromosomes[0])) )
        a = fittest[0].chromosomes[0].score(fitness.currX, fitness.currY)
        #print("Generation %03d | highest fitness: %s | Born: %d | prediction: %s" %(g, fittest[1],fittest[0].chromosomes[1],a))

        acc.append(a)

        if fittest[1] > best[1]:
            best = fittest
            if best[1] >= targetscore:
                return best, g

        g += 1

        fitness.evolution(pop)

        start += diff
        end += diff

    if testmode:
        assert (g == maxGens) or best[1] >= targetscore

    return acc
示例#7
0
def runGA(kwargs, testmode=False):
    """
		pre:
			isinstance(kwargs, dict)
			'maxGens' in kwargs
			kwargs['maxGens'] > 0
		
		post[kwargs]:
			__old__.kwargs == kwargs
			__return__[0][1] >= kwargs['targetscore'] or __return__[1] == kwargs['maxGens']
			isinstance(__return__[0][0], Individual)
	"""

    # # # # # # PARAMETERS # # # # # #

    maxGens = kwargs['maxGens']
    targetscore = kwargs['targetscore']
    genfunc = kwargs['genfunc']
    genparams = kwargs['genparams']

    scorefunc = kwargs['scorefunc']
    scoreparams = kwargs['scoreparams']

    selectfunc = kwargs['selectfunc']
    selectparams = kwargs['selectparams']

    numcross = kwargs['numcross']
    crossfunc = kwargs['crossfunc']
    crossfuncs = kwargs['crossfuncs']
    crossprob = kwargs['crossprob']
    crossparams = kwargs['crossparams']

    mutfunc = kwargs['mutfunc']
    mutprob = kwargs['mutprob']
    mutparams = kwargs['mutparams']

    SCORES = kwargs['SCORES']
    getWheel = kwargs['getWheel']

    # # # # # # /PARAMETERS # # # # # #

    pop = genfunc(*genparams)
    for p in pop:
        if p not in SCORES:
            SCORES[p] = scorefunc(p, *scoreparams)

    best = max(SCORES, key=SCORES.__getitem__)
    best = best, SCORES[best]  # indiv, score

    g = 0
    while g < maxGens:
        if testmode:
            assert g < maxGens
            assert best[1] < targetscore

        if getWheel:
            wheel = selection.getRouletteWheel(pop, SCORES)

        newpop = []
        for _ in range(numcross):
            if getWheel:
                p1 = selectfunc(wheel, *selectparams)
                p2 = selectfunc(wheel, *selectparams)
            else:
                p1, p2 = selectfunc(pop, *selectparams)
            if rand() <= crossprob:
                p1, p2 = crossfunc(p1, p2, crossfuncs, crossparams)
            newpop.extend([p1, p2])

        for i, p in enumerate(newpop):
            if rand() <= mutprob:
                newpop[i] = mutfunc(p, *mutparams)
                p = newpop[i]
            SCORES[p] = scorefunc(p, *scoreparams)

        pop = newpop

        fittest = max(pop, key=SCORES.__getitem__)
        fittest = fittest, SCORES[fittest]
        log.info("Generation %03d | highest fitness: %s | fittest indiv: %r" %
                 (g, fittest[1], ''.join(fittest[0].chromosomes[0])))
        if fittest[1] > best[1]:
            best = fittest
            if best[1] >= targetscore:
                return best, g
        g += 1

    if testmode:
        assert (g == maxGens) or best[1] >= targetscore

    return best[0], g