Advertisement
11eimilia11

things that doesnt work

Apr 13th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.15 KB | None | 0 0
  1. import pandas as pd
  2. import FuncoesML as fun
  3. from scipy import stats
  4. import numpy as np
  5. import time
  6.  
  7.  
  8. # Criando a classe receita que irá conter nome, classe e vetor de ingredientes
  9. class Receita:
  10.     Name = None
  11.     Class = 0
  12.     ingredientes = []
  13.     ingredientesnorm = []
  14.  
  15.     # Método que retorna o vetor de ingredientes
  16.     def getingrednorm(self):
  17.         return self.ingredientesnorm
  18.  
  19.     # Construtor da classe receita
  20.     def __init__(self, name, Class, ingredientes):
  21.         self.Name = name
  22.         self.Class = Class
  23.         self.ingredientes = ingredientes
  24.  
  25.     # Método que adiciona ingredientes no vetor de ingredientes
  26.     def adicionaringrediente(self, ingrediente):
  27.         self.ingredientes.append(ingrediente)
  28.  
  29.  
  30. # abrindo o arquivo com a base de dados
  31. reshipe = open('C:/Users/Auricelia/Documents/Ciencia da Computacao/Computação Evolutiva/Base de dados/ReshibaseQ.txt',
  32.                "rt", encoding="utf8")
  33.  
  34. # criando o vetor de receitas
  35. receitas = []
  36.  
  37. # preenchendo o vetor de receitas
  38. for receita in reshipe:
  39.     dividido = receita.split(sep=',')
  40.     dividido[(len(dividido) - 1)] = dividido[(len(dividido) - 1)].replace('\n', '')
  41.     ingredientes = []
  42.  
  43.     for x in range(2, len(dividido)):
  44.         ingredientes.append(dividido[x])
  45.  
  46.     receitas.append(Receita(dividido[1], dividido[0], ingredientes))
  47.  
  48. # criando os vetores que irão receber os ingredientes de cada classe
  49. ingredientes_1 = []
  50. ingredientes_2 = []
  51. ingredientes_3 = []
  52. ingredientes_4 = []
  53.  
  54. # preenchendo o vetor 'todosingredientes' sem repetição
  55. for rec in receitas:
  56.     for ingrediente in rec.ingredientes:
  57.  
  58.         if rec.Class == '1':
  59.             if ingredientes_1.__contains__(ingrediente) == False:
  60.                 ingredientes_1.append(ingrediente)
  61.         elif rec.Class == '2':
  62.             if ingredientes_2.__contains__(ingrediente) == False:
  63.                 ingredientes_2.append(ingrediente)
  64.         elif rec.Class == '3':
  65.             if ingredientes_3.__contains__(ingrediente) == False:
  66.                 ingredientes_3.append(ingrediente)
  67.         elif rec.Class == '4':
  68.             if ingredientes_4.__contains__(ingrediente) == False:
  69.                 ingredientes_4.append(ingrediente)
  70.  
  71. print('ingr classe 1')
  72. print(ingredientes_1)
  73. print()
  74.  
  75. print('ingr classe 2')
  76. print(ingredientes_2)
  77. print()
  78.  
  79. print('ingr classe 3')
  80. print(ingredientes_3)
  81. print()
  82.  
  83. print('ing classe 4')
  84. print(ingredientes_4)
  85. print()
  86.  
  87. todosingredientes = []
  88. # preenchendo o vetor 'todosingredientes' sem repetição
  89. for rec in receitas:
  90.     for ingrediente in rec.ingredientes:
  91.         if todosingredientes.__contains__(ingrediente) == False:
  92.             todosingredientes.append(ingrediente)
  93.  
  94. # ordenando o vetor
  95. todosingredientes = sorted(todosingredientes)
  96.  
  97. # ordenando os vetores
  98. ingredientes_1 = sorted(ingredientes_1)
  99. ingredientes_2 = sorted(ingredientes_2)
  100. ingredientes_3 = sorted(ingredientes_3)
  101. ingredientes_4 = sorted(ingredientes_4)
  102.  
  103. # preenchendo nos objetos receita o vetor binário com 0
  104.  
  105. for rec in receitas:
  106.     norm = []
  107.     for y in range(0, len(todosingredientes)):
  108.         norm.append(0)
  109.     rec.ingredientesnorm = norm
  110.  
  111. # Colocando 1 na posição em que existe o ingrediente
  112.  
  113. for rec in receitas:
  114.     for y in rec.ingredientes:
  115.         pos = todosingredientes.index(y)
  116.         rec.ingredientesnorm[pos] = 1
  117.  
  118. # Vetor que irá receber os vetores binários de ingreientes de cada receita
  119. arrayingredientesnorm = []
  120.  
  121. # Preenchendo o vetor com os ingredientes normalizados
  122. for rec in receitas:
  123.     arrayingredientesnorm.append(rec.ingredientesnorm)
  124.  
  125. # Vetor que irá receber as classes de cada receita
  126. arrayclasse = []
  127.  
  128. # preenchendo o vetor com as classes de cada receita
  129. for rec in receitas:
  130.     arrayclasse.append(rec.Class)
  131.  
  132. # criando o dataframe que irá armazenar os ingredientes
  133. df = pd.DataFrame(arrayingredientesnorm)
  134.  
  135. # adicionando a classe ao dataframe
  136. df['Class'] = arrayclasse
  137.  
  138. print('entrada')
  139. print(ingredientes_1)
  140. print()
  141.  
  142. print('prato principal')
  143. print(ingredientes_2)
  144. print()
  145.  
  146. print('acompanhamento')
  147. print(ingredientes_3)
  148. print()
  149.  
  150. print('sobremesa')
  151. print(ingredientes_4)
  152. print()
  153.  
  154. # separando as receitas por classe
  155. df_1 = df.loc[df['Class'] == '1']
  156. df_2 = df.loc[df['Class'] == '2']
  157. df_3 = df.loc[df['Class'] == '3']
  158. df_4 = df.loc[df['Class'] == '4']
  159.  
  160. print('df 1')
  161. print(df_1.head())
  162. print(df_1.shape[0])
  163. print()
  164. print('df 2')
  165. print(df_2.head())
  166. print()
  167. print('df 3')
  168. print(df_3.head())
  169. print()
  170. print('df 4')
  171. print(df_4)
  172. print()
  173.  
  174. # criando a população de receitas com 20 cromossomos de tamanho 38
  175. # cromossomos = fun.create_population(20, tamanho_ingredientes)
  176. # for cromo in cromossomos:
  177.  
  178.  
  179. # j = 0
  180. # y = df[j:j+1]
  181. # df_2.append(y)
  182. # print(df.at[7, 'Class'])
  183. # print(df[0:1])
  184. # print('adicionando 1 linha ao df_2')
  185. # print(df_2)
  186.  
  187. # print(df.loc[df['Class']== '1'])
  188.  
  189. # criando os vetores que irão armazenar as probabilidades de cada ingrediente por classe
  190. p_ingrediente_1 = []
  191. p_ingrediente_2 = []
  192. p_ingrediente_3 = []
  193. p_ingrediente_4 = []
  194.  
  195. # gerando as probabilidades para a classe '1'
  196. total_rec_1 = df_1.shape[0]
  197. df_1_noclass = df_1.copy()
  198. del df_1_noclass['Class']
  199.  
  200. for i in range(total_rec_1):
  201.     soma = df_1_noclass[i].sum()
  202.     prob_ingrediente = soma / total_rec_1
  203.     p_ingrediente_1.append(prob_ingrediente)
  204.  
  205. print('len p_ingredientes_1', len(p_ingrediente_1))
  206. print(p_ingrediente_1)
  207.  
  208. # gerando as probabilidades para a classe '2'
  209.  
  210. total_rec_2 = df_2.shape[0]
  211. df_2_noclass = df_2.copy()
  212. del df_2_noclass['Class']
  213.  
  214. for j in range(total_rec_2):
  215.     soma = df_2_noclass[j].sum()
  216.     prob_ingrediente = soma / total_rec_2
  217.     p_ingrediente_2.append(prob_ingrediente)
  218.  
  219.  
  220. print('len p_ingredientes_2', len(p_ingrediente_2))
  221. print(p_ingrediente_2)
  222.  
  223. # gerando as probabilidades para a classe '3'
  224.  
  225. total_rec_3 = df_3.shape[0]
  226. df_3_noclass = df_3.copy()
  227. del df_3_noclass['Class']
  228.  
  229. for k in range(total_rec_3):
  230.     soma = df_3_noclass[k].sum()
  231.     prob_ingrediente = soma / total_rec_3
  232.     p_ingrediente_3.append(prob_ingrediente)
  233.  
  234.  
  235. print('len p_ingredientes_3', len(p_ingrediente_3))
  236. print(p_ingrediente_3)
  237.  
  238. # gerando as probabilidades para a classe '4'
  239.  
  240. total_rec_4 = df_4.shape[0]
  241. df_4_noclass = df_4.copy()
  242. del df_4_noclass['Class']
  243.  
  244. for l in range(total_rec_3):
  245.     soma = df_4_noclass[l].sum()
  246.     prob_ingrediente = soma / total_rec_4
  247.     p_ingrediente_4.append(prob_ingrediente)
  248.  
  249. print('len p_ingredientes_4', len(p_ingrediente_4))
  250. print(p_ingrediente_4)
  251.  
  252.  
  253. # tamanho do cromossomo (quantidade de ingredientes total)
  254. tamanho = 402
  255.  
  256. # gerando população de cromossomos
  257. cromossomos = fun.create_population(2, 404)
  258.  
  259. '''
  260. print()
  261. print(cromossomos)
  262.  
  263. # decodificando os cromossomos gerados
  264. # TODO substituir por um for passando pelos vetor de cromossomos gerados
  265. cromo = cromossomos[0]
  266.  
  267. # TODO decodificar as classes dos cromossomos
  268. classe_cromo = fun.decode_cromoossome_recipe(cromo)
  269.  
  270. print('cromossomos 1')
  271. print(cromo)
  272. print()
  273.  
  274. cromo[0] = 0
  275. cromo[1] = 0
  276.  
  277. print('prob ingredientes classe 1 ', p_ingrediente_1, 'tipo', type(p_ingrediente_1))
  278. prob_ingr_receita = fun.p_ingredientes(cromo,p_ingrediente_1)
  279. print('p_ingredientes', prob_ingr_receita, 'tipo', type(prob_ingr_receita))
  280. '''
  281.  
  282. #
  283. # probabilidade_ingredientes = 0
  284. # total_ingredientes_classe = 0
  285. # total_ingredientes_receita = fun.total_ing_receita(cromo)
  286. #
  287. # print('total ingredientes receita', total_ingredientes_receita)
  288. # print()
  289. #
  290. # if classe_cromo == 1:
  291. #     probabilidade_ingredientes = fun.p_ingredientes(cromo,p_ingrediente_1)
  292. #     total_ingredientes_classe = fun.total_ing_classe(p_ingrediente_1)
  293. #
  294. # elif classe_cromo == 2:
  295. #     probabilidade_ingredientes = fun.p_ingredientes(cromo,p_ingrediente_2)
  296. #     total_ingredientes_classe = fun.total_ing_classe(p_ingrediente_2)
  297. #
  298. # elif classe_cromo == 3:
  299. #     probabilidade_ingredientes = fun.p_ingredientes(cromo, p_ingrediente_3)
  300. #     total_ingredientes_classe = fun.total_ing_classe(p_ingrediente_3)
  301. #
  302. # elif classe_cromo == 4:
  303. #     probabilidade_ingredientes = fun.p_ingredientes(cromo,p_ingrediente_4)
  304. #     total_ingredientes_classe = fun.total_ing_classe(p_ingrediente_4)
  305. #
  306. # print('p_ingredientes', probabilidade_ingredientes, 'tipo', type(probabilidade_ingredientes))
  307. # print('total ingredientes classe: ', total_ingredientes_classe, 'tipo ', type(total_ingredientes_classe))
  308. # print('total ingredientes receita', total_ingredientes_receita, 'tipo ', type(total_ingredientes_receita))
  309. # print('classe: ', classe_cromo)
  310.  
  311.  
  312. # fitness_receita = fun.fitness_receita(probabilidade_ingredientes, total_ingredientes_classe, total_ingredientes_receita)
  313. #
  314. # print('fitness cromossomo 1 : ', fitness_receita)
  315. # print()
  316. #calculando o fitness dos cromossomos
  317.  
  318. # TODO calcular p_ingrediente
  319.  
  320. # TODO calcular total_ingredientes_receita
  321.  
  322. # TODO calcular total_ingredientes_classe
  323.  
  324. # TODO calcular fitness dos cromossomos
  325.  
  326. # selecionando os pais
  327.  
  328. # TODO calaular função de torneio
  329.  
  330. # TODO selecionar os pares para geração de filhos
  331.  
  332. # TODO gerar os filhos usando crossover
  333.  
  334. # TODO aplicar o opreador mutação
  335.  
  336. # TODO garantir o elitismo guardando uma cópia do melhor indivíduo na próxima geração
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement