From cdb4059640b0e06399f1550abdc62e4f298b7ad1 Mon Sep 17 00:00:00 2001 From: leb2ic Date: Sun, 30 Oct 2022 00:48:42 +0300 Subject: [PATCH] implemented 8queens and n-color problems fitness function --- problem.py | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ search.py | 4 +-- 2 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 problem.py diff --git a/problem.py b/problem.py new file mode 100644 index 000000000..468b4295d --- /dev/null +++ b/problem.py @@ -0,0 +1,99 @@ +from mimetypes import init +from search import * +from timeit import default_timer as timer +from datetime import timedelta +import time +def switch(type_of_problem): + if type_of_problem=="queen": + erfolgreiche_laufe=0 + succeded_gen = 0 + aes = 0 + start = time.time() + for i in range(1): + x,a = problem(100,8,fitness_fn_queens,[1,2,3,4,5,6,7,8],500,28,0.1) + print(x,fitness_fn_queens(x)) + if(fitness_fn_queens(x)==28): + succeded_gen += a + erfolgreiche_laufe += 1 + if erfolgreiche_laufe!=0: + aes = succeded_gen/erfolgreiche_laufe + sr = erfolgreiche_laufe/100 + end = time.time() + ausfuhrungszeit = end - start + ##init_pop = 5 + ##pmut = 0.125 + ##ngen = 1000 + + print( + "(AES)Average Evaluations to a Solution(Geschwindigkeit) ist {}".format(aes)+ + "\n(SR)Success Rate(Lösungswahrscheinlichkeit) ist {}".format(sr)+ + "\nAusführungszeit ist {}".format(ausfuhrungszeit)) + else: + erfolgreiche_laufe=0 + succeded_gen = 0 + aes = 0 + start = time.time() + for i in range(100): + x,a = problem(3,6,fitness_fn_landkart,["red","blue","grey"],200,6,0.01) + print(x,fitness_fn_landkart(x)) + if(fitness_fn_landkart(x)==6): + succeded_gen += a + erfolgreiche_laufe += 1 + if erfolgreiche_laufe!=0: + aes = succeded_gen/erfolgreiche_laufe + sr = erfolgreiche_laufe/100 + end = time.time() + ausfuhrungszeit = end - start + init_pop = 5 + pmut = 0.125 + ngen = 1000 + + print("Einstellungen -> init_pop = {}, gen = {}, mut = {}\n".format(init_pop,ngen,pmut)+ + "(AES)Average Evaluations to a Solution(Geschwindigkeit) ist {}".format(aes)+ + "\n(SR)Success Rate(Lösungswahrscheinlichkeit) ist {}".format(sr)+ + "\nAusführungszeit ist {}".format(ausfuhrungszeit)) +def main(): + switch("queen") + + +def problem(init_p,state_length,fitness_fn,gene_pool,ngen,f_thres,pmut): + population = init_population(init_p,gene_pool,state_length) + x,a = genetic_algorithm(population = population,fitness_fn=fitness_fn,gene_pool=gene_pool,ngen=ngen,f_thres= f_thres,pmut= pmut) + return x,a + +def fitness_fn_queens(individuum): + fitness_ct = 28 + for idx, x in enumerate(individuum): + for idx2,x2 in enumerate(individuum): + if(idx>=idx2): + continue + else: + if(abs(idx-idx2)==abs(x-x2)): # 2,4 5,1 + fitness_ct-=1 + if(x==x2): + fitness_ct-=1 + + return fitness_ct + +def fitness_fn_landkart(individuum): + fitness_ct = 6 + if(individuum[1]==individuum[2]): + fitness_ct -= 1 + if(individuum[0]==individuum[1] or individuum[0]==individuum[2]): + if(individuum[0]==individuum[1]==individuum[2]): + fitness_ct -= 2 + else: + fitness_ct -= 1 + if(individuum[1]==individuum[3] or individuum[2]==individuum[3]): + if(individuum[1]==individuum[2]==individuum[3]): + fitness_ct -= 2 + else: + fitness_ct -= 1 + if(individuum[3]==individuum[4]): + fitness_ct-=1 + return fitness_ct + +if __name__ == "__main__": + main() + + diff --git a/search.py b/search.py index 5012c1a18..df90b6fa7 100644 --- a/search.py +++ b/search.py @@ -930,9 +930,9 @@ def genetic_algorithm(population, fitness_fn, gene_pool=[0, 1], f_thres=None, ng fittest_individual = fitness_threshold(fitness_fn, f_thres, population) if fittest_individual: - return fittest_individual + return fittest_individual,i - return max(population, key=fitness_fn) + return max(population, key=fitness_fn),-1 def fitness_threshold(fitness_fn, f_thres, population): pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy