Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import FuncoesML as fun
- from scipy import stats
- import numpy as np
- import time
- #Criando a classe receita que irá conter nome, classe e vetor de ingredientes
- class Receita:
- Name = None
- Class = 0
- ingredientes = []
- ingredientesnorm = []
- #Método que retorna o vetor de ingredientes
- def getingrednorm(self):
- return self.ingredientesnorm
- #Construtor da classe receita
- def __init__(self, name, Class, ingredientes):
- self.Name = name
- self.Class = Class
- self.ingredientes = ingredientes
- #Método que adiciona ingredientes no vetor de ingredientes
- def adicionaringrediente(self, ingrediente):
- self.ingredientes.append(ingrediente)
- #abrindo o arquivo com a base de dados
- reshipe = open('C:/Users/Auricelia/Documents/Ciencia da Computacao/Computação Evolutiva/Base de dados/ReshibaseQ.txt'
- , "rt", encoding="utf8")
- #criando o vetor de receitas
- receitas = []
- # preenchendo o vetor de receitas
- for receita in reshipe:
- dividido = receita.split(sep=',')
- dividido[(len(dividido) - 1)] = dividido[(len(dividido) - 1)].replace('\n', '')
- ingredientes = []
- for x in range(2, len(dividido)):
- ingredientes.append(dividido[x])
- receitas.append(Receita(dividido[1], dividido[0], ingredientes))
- #vetor que irá receber todos os ingredientes sem repetição para fazer os vetores binários
- todosingredientes = []
- #preenchendo o vetor 'todosingredientes' sem repetição
- for rec in receitas:
- for ingrediente in rec.ingredientes:
- if todosingredientes.__contains__(ingrediente) == False:
- todosingredientes.append(ingrediente)
- #ordenando o vetor
- todosingredientes = sorted(todosingredientes)
- # preenchendo nos objetos receita o vetor binário com 0
- for rec in receitas:
- norm = []
- for y in range(0, len(todosingredientes)):
- norm.append(0)
- rec.ingredientesnorm = norm
- # Colocando 1 na posição em que existe o ingrediente
- for rec in receitas:
- for y in rec.ingredientes:
- pos = todosingredientes.index(y)
- rec.ingredientesnorm[pos] = 1
- # Vetor que irá receber os vetores binários de ingreientes de cada receita
- arrayingredientesnorm = []
- # Preenchendo o vetor com os ingredientes normalizados
- for rec in receitas:
- arrayingredientesnorm.append(rec.ingredientesnorm)
- # Vetor que irá receber as classes de cada receita
- arrayclasse = []
- # preenchendo o vetor com as classes de cada receita
- for rec in receitas:
- arrayclasse.append(rec.Class)
- # criando o dataframe que irá armazenar os ingredientes
- df = pd.DataFrame(arrayingredientesnorm)
- # Vetor que irá receber as classes de cada receita
- arrayclasse = []
- # preenchendo o vetor com as classes de cada receita
- for rec in receitas:
- arrayclasse.append(rec.Class)
- # criando o dataframe que irá armazenar os ingredientes
- df = pd.DataFrame(arrayingredientesnorm)
- # adicionando a classe ao dataframe
- df['Class'] = arrayclasse
- #Salvando a base de dados normalizada
- df.to_csv('C:/Users/Auricelia/Documents/Ciencia da Computacao/Computação Evolutiva/Base de dados/Receitas_norm.csv')
- # separando as receitas por classe
- df_1 = df.loc[df['Class'] == '1']
- df_2 = df.loc[df['Class'] == '2']
- df_3 = df.loc[df['Class'] == '3']
- df_4 = df.loc[df['Class'] == '4']
- print('df 1')
- print('shape df1', df_1.shape)
- print(df_1.head())
- print()
- print('df 2')
- print('shape df2', df_2.shape)
- print(df_2.head())
- print()
- print('df 3')
- print('shape df3', df_3.shape)
- print(df_3.head())
- print()
- print('df 4')
- print('shape df4', df_4.shape)
- print(df_4.head())
- print()
- # j = 0
- # y = df[j:j+1]
- # df_2.append(y)
- # print(df.at[7, 'Class'])
- # print(df[0:1])
- # print('adicionando 1 linha ao df_2')
- # print(df_2)
- # print(df.loc[df['Class']== '1'])
- # criando os vetores que irão armazenar as probabilidades de cada ingrediente por classe
- p_ingrediente_1 = []
- p_ingrediente_2 = []
- p_ingrediente_3 = []
- p_ingrediente_4 = []
- df_noclass = df.copy()
- del df_noclass['Class']
- total_ing = df_noclass.shape[1]
- # gerando as probabilidades para a classe '1'
- total_rec_1 = df_1.shape[1]
- df_1_noclass = df_1.copy()
- del df_1_noclass['Class']
- for i in range(total_ing):
- soma = df_1_noclass[i].sum()
- prob_ingrediente = soma / total_rec_1
- p_ingrediente_1.append(prob_ingrediente)
- print('len p_ingredientes_1', len(p_ingrediente_1))
- print(p_ingrediente_1)
- # gerando as probabilidades para a classe '2'
- total_rec_2 = df_2.shape[0]
- df_2_noclass = df_2.copy()
- del df_2_noclass['Class']
- for j in range(total_ing):
- soma = df_2_noclass[j].sum()
- prob_ingrediente = soma / total_rec_2
- p_ingrediente_2.append(prob_ingrediente)
- print('len p_ingredientes_2', len(p_ingrediente_2))
- print(p_ingrediente_2)
- # gerando as probabilidades para a classe '3'
- total_rec_3 = df_3.shape[0]
- df_3_noclass = df_3.copy()
- del df_3_noclass['Class']
- for k in range(total_ing):
- soma = df_3_noclass[k].sum()
- prob_ingrediente = soma / total_rec_3
- p_ingrediente_3.append(prob_ingrediente)
- print('len p_ingredientes_3', len(p_ingrediente_3))
- print(p_ingrediente_3)
- # gerando as probabilidades para a classe '4'
- total_rec_4 = df_4.shape[0]
- df_4_noclass = df_4.copy()
- del df_4_noclass['Class']
- for l in range(total_ing):
- soma = df_4_noclass[l].sum()
- prob_ingrediente = soma / total_rec_4
- p_ingrediente_4.append(prob_ingrediente)
- print('len p_ingredientes_4', len(p_ingrediente_4))
- print(p_ingrediente_4)
- """
- COMECA O ALGORITMO GENETICO
- """
- tempototalinicioGA = time.time()
- # tamanho do cromossomo (quantidade de ingredientes total)
- tamanho = 402
- # gerando população de cromossomos
- population = fun.create_population(150, 404)
- # vetor que irá receber o fitness dos cromossomos
- scores = []
- scoresfinal = []
- for popu in population:
- scores.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
- scoresfinal.append(scores[np.argmax(scores)])
- for x in range(2):
- population = fun.newgentournement(scores, population)
- scores = []
- for popu in population:
- scores.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
- scoresfinal.append(scores[np.argmax(scores)])
- print("terminou")
- tempototalfimGA = time.time()
- tempototalGA = tempototalfimGA - tempototalinicioGA
- print(np.array(scoresfinal))
- print(tempototalGA)
- print('len scores final',len(scoresfinal))
- print(scoresfinal)
- print('len scores', len(scores))
- print(scores)
- print(population)
- print('TERMINOU GA')
- """
- TERMINA O ALGORITMO GENETICO
- """
- tempoinicialEE = time.time()
- sizeEE = 10
- populationEE, stdsEE = fun.creatpopuEE(sizeEE, 306)
- scoresEE = []
- scoresfinalEE = []
- for popu in populationEE:
- scoresEE.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
- scoresfinalEE.append(scoresEE[np.argmax(scoresEE)])
- for x in range(10):
- miEE, mistdEE = fun.newgentournementEE(scoresEE, populationEE, stdsEE, len(populationEE) * 2)
- miEE, mistdEE = fun.mutationEE(miEE, mistdEE)
- scoresEE = []
- for popu in miEE:
- scoresEE.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
- scoresfinalEE.append(scoresEE[np.argmax(scoresEE)])
- bestsEE = fun.bestindEE(scoresEE, sizeEE)
- populationEE = miEE[bestsEE]
- stdsEE = mistdEE[bestsEE]
- scoresEE = np.array(scoresEE)
- bestscoresEE = scoresEE[bestsEE]
- # print("terminou")
- tempofinalEE = time.time()
- tempototalEE = tempofinalEE - tempoinicialEE
- print("TERMINOU EE")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement