SlideShare una empresa de Scribd logo
1 de 41
Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web Santiago Bel Sergio Espeja
Inteligencia Artificial ,[object Object],[object Object]
Usos de la IA ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Métodos de IA ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Algoritmos genéticos aplicados a la publicidad
¿y porqué algoritmos genéticos? ,[object Object],[object Object],[object Object],[object Object]
Algoritmos genéticos ,[object Object],[object Object],Photo by  John Mu http://www.flickr.com/people/ jm123467890 /
Definición académica ,[object Object],[object Object]
Una definición más informal… ,[object Object]
Aplicación del Algoritmo Genético ,[object Object],[object Object]
Darwin’s Evolution Theory… ,[object Object],[object Object],[object Object],[object Object]
Requisitos del Algoritmo Genético ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby y Algoritmos Genéticos ,[object Object],[object Object],[object Object],[object Object],gem install gga4r
Representación del individuo ,[object Object],[object Object],1 2 4 3 ,[object Object],[object Object],1 2 3 4 ad6 ad9 ad3 ad2
Persistencia en RoR
Representación del Individuo ,[object Object],#  id  :integer #  clicks  :integer #  impresiones_restantes :integer #  mutaciones  :integer #  generaciones  :integer #  parejas  :string  # NUM_POSICIONES = 4 class Combinacion < ActiveRecord::Base has_many :posicion_anuncios serialize :parejas def click self.clicks += 1 self.update end def impresion self.impresiones_restantes -= 1 self.update end end ,[object Object],[object Object]
Función de fitness ,[object Object]
Función de fitness ,[object Object],class Combinacion < ActiveRecord::Base def fitness self.clicks.to_f/NUM_IMPRESIONES_COMBINACION.to_f end  end
Función recombine ,[object Object]
Función recombine ,[object Object],[object Object],Padres Hijos 1 2 3 4 5 X ad9 ad3 X ad7 1 2 3 4 5 X ad9 ad3 ad4 ad5 1 2 3 4 5 ad1 ad2 ad3 ad4 ad5 1 2 3 4 5 ad1 ad2 ad3 X ad7
Función recombine (II) def recombine(combinacion_2) cross_point = (rand * combinacion_2.posicion_anuncios.size-2).truncate+1 c1_a, c1_b = self.posicion_anuncios.separate(cross_point) c2_a, c2_b = combinacion_2.posicion_anuncios.separate(cross_point) lista_1 = c1_a + c2_b lista_2 = c2_a + c1_b hijo_1 = Combinacion.new hijo_2 = Combinacion.new NUM_POSICIONES.times do |pos| hijo_1.posicion_anuncios << PosicionAnuncio.create(:position => pos, :anuncio => lista_1[pos].anuncio) hijo_2.posicion_anuncios << PosicionAnuncio.create(:position => pos, :anuncio => lista_2[pos].anuncio) end hijo_1.save; hijo_2.save self.parejas ||= [] combinacion_2.parejas ||= [] self.parejas << combinacion_2.id combinacion_2.parejas << self.id self.update; combinacion_2.update return [hijo_1, hijo_2] end
Método Mutate ,[object Object],def mutate mutate_point = (rand * NUM_POSICIONES).truncate anuncios = Anuncio.find :all self.mutaciones += 1 self.posicion_anuncios[mutate_point].anuncio =  anuncios[(anuncios.size*rand).truncate] self.save end 1 2 3 4 5 ad5 ad9 ad3 ad2 ad7 1 2 3 4 5 ad5 ad9 ad3 ad1 ad7
Inicialización y ejecución ,[object Object],[object Object],[object Object],[object Object],[object Object]
Crear la población inicial app/models/combinacion.rb class Combinacion < ActiveRecord::Base def self.create_random c = Combinacion.new  c.impresiones_restantes = NUM_IMPRESIONES_COMBINACION anuncios = Anuncio.find :all NUM_POSICIONES.times do |pos| c.posicion_anuncios << PosicionAnuncio.create(  :position => pos, :anuncio => anuncios[(anuncios.size*rand).truncate] ) end c.save return c end end app/controllers/application.rb @poblacion_actual = Array.new(NUM_COMBINACIONES_GENERACION).collect do  Combinacion.create_random end
¿ Cómo evolucionan los anuncios ?
Código de la evolución app/controllers/application.rb def escoge_combinacion @poblacion_actual = Combinacion.find :all # Si no existe ninguna combinación, creamos la población inicial @poblacion_actual = Array.new(NUM_COMBINACIONES_GENERACION).collect { Combinacion.create_random } if @poblacion_actual.empty? # Se elige una combinación al azar @combinacion = @poblacion_actual.select {|c| c.impresiones_restantes > 0}.shuffle!.first # Si no quedan combinaciones por mostrar, la población actual evoluciona a una nueva generación if @combinacion.nil? @poblacion_actual.each {|c| c.generaciones +=1 } @ga = GeneticAlgorithm.new( @poblacion_actual, {:p_combination => 1.0,   :p_mutation => 0.1,   :max_population => NUM_COMBINACIONES_GENERACION} ) @ga.evolve @extinguidos = @poblacion_actual - @ga.generations[-1] @extinguidos.each {|e| e.destroy} @poblacion_actual = @ga.generations[-1] @poblacion_actual.each do |c|  c.clicks = 0 c.impresiones_restantes = NUM_IMPRESIONES_COMBINACION c.update end @combinacion = @poblacion_actual.select {|c| c.impresiones_restantes > 0}.shuffle!.first end @combinacion.impresion end
¿Qué falta? ,[object Object],app/controllers/application.rb def cuenta_clicks @posicion_anuncio = PosicionAnuncio.find params[:id] @posicion_anuncio.combinacion.click redirect_to @posicion_anuncio.anuncio.url end ,[object Object],app/controllers/[controladores con vistas que muestren publicidad] before_filter :escoge_combinacion, :except => &quot;cuenta_clicks&quot;
¿Y en las vistas? app/helpers/application_helper.rb def pinta_banner(posicion, orientacion) imagen_path = if orientacion.downcase == &quot;h“ @combinacion.posicion_anuncios[posicion-1].anuncio.banner_h  else @combinacion.posicion_anuncios[posicion-1].anuncio.banner_v  end link_to image_tag(imagen_path), :action => &quot;cuenta_clicks&quot;, :id => @combinacion.posicion_anuncios[posicion-1] end app/views/[vistas que muestren publicidad] <%= pinta_banner 4, &quot;h&quot; %>
Simulación ,[object Object],[object Object]
…  o queréis más? ¿Preguntas …
Clasificador Naïve Bayes ,[object Object],[object Object],[object Object],Photo by  Aya Walraven Otake http://www.flickr.com/people/ayalan/
Ruby y los clasificadores Bayesianos ,[object Object],gem install classifier ,[object Object],[object Object],[object Object]
Ejemplo de Naïve Bayes: ,[object Object],[object Object],[object Object],[object Object],[object Object]
Vamos a trabajar (I) ,[object Object],require 'rubygems' require 'stemmer' require 'classifier' # Create the classifier classifier = Classifier::Bayes.new('Technical', 'Commercial')
Grupos de entrenamiento (I) ,[object Object],commercial =  [&quot;I already payed this invoice.&quot;, &quot;Do you have any discount for 1 year contract?&quot;, &quot;Do you have discounts?&quot;, &quot;Do you have any affiliate schema?&quot;, &quot;This is my new VISA no&quot;, &quot;I cannot see my invoices&quot;, &quot;When is finishing my free period?&quot;, &quot;I have a friend that is interested in your services, will you make us any offer?&quot;, &quot;I didn't use your services last mont. I shouldn't be charged&quot;, &quot;Do you have any kind of warranty?&quot;, &quot;Is it possible to freeze my account and continue after holidays?&quot;, &quot;I don't want to continue with your services.&quot;, &quot;Great service! Can I upgrade my account?&quot;, &quot;Where are the differences between shared and private hosting?&quot;]
Grupos de entrenamiento (II) ,[object Object],technician =  [&quot;I have limit of quoata exceeded and I cannot see my mail.&quot;, &quot;Is your ftp server working correctly?&quot;, &quot;My mails get delayed too much when my php application sends them.&quot;, &quot;I cannot read my mail&quot;, &quot;I cannot connect to the ftp server.&quot;, &quot;I cannot upload to the ftp server&quot;, &quot;My rails application is not working in your server.&quot;, &quot;Can I use background processes in the shared hosting?&quot;, &quot;Can I install this gem?&quot;, &quot;My php app is not working&quot;, &quot;Can you setup a ssl cert for me please?&quot;, &quot;I cannot connect to my server.&quot;, &quot;How can I connect to subversion?&quot;]
Vamos a trabajar (II) ,[object Object],# Train the classifier technician.each { |technician| classifier.train_Technical technician } commercial.each { |commercial| classifier.train_Commercial commercial }
Ya está listo! ,[object Object],puts classifier.classify &quot;How can I connect to my ftp account?“ -> Technical puts classifier.classify &quot;Is a private account better?“ -> Commercial puts classifier.classify &quot;Do you have available rails framework?“ -> Technical puts classifier.classify &quot;How much is your shared hosting for a whole year?&quot; -> Commercial puts classifier.classify &quot;I didn't get my discount in the last invoice. Is there something wrong?&quot; -> Commercial puts classifier.classify &quot;Connection Timeout in my ftp connections“ -> Technical puts classifier.classify &quot;Which is my email outgoing server?“ -> Technical
Conclusiones… ,[object Object],[object Object],[object Object],[object Object]
¿Preguntas?
¡Gracias! Código y más información en  bee.com.es

Más contenido relacionado

Similar a Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Computación evolutiva no tradicional
Computación evolutiva no tradicionalComputación evolutiva no tradicional
Computación evolutiva no tradicionalJuan J. Merelo
 
libro-inteligencia-artificial-version-6.pdf
libro-inteligencia-artificial-version-6.pdflibro-inteligencia-artificial-version-6.pdf
libro-inteligencia-artificial-version-6.pdflauraaldana41
 
Presentación Black Hat #SBCongress
Presentación Black Hat #SBCongressPresentación Black Hat #SBCongress
Presentación Black Hat #SBCongressJVSEO
 
El Libro de la Inteligencia Artificial (versión 8)
El Libro de la Inteligencia Artificial (versión 8)El Libro de la Inteligencia Artificial (versión 8)
El Libro de la Inteligencia Artificial (versión 8)Alfredo Vela Zancada
 
Unidad 9 Patrones De DiseñO
Unidad 9 Patrones De DiseñOUnidad 9 Patrones De DiseñO
Unidad 9 Patrones De DiseñOSergio Sanchez
 
Machine Learning a lo berserker - Software Craftsmanship Barcelona 2016
Machine Learning a lo berserker  - Software Craftsmanship Barcelona 2016Machine Learning a lo berserker  - Software Craftsmanship Barcelona 2016
Machine Learning a lo berserker - Software Craftsmanship Barcelona 2016Beatriz Martín @zigiella
 
Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con Bi...
Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con  Bi...Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con  Bi...
Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con Bi...Alba Blanco
 
Avance SEO para TODOS
Avance SEO para TODOSAvance SEO para TODOS
Avance SEO para TODOSDaniel Bustos
 
Como optimizar la tasa de conversión - Rodrigo conde
Como optimizar la tasa de conversión - Rodrigo condeComo optimizar la tasa de conversión - Rodrigo conde
Como optimizar la tasa de conversión - Rodrigo condeData Trust
 
Sin título 1vcxhz
Sin título 1vcxhzSin título 1vcxhz
Sin título 1vcxhzmilton444
 

Similar a Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web (20)

Mejoras de la publicidad en web con la I. A.
Mejoras de la publicidad en web con la I. A.Mejoras de la publicidad en web con la I. A.
Mejoras de la publicidad en web con la I. A.
 
Computación evolutiva no tradicional
Computación evolutiva no tradicionalComputación evolutiva no tradicional
Computación evolutiva no tradicional
 
libro-inteligencia-artificial-version-6.pdf
libro-inteligencia-artificial-version-6.pdflibro-inteligencia-artificial-version-6.pdf
libro-inteligencia-artificial-version-6.pdf
 
Presentación Black Hat #SBCongress
Presentación Black Hat #SBCongressPresentación Black Hat #SBCongress
Presentación Black Hat #SBCongress
 
Aplicaciones
AplicacionesAplicaciones
Aplicaciones
 
El Libro de la Inteligencia Artificial (versión 8)
El Libro de la Inteligencia Artificial (versión 8)El Libro de la Inteligencia Artificial (versión 8)
El Libro de la Inteligencia Artificial (versión 8)
 
TEMA 05.pdf
TEMA 05.pdfTEMA 05.pdf
TEMA 05.pdf
 
Unidad 9 Patrones De DiseñO
Unidad 9 Patrones De DiseñOUnidad 9 Patrones De DiseñO
Unidad 9 Patrones De DiseñO
 
CC_019_art_4.pdf
CC_019_art_4.pdfCC_019_art_4.pdf
CC_019_art_4.pdf
 
Machine Learning a lo berserker - Software Craftsmanship Barcelona 2016
Machine Learning a lo berserker  - Software Craftsmanship Barcelona 2016Machine Learning a lo berserker  - Software Craftsmanship Barcelona 2016
Machine Learning a lo berserker - Software Craftsmanship Barcelona 2016
 
Entregable3
Entregable3Entregable3
Entregable3
 
3A5 Trejo Alexandra -Tarea 2
3A5 Trejo Alexandra -Tarea 23A5 Trejo Alexandra -Tarea 2
3A5 Trejo Alexandra -Tarea 2
 
Herramientas para Enfrentas Nuevos Retos.
Herramientas para Enfrentas Nuevos Retos.Herramientas para Enfrentas Nuevos Retos.
Herramientas para Enfrentas Nuevos Retos.
 
Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con Bi...
Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con  Bi...Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con  Bi...
Ficommerce 2018 - La Publicidad de los datos, Publicidad Programática con Bi...
 
Avance SEO para TODOS
Avance SEO para TODOSAvance SEO para TODOS
Avance SEO para TODOS
 
Guía básica de SEO
Guía básica de SEOGuía básica de SEO
Guía básica de SEO
 
Google AdWords completo
Google AdWords completoGoogle AdWords completo
Google AdWords completo
 
Como optimizar la tasa de conversión - Rodrigo conde
Como optimizar la tasa de conversión - Rodrigo condeComo optimizar la tasa de conversión - Rodrigo conde
Como optimizar la tasa de conversión - Rodrigo conde
 
Sin título 1vcxhz
Sin título 1vcxhzSin título 1vcxhz
Sin título 1vcxhz
 
Excel novenos.pptx
Excel novenos.pptxExcel novenos.pptx
Excel novenos.pptx
 

Último

Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 

Último (20)

Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 

Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

  • 1. Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web Santiago Bel Sergio Espeja
  • 2.
  • 3.
  • 4.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21. Función recombine (II) def recombine(combinacion_2) cross_point = (rand * combinacion_2.posicion_anuncios.size-2).truncate+1 c1_a, c1_b = self.posicion_anuncios.separate(cross_point) c2_a, c2_b = combinacion_2.posicion_anuncios.separate(cross_point) lista_1 = c1_a + c2_b lista_2 = c2_a + c1_b hijo_1 = Combinacion.new hijo_2 = Combinacion.new NUM_POSICIONES.times do |pos| hijo_1.posicion_anuncios << PosicionAnuncio.create(:position => pos, :anuncio => lista_1[pos].anuncio) hijo_2.posicion_anuncios << PosicionAnuncio.create(:position => pos, :anuncio => lista_2[pos].anuncio) end hijo_1.save; hijo_2.save self.parejas ||= [] combinacion_2.parejas ||= [] self.parejas << combinacion_2.id combinacion_2.parejas << self.id self.update; combinacion_2.update return [hijo_1, hijo_2] end
  • 22.
  • 23.
  • 24. Crear la población inicial app/models/combinacion.rb class Combinacion < ActiveRecord::Base def self.create_random c = Combinacion.new c.impresiones_restantes = NUM_IMPRESIONES_COMBINACION anuncios = Anuncio.find :all NUM_POSICIONES.times do |pos| c.posicion_anuncios << PosicionAnuncio.create( :position => pos, :anuncio => anuncios[(anuncios.size*rand).truncate] ) end c.save return c end end app/controllers/application.rb @poblacion_actual = Array.new(NUM_COMBINACIONES_GENERACION).collect do Combinacion.create_random end
  • 25. ¿ Cómo evolucionan los anuncios ?
  • 26. Código de la evolución app/controllers/application.rb def escoge_combinacion @poblacion_actual = Combinacion.find :all # Si no existe ninguna combinación, creamos la población inicial @poblacion_actual = Array.new(NUM_COMBINACIONES_GENERACION).collect { Combinacion.create_random } if @poblacion_actual.empty? # Se elige una combinación al azar @combinacion = @poblacion_actual.select {|c| c.impresiones_restantes > 0}.shuffle!.first # Si no quedan combinaciones por mostrar, la población actual evoluciona a una nueva generación if @combinacion.nil? @poblacion_actual.each {|c| c.generaciones +=1 } @ga = GeneticAlgorithm.new( @poblacion_actual, {:p_combination => 1.0, :p_mutation => 0.1, :max_population => NUM_COMBINACIONES_GENERACION} ) @ga.evolve @extinguidos = @poblacion_actual - @ga.generations[-1] @extinguidos.each {|e| e.destroy} @poblacion_actual = @ga.generations[-1] @poblacion_actual.each do |c| c.clicks = 0 c.impresiones_restantes = NUM_IMPRESIONES_COMBINACION c.update end @combinacion = @poblacion_actual.select {|c| c.impresiones_restantes > 0}.shuffle!.first end @combinacion.impresion end
  • 27.
  • 28. ¿Y en las vistas? app/helpers/application_helper.rb def pinta_banner(posicion, orientacion) imagen_path = if orientacion.downcase == &quot;h“ @combinacion.posicion_anuncios[posicion-1].anuncio.banner_h else @combinacion.posicion_anuncios[posicion-1].anuncio.banner_v end link_to image_tag(imagen_path), :action => &quot;cuenta_clicks&quot;, :id => @combinacion.posicion_anuncios[posicion-1] end app/views/[vistas que muestren publicidad] <%= pinta_banner 4, &quot;h&quot; %>
  • 29.
  • 30. … o queréis más? ¿Preguntas …
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 41. ¡Gracias! Código y más información en bee.com.es