• Viernes 29 de Marzo de 2024, 07:07

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - deaven

Páginas: [1]
1
Corregido

2
Inteligencia Artificial / Re:Presentacion de un programa de IA(Glupet). Teoría y Práctica
« en: Miércoles 12 de Diciembre de 2012, 15:46 »
Corregido

3
Corregido

4
Inteligencia Artificial / Re: ¿Esto puede considerarse como IA?
« en: Jueves 30 de Septiembre de 2010, 11:18 »
Te voy a comentar mi personal punto de vista.

Para k cualquier programa de IA realmente aprenda, no se le deberían de preprogramar las respuestas, xk además de k no estaría aprendiendo, sería cuento de jamás terminar de programar, ya k los lenguajes con los k podemos comunicar los conceptos de nuestra mente son muchísimos (orales, escritos, corporales, químicos, etc.)

Lo k se debería de hacer, pe. en un chat, es k el propio programa vaya aprendiendo según los chatistas vayan introduciendo más y más datos.
Pe. Si varias veces el programa ha sensado desde el chat k si alguien dice "hola", frecuentemente se contesta con "que tal" o con otro "hola", entonces el mismo programa debe de ser capaz de deducir k si encuentra k algún chatista escribió "hola", entonces es muy posible k una respuesta correcta a sacar en el chat, sea k él mismo conteste "hola" o "que tal" (los algoritmos de deducción, imitación, analogízación y relacionados, son los k debería de programar uno mismo y no las respuestas preprogramadas, si es k se quiere k el programa realmente aprenda)

En este ejemplo, si las respuestas hubieran sido preprogramadas, habría un resultado casi similar, la diferencia estriba en k si utilizas respuestas preprogramadas, la respuesta correcta sólo se obtendrá para el idioma en k las hayas escrito, y nadamás; Pero si utilizas algoritmos k puedan detectar las respuestas posibles, basándose en las respuestas ya dadas anteriormente x los mismos
chatistas, entonces las respuestas correctas serán válidas para CUALQUIER lenguaje.

Si aceptamos k un concepto es todo lo k se sabe acerca de algo en concreto. Con este sistema de aprendizaje, de hecho el programa sería capaz de aprender conceptos (en este caso el concepto de "Saludo en un Chat", es decir, aprendería todas las variaciones del saludo).

Por supuesto, se tiene k tener un sistema k pueda almacenar y representar el entorno desde el cual obtiene sus datos el programa (pe. un chat), lo más fielmente posible, incluido el tiempo mismo (imaginate aprender a tocar un piano sin tener un sentido del tiempo, sería casi imposible).



Espero haberte podido comunicar mi particular punto de vista sobre lo k preguntaste.

Saludos.

5
Gracias x tu interés en el programa.

Actualmente estoy en una fase de actualización del programa (Desde VB6 a VB NET  2008, y mejoras fundamentales del programa).

Esto me llevará todavía varios meses, ya k es mucho lo k se tiene k hacer.

En cuanto termine esta fase y si aún estás interesado en el programa, con mucho gusto serás de los primeros en probarlo.

Saludos.

6
corregido

7
corregido

8
corregido

9
Inteligencia Artificial / Re: La Eterna Discusión
« en: Sábado 7 de Noviembre de 2009, 23:36 »
Desde mi punto de vista "El aprender" es la parte menos difícil de todas. Lo k es mucho más complicado de lograr es tanto encontrar automáticamente las reglas k trae lo aprendido como tratar de crear nueva información a partir tanto de lo aprendido como de las reglas encontradas automáticamente, mediante deducciones, analogías, etc. Esto es lo k los seres humanos hacemos muy eficazmente, y sin duda, quien lo haga mejor es más inteligente k quienes no lo hagan.
Una parte del aprendizaje, es indispensable k se realice mediante prueba y error, esto no se puede evitar....al menos, eso es lo k creo.

10
Hola  :clown:

Pues sí, x aquí andamos, tratando de distraer un poco el cerebro.

Veo k como muchísimos otros, simplemente no crees k un producto como el mencionado pueda ser real; Bien, como lo dije antes, están en todo su derecho a creerlo y lo respeto.

Pero...te pido por un segundo,  k te metas a tu cerebro la idea de k efectivamente lo tengo.

Este producto tendría lo siguiente

Aprende por premio y castigo
Aprende por imitación
Aprende por analogías.
Aprende por deducciones.

Sus sensores no solo pueden ser las entradas de un chat, sino k pueden ser cualquier sentido k te puedas imaginar (tacto, vista, oído, etc.)
Su percepción del significado de los conceptos k maneja, es directamente proporcional a la cantidad de información k tenga de esos conceptos.
Su comportamiento y respuestas están basados en los instintos básicos k le pongas, k se convierten en propósitos fundamentales a lograr.
Su capacidad de creación de nueva información, en base al cruzado de sus conocimientos es brutal.

Pues bien, olvidate x un segundo, k quien tenga un producto k pueda hacer semejantes cosas, pueda convertirse en un Bill Gates cualquiera.
Olvidate x otro segundo, k un producto de este tipo, podría producir un cambio tremendo en la vida de mucha gente...para bien o para mal.

Simplemente imaginate k un producto como el k te pido k aceptes momentáneamente k existe, estuviera en manos equivocadas. Gente k le alterara sus instintos básicos para fines personales, no muy nobles.

¡IMAGÍNATELO¡

Esta de risa :clown: , ¿verdad?

12
Hola Nebire

Te comento algunas de las particularidades de dos de las matrices k uso en el programa.

MATRIZ C
Esta matriz es la principal, tiene una vida permanente y consume casi alrededor del 90% de la memoria usada)
Esta matriz tiene 3 niveles de profundidad matricional -el formato es: C (Nivel1)(Nivel2)(Nivel3).
Si echas un vistazo a la sub RedimMat, verás k solo redimensiono los índices del Nivel1 y del Nivel3 de esa Matriz C.
Para el Nivel1, una vez creados índices extras (mandar a Redim), jamás cambiarán sus elementos (no los borraré, ni los intercambiaré, creo k esto es importante para escoger utilizar matrices en lugar de Colecciones).

Para el caso del Nivel3, una vez creados índices extras, también jamás se borrarán los elementos k contiene, pero sí se reacomodarán frecuentemente en pares, pe. si el contenido del índice 150, se colocará en el índice 100, entonces el contenido del índice 100, se colocará en el índice 150 -debido a esto, en ningún momento tengo k bajar todos los elementos k estén arriba de uno de los elementos movidos-. Creo k aquí también es preferible utilizar matrices en lugar de Colecciones.


MATRIZ CPsValores
Esta matriz es muy parecida a la matriz C (3 niveles de profundidad matricional), excepto en k consume alrededor del 50% del tiempo de proceso del CPU, se crea  y se destruye constantemente.
Con esta matriz, sí k tengo grandes problemas de uso de CPU. Y pienso k es debido a k escogí erróneamente una matriz.
Debido a esa mala elección, si introduzco alrededor de 1000 páginas de conversación al programa, empiezo a tener problemas de tiempo excesivo del proceso de la información, debido a k frecuentemente tengo k eliminar algún índice del nivel1  y luego bajar un lugar a todos los índices k estén arriba del eliminado, y pues me consume muchísimo tiempo.

He pensado en algunas soluciones a ésta última situación (además de la de los árboles k me comentas) , k lamentablemente hasta la amplicación del programa podré implementar (...la novatez se paga).

Y sí, sin duda, la utilización de matrices de varias profundidades ha vuelto la depuración del programa, excesivamente tardado y complejo (ayer mismo, para hacer una sola nueva implementación k involucraba a todo el programa, me tardé toda la noche -...mmmm o será k ya estoy demasiado usado jaja  :hitcomp:  ,
pero...bueno, creo k el fin hará k valga la pena :rolleyes:  )

Nuevamente Gracias x tus comentarios y sugerencias.

Saludos

13
Hola
M0skit0 , Nebire, muchas gracias x sus consejos.

Nebire, efectivamente el dobleteo de espacio en las matrices lo hago para reservar espacio de una sola vez, pero no mucha para no agotarla y que me permita redimensionar la menor cantidad de veces posibles.
Te comento k al principio de la elaboración del programa escogí usar colecciones, pero noté k, en el caso concreto para lo k las uso, era muchísimo más rápido utilizar matrices, x lo k en determinado momento tuve k hacer el cambio casi completo de colecciones a matrices. De hecho, en el caso concreto de mi programa, solo en un caso resultó más eficiente utilizar las colecciones k las matrices .

Como te habrás dado cuenta, soy un programador bastante novato, y no conocía los árboles k mencionas, estuve investigando un poco k erán, y te comento, k por lo k entendí, sin saberlo, actualmente ya he implementado algo un poco parecido a esos árboles.

Nebire, muchas gracias x el código, me quedó muy clara tu explicación.

Y Oigan, sinceramente les reitrero mi agradecimiento x sus comentarios y consejos. :good:

Saludos

14
Hola Nebire, muchas gracias x tu respuesta
Exactamente estoy viendo lo k comentas del rendimiento de lo k Moskito me hizo el favor de contestarme.
Para el programa k estoy optimizando y ampliando, es muy importante la velocidad, y como éste usa, en buena medida, muchas matrices (algunas matrices se redimensionan miles de veces, x cuestión de compromiso entre velocidad y memoria usada), es imprescindible k escoja el sistema más veloz.

Muy interesante tu explicación k das del funcionamiento de las matrices
El método de sustitución del uso de matrices k me comentas me parece también muy interesante. Estoy haciendo las pruebas de rendimiento k comentas tanto de lo comentado por Moskito como lo comentado x tí. Si alguno de esos métodos son más rápidos k los k actualmente uso, sin duda los implementaré, especialmente en la ampliación del programa, porque para lo ya escrito del programa me sería algo tardado, x k son miles de líneas de código k se tendrían k modificar.

Para k te des una idea mas amplía, pongo la sub, k mando llamar para redimensionar varios tipos de matriz al doble de índices k tenga su dimensión última. Indicando entre líneas de asteríscos los puntos k quiero optimizar .


'Nebire, nuevamente gracias x el valioso tiempo k te tomas en contestar, analizaré el código k escribiste a fondo.

Saludos

Código: Visual Basic
  1.  
  2. 'Redimensiona los índices de la matriz al doble de su valor actual, preservando sus valores originales (incluye matrices de una dimensión, 2 dimensiones y matrices dentro
  3.     'de matrices)
  4. Public Sub RedimMat(NombreMatriz As String, Optional Nivel1, Optional Nivel2, Optional LlenarLosNuevosIndicesConElSigValor As Boolean = False, _
  5.                 Optional ValorAIntroducirEnLosIndicesDeLaMat As Variant = SinVal)
  6. 'ENTRADAS
  7. '1)NombreMatriz indica el nombre de la matriz a redimensionar
  8. '2)Nivel1 = Primer nivel de profundidad de matriz
  9. '3)Nivel2 = Segundo nivel de profundidad de matriz
  10. '4)ValorAIntroducirEnLosIndicesDeLaMat = Es el valor k se va a introducir en los nuevos índices redimensionados de la matriz (en caso de k LlenarLosNuevosIndicesConElSigValor
  11.     '= True
  12. '5)LlenarLosNuevosIndicesConElSigValor = Bandera para utilizar ValorAIntroducirEnLosIndicesDeLaMat o no utilizarla
  13.  
  14. 'SALIDAS
  15. '1)La matriz indicada x el NombreMatriz, ya redimensionada al doble
  16.  
  17. Static MatRedimMatTemporal As Variant
  18. Dim EmpezarALlenarConElValor3APartirDeEsteNumero
  19. Dim NumeroLlenando As Long
  20.  
  21. Select Case NombreMatriz
  22.     'Matrices con 1 dimensión
  23.     Case "CPsValores"
  24.         ReDim Preserve CPsValores(LBound(CPsValores) To UBound(CPsValores) + (UBound(CPsValores) _
  25.         - LBound(CPsValores) + 1))
  26.     Case "MatDendDsAMover"
  27.         ReDim Preserve MatDendDsAMover(LBound(MatDendDsAMover) To UBound(MatDendDsAMover) + (UBound(MatDendDsAMover) _
  28.         - LBound(MatDendDsAMover) + 1))
  29.     Case "MatrizDeCamSeñales"
  30.         ReDim Preserve MatrizDeCamSeñales(LBound(MatrizDeCamSeñales) To UBound(MatrizDeCamSeñales) + (UBound(MatrizDeCamSeñales) _
  31.         - LBound(MatrizDeCamSeñales) + 1))
  32.     Case "PoblacsPendientes"
  33.         ReDim Preserve PoblacsPendientes(LBound(PoblacsPendientes) To UBound(PoblacsPendientes) + (UBound(PoblacsPendientes) - LBound(PoblacsPendientes) + 1))
  34.     Case "C"
  35.         ReDim Preserve C(LBound(C) To UBound(C) + (UBound(C) - LBound(C) + 1))
  36.     Case "MatCamSeñalesDeCaseta"
  37.         ReDim Preserve MatCamSeñalesDeCaseta(LBound(MatCamSeñalesDeCaseta) To UBound(MatCamSeñalesDeCaseta) + (UBound(MatCamSeñalesDeCaseta) - LBound(MatCamSeñalesDeCaseta) + 1))
  38.     Case "MatDeCaHisYCaMas"
  39.         ReDim Preserve MatDeCaHisYCaMas(LBound(MatDeCaHisYCaMas) To UBound(MatDeCaHisYCaMas) + (UBound(MatDeCaHisYCaMas) - LBound(MatDeCaHisYCaMas) + 1))
  40.    
  41. '*********************************************************************
  42.     'PUNTO K QUISIERA OPTIMIZAR
  43.     'Matrices q a fuerzas se tienen q copiar a una matriz individual, porque la instrucción Redim no permite redimensionarlas directamente, porque
  44.         'son matrices q están dentro de otra matriz, y vb6 no la reconoce como tal (visual basic 2008 sí la reconoce)
  45.     Case "C() () "
  46.         MatRedimMatTemporal = C(Nivel1)(Nivel2)
  47.         If LlenarLosNuevosIndicesConElSigValor = True Then EmpezarALlenarConElValor3APartirDeEsteNumero = UBound(MatRedimMatTemporal) + 1
  48.         ReDim Preserve MatRedimMatTemporal(LBound(MatRedimMatTemporal) To UBound(MatRedimMatTemporal) + (UBound(MatRedimMatTemporal) _
  49.         - LBound(MatRedimMatTemporal) + 1))
  50.         If LlenarLosNuevosIndicesConElSigValor = True Then
  51.             For NumeroLlenando = EmpezarALlenarConElValor3APartirDeEsteNumero To UBound(MatRedimMatTemporal)
  52.                 MatRedimMatTemporal(NumeroLlenando) = ValorAIntroducirEnLosIndicesDeLaMat
  53.             Next
  54.         End If
  55.         C(Nivel1)(Nivel2) = MatRedimMatTemporal
  56.     Case "CpsValores() () "
  57.        
  58.         MatRedimMatTemporal = CPsValores(Nivel1)(Nivel2)
  59.         If LlenarLosNuevosIndicesConElSigValor = True Then EmpezarALlenarConElValor3APartirDeEsteNumero = UBound(MatRedimMatTemporal) + 1
  60.         ReDim Preserve MatRedimMatTemporal(LBound(MatRedimMatTemporal) To UBound(MatRedimMatTemporal) + (UBound(MatRedimMatTemporal) _
  61.         - LBound(MatRedimMatTemporal) + 1))
  62.         If LlenarLosNuevosIndicesConElSigValor = True Then
  63.             For NumeroLlenando = EmpezarALlenarConElValor3APartirDeEsteNumero To UBound(MatRedimMatTemporal)
  64.                 MatRedimMatTemporal(NumeroLlenando) = ValorAIntroducirEnLosIndicesDeLaMat
  65.             Next
  66.         End If
  67.         CPsValores(Nivel1)(Nivel2) = MatRedimMatTemporal
  68. '***********************************************************************
  69.  
  70.     'Matrices con 2 dimensiones
  71.     Case "MatCamLlavesTratadas"
  72.         ReDim Preserve MatCamLlavesTratadas(LBound(MatCamLlavesTratadas, 1) To UBound(MatCamLlavesTratadas, 1), _
  73.         LBound(MatCamLlavesTratadas, 2) To UBound(MatCamLlavesTratadas, 2) + (UBound(MatCamLlavesTratadas, 2) - LBound(MatCamLlavesTratadas, 2) + 1))
  74.        
  75.        
  76.     Case "MatSeparadoresDeConceptos"
  77.         ReDim Preserve MatSeparadoresDeConceptos(LBound(MatSeparadoresDeConceptos, 1) To UBound(MatSeparadoresDeConceptos, 1), _
  78.         LBound(MatSeparadoresDeConceptos, 2) To UBound(MatSeparadoresDeConceptos, 2) + (UBound(MatSeparadoresDeConceptos, 2) - LBound(MatSeparadoresDeConceptos, 2) + 1))
  79.    
  80.     Case "MatrizDeAccionesEnVisio"
  81.         ReDim Preserve MatrizDeAccionesEnVisio(LBound(MatrizDeAccionesEnVisio, 1) To UBound(MatrizDeAccionesEnVisio, 1), _
  82.         LBound(MatrizDeAccionesEnVisio, 2) To UBound(MatrizDeAccionesEnVisio, 2) + (UBound(MatrizDeAccionesEnVisio, 2) - LBound(MatrizDeAccionesEnVisio, 2) + 1))
  83.        
  84.     Case "MatDeCaHis"
  85.         ReDim Preserve MatDeCaHis(LBound(MatDeCaHis, 1) To UBound(MatDeCaHis, 1), _
  86.         LBound(MatDeCaHis, 2) To UBound(MatDeCaHis, 2) + (UBound(MatDeCaHis, 2) - LBound(MatDeCaHis, 2) + 1))
  87.    
  88.    
  89.     Case Else
  90.     ErrorCritico ("La Matriz se tiene que redimensionar antes de continuar"), -1: Debug.Assert Seguir: Ending 'Si no encontré el NombreMatriz, saca un error y ya no puedo
  91.         'continuar hasta k solucione el error.
  92.    
  93.    
  94.    
  95. End Select
  96.  
  97.  
  98. NombreMatriz = ""
  99.  
  100. End Sub
  101.  
  102.  
  103.  
  104.  
  105.  

15
Si k funciona, no sabía k se podía hacer eso.

Mil gracias m0skit0, me ahorraste mucho tiempo. :rolleyes:

16
Hola.

Tengo un problema en Visual Basic 6, quisiera ver si alguién me pdría echar una mano.

Según yo, el siguiente código sí debería de trabajar en VB6 (El código sí trabaja bien en Visual Basic 2008)

 Private Sub Matrices()
        Dim hola()
        Dim Matr()

        ReDim Preserve hola(20)
        ReDim Matr(2)

        hola(20) = Matr
        hola(20)(0) = "como"

        ReDim Preserve hola(20)(1)
 End Sub

Al ejecutar el código en VB6, me da error de sintaxis en "ReDim Preserve hola(20)(1)" ¿Cuál podría ser el problema?, ¿Hay alguna solución?

17
Hola

Si alguien piensa k el programa Glupet es un tongo, está en todo su derecho de pensarlo, espero pronto poder hacer k cambien de opinión.

Saludos

18
OK

Investigando un poco en internet, pude finalmente solucionar el problema.

Bajé e instalé el archivo DsoFileSetup_KB224351_x86.exe desde Micros oft

Con el archivo ya ejecutado, tuve una referencia automática en VB6 a DSO OLE Document Properties Readers 2.1

Mediante el archivo de ejemplo para VB6, además de poder modificar, mediante programación todos los datos de la ventana propiedades del archivo, incluyendo las de las pestañas "General" y "Resumen", se pueden modificar varias cosas mas.

Saludos

19
:rolleyes:
Saludos compañeros de este foro.

Quisiera ver si me pueden hacer el favor de sacarme de la siguiente duda.

Cuando estoy en el explorador de windows XP y pongo el mouse encima de un archivo binario creado por mí, con una extensión k yo le puse .gpt, aparece un recuadro indicándome varios datos del archivo.
Estando en el mismo explorador, al hacer click en el archivo con el botón derecho y seleccionar propiedades aparece una ventana con 2 pestañas, una llamada "General" y la otra llamada "Resumen"

Con un código similar al siguiente, puedo leer (y en algunos casos también escribir), vía programación,  los datos k aparecen en la pestaña "General"

Dim NombreDeArchivo as string
 Set fs = CreateObject("Scripting.FileSystemObject")
 Set Archivofs = fs.GetFile(PathYNombreDeArchivo)

 debug.print "Fecha de Creacion " & Archivofs.DateCreated
 debug.print "Ultimo Uso " & Archivofs.DateLastAccessed
 debug.print "Ultima Modificacion" &  Archivofs.DateLastModified

 NombreDeArchivo = Archivofs.Name
 Archivofs.Name = "NuevoNombreDeArchivo"


La pregunta es: ¿Cómo podría modificar, vía programación, los datos que se muestran en la pestaña "Resumen" de la ventana propiedades del archivo mencionado?

De antemano, gracias x su ayuda.

20
Visual Basic 6.0 e inferiores / Re: Mscomm
« en: Lunes 13 de Abril de 2009, 02:01 »
Hola

Hugo, si todavía sigues utilizando el interruptor en lugar del ratón sugerido x Nebire, quizá tu problema se solucionaría poniéndole un capacitor (condensador), k vaya desde tierra a la salida del interruptor.

Para encontrar el valor del capacitor tendrías k encontrarlo un poco con la práctica. Desde unos cuantos picofaradios hasta unos cuantos microfaradios.

Alguna vez hice un decodificador de televisión análogico (cuando nadie lo hacía todavía) y necesitaba k para activarse, el usuario pusiera una determinada secuencia de teclas desde los botones de la TV. Y fue ahí donde se me presentaba este problema. Al analizar con el osciloscopio la salida del interruptor cuando se accionaba, esta salida tenía precisamente mucho ruido. Mi solución fue la k te comento.

Saludos

21
Hola Nebire, gracias x comentar.

En respuesta a tu pregunta, te comento k Glupet  es una combinación k me gustó como suena, de los nombres de mis dos queridas abuelas: Guadalupe y Petra. Además la idea del programa es k pueda servir a las personas de algún modo, x lo k la terminación pet me agradó. Hay un poquito mas en la palabra Glupet, pero principalmente es esto.

Saludos.

22
Hola
Lamento no haber podido publicar nada durante algún tiempo, pero no he tenido mucho tiempo para hacerlo.

Lamentablemente he decidido hacer comercial el programa, x lo k ya no me es posible dar detalles de su funcionamiento, x lo k les pido una disculpa por ello.

Solo les comento k en poco tiempo, tendré lista una versión para probar en línea.

La versión en línea, tendrá conocimientos en español a un nivel aproximado de 8 años (pero en muchos temas el conocimiento será mucho mayor, especialmente en los k no están involucradas emociones), con posibilidades completas de nuevo aprendizaje de cualquier tema.
El conocimiento de inglés será, a un nivel de 4 a 5 años.
Para cualquier otro lenguaje (k no esté cifrado, o al menos k pueda ser usado en la vida diaria de las personas), el nivel de conocimiento sera de 0 años, pero con capacidad de aprendizaje completo. El aprendizaje de nuevo conocimiento corre, por completo, por cuenta del usuario, simplemente platicando con el programa, enseñándole nuevo conocimiento. Solo muy al principio lo emitido x el Glupet no será muy acertado (aunque siempre real), pero muy pronto su certeza de respuestas y preguntas será muy parecida a la del usuario (excepto en los temas k desconozca pero k puede aprender)

La única limitación del programa on-line será un límite de tiempo.

Saludos

23
NOTA IMPORTANTE:
Lamentablemente, después de escribir muchos mas información de la k  sale en esta respuesta, el Foro me indicaba error y ya no podía recuperar lo escrito. X lo k pido disculpas y por tanto mejor crearé una Página personal en algún sitio, en la k iré poniendo todo lo k falta.
Cuando tenga lista la página, se las daré a conocer en este mismo foro. Mil disculpas.

24
Introduccion

25
HOLA:  :)


PRESENTACIÓN.
Actualmente tengo casi terminado un modelo de programa al k he llamado, provisionalmente Glupet. Este programa tiene presentación gráfica tipo Chat, y k como comenté antes, trata de aprender todo lo sensado, y de producir comportamientos inteligentes en base a lo sensado.
Algo, importantísimo en este programa, es k no tiene ni una sola regla gramatical programada, y puede experimentarse con él en cualquier lenguaje (español, inglés, francés o cualquier otro lenguaje, no importa el k sea, inclusive lenguajes ideográficos). Y simplemente cambiando sus tipos de sensores puede predecir comportamientos de cualquier índole.

Páginas: [1]