Examen final y Takehome

Examen Final INF 201

Diciembre de 2017

El examen final del curso será, como informado, el lunes 11 de diciembre de 10am a 12m en el Centro de estudiantes (arriba). Como discutido en clase, vierte primariamente sobre los algoritmos de búsqueda y ordenamiento, pero cubre también los conceptos importantes de estructuras y tipos abstractos de datos (ADT) que se estudiaron en el curso.

El exámen final tiene también un componente de tipo Takehome que estoy publicando aquí. Sigan las instrucciones.

Parte Takehome

  1. Utilizando la implementación del ADT Graph del libro (URL), programa un grafo representado por la siguiente matriz de adyacencias.
1 2 3 4 5 6
1 2 4 1
2
3 1 2 5
4 2 3
5 4
6

 

Deberás entregar todo el código escrito para:

  1. Crear el grafo
  2. Agregar todos los vertices
  3. Agregar todas las áristas con sus respectivos pesos
  4. Al final, escribe unas pocas líneas de programación para visualizar oportunamente todo el grafo.

También, visualiza y guarda una imágen gráfica del grafo, como en el ejemplo de la figura.

Grafo del libro “Problem Solving with Algorithms and Data Structures”
  1. El segundo problema a resolver es muy simple. Escribe la función recursiva:
Palíndromo( palabra ) --> booleano

que determine si la ‘palabra’ es un palíndromo (es decir, una palabra o frase que se lee igual de izquierda a derecha como al contrario).  Tu función debe ser recursiva.

Revisa las reglas para escribir funciones recursivas explicadas el 8 de  diciembre (The Three Laws of Recursion) y los ejemplos del libro interactivo.

Entrega Takehome: 16 de diciembre de 2017 (email)

 

 

 

Asignación Timing

Complejidad y eficiencia

Con esta asignación tendremos la oportunidad de analizar el comportamiento de varios algoritmos de ordenamiento (sorting) al tener que elaborar grandes cantidades de datos.

Utilizando las función de time.clock(), analiza el tiempo para ejecutar los algoritmos de:

  1. selection sort
  2. shell sort
  3. merge sort
  4. quick sort

Cada algoritmo debe analizarse con una lista random de enteros de 100, 1000, 10,000 y 100,000 elementos respectivamente.

Ejemplo:

import time

def run( )
    start = time.clock()
    Do something
    end = time.clock()
    return whatever, end - start

Entrega una tabla como la siguiente:

Screen Shot 2017-12-04 at 4.56.30 PM

En las celdas hay que poner el promedio simple y la mediana del tiempo de ejecución de 5 corridas distintas para cada caso.

Entrega: martes 12 de diciembre de 2017

Clase del 15 de noviembre: BST + Calendario y autoestudio

Binary Search Trees etc.

En la clase de hoy se vio:

  1. la definición y estructura de un árbol binariuoi de búsqueda, o BST;
  2. su ADT;
  3. el algoritmo para insertar nodos;
  4. al algoritmo para buscar nodos (que vimos es de tipo O(log n);
  5. y finalmente, el algoritmo para eliminar nodos manteniendo la estructura ordenada del BST.
  6. Todo esto corresponde al capítulo 6.13.

Asigné una tarea doble. Para la tarea, en vez de utilizar el código del libro, favor usar el código que se encuentra en este archivo: bst.py.

Además, se habló del calendario de las próximas semanas:

  1. No habrá reunión el lunes 20; el miércoles 22 Sagrado estará cerrado. Estaré en USC el lunes y el martes de la próxima semana (en la mañana).
  2. Que pasen un buen día de Acción de Gracias y envíen una foto a #inf201 en Twitter.
  3. Este periodo lo deben dedicar al estudio de los algoritmos de búsqueda y de ordenamiento.
  4. En particular, la foto siguiente ilustra la distribución de estudio de los varios capítulos de estos temas.algoritmosEst
  5. Nos veremos de vuelta el día lunes, 27 de noviembre.
  6. 27 nov: Búsqueda –Instructor repasa los dos algoritmos de búsqueda (secuencial y binaria). Miguel ofrece clase sobre Hashing (búsqueda).
  7. 29 de nov.: Ordenamiento 1Roberto explicará el Selection Sort; Miguel explicará el Insertion Sort. Steeven explicará el Shell Sort;
  8. Lunes 4 de diciembre: Examen #2: Todo sobre árboles y complejidad (Big O).
  9. 6 dic.: Ordenamiento 2Roberto explicará el Merge Sort; y finalmente Steeven explicará el Quick Sort.
  10. 10 dic.: Última clase. Grafos.

El examen final será comprensivo, pero con énfasis en los algoritmos de búsqueda y (sobre todo) ordenamiento. La fecha será entre el 11 y el 18 de diciembre, según lo establezca la oficina de Registro.

Asignación: árboles

1. Parse tree

a) Implementa la estructura de un parse tree. Usa el código del capítulo 6.6.  Recuerda que debes utilizar el statement

import operator

al inicio de tu código.

Luego, inserta la expresión

((3 + 5) - (8 - 3) * 4)

Produce las salidas correspondientes a la lectura pre- y post-order del árbol.

Luego, calcula e imprime el valor de la expresión utilizando el método “evaluate” aplicandolo al árbol producido en el paso anterior.

b) Produce el árbol parse que corresponde a la expresión (incorrecta)

3 * (5 – )

Evalúa la expresión con el método “evaluate”.

Discute una manera de corregir el error que produce el programa al no poder calcular un resultado.

2. Binary seach tree

Implementa el programa para construir un árbol de tipo binary seach tree (bst). Véase el capítulo 6.13. Entra parejas clave:valor de la manera siguiente:

claves = Los nombres de las lista [‘antonio’, ‘maria’, sofia’, ‘mark’, ‘jose’, ‘carmen’, ‘roberto’, ‘steeven’, ‘elvira’, ‘miguel’]. Los valores asociados a cada clave se insertan de manera aleatoria, con valores numéricos entre 1 y 100.

Visualiza el árbol completo por medio de un método

printTree(self)

asociado a la misma clase bst. Este método debe navegar el árbol completo e imprimir todos los pares clave:valor contenidos en el árbol.

Entrega: lunes 27 de noviembre, 9:30am

Parse Trees (Clase del 13 de noviembre)

En la clase de hoy se explicó el concepto de árbol y en particular de árbol de tipo “parse”. Ver libro en http://interactivepython.org/runestone/static/pythonds/Trees/ParseTree.html.

A continuación un segmento del código discutido:

from pythonds.basic.stack import Stack
from pythonds.trees.binaryTree import BinaryTree
import operator

def evaluate(parseTree):
    opers = {'+':operator.add, '-':operator.sub, '*':operator.mul, '/':operator.truediv}
    ...
        fn = opers[parseTree.getRootVal()]
        return fn(evaluate(leftC),evaluate(rightC))
    else:
        return parseTree.getRootVal()

Para entender como funciona este código, consideren el ejemplo siguiente:

  1.  opers[‘+’] –> operator.add, que corresponde a la función suma del módulo operator.
  2. La asignación fn = opers[…] asigna a fn la función ‘operator.add’
  3. Luego se invoca a fn pasándole recursivamente las evaluaciones de los suárboles izquierdo y derecho. Supongamos que el suárbol izquierdo devuelva el valor 5 y el derecho, el valor 7:
  4. Siendo fn = operator.add, la instrucción fn(5, 7) se traduce en:
  5. operator.add(5, 7), la cual produce el valor 12.

Corran las siguientes dos líneas (asegúrense agregar ‘import operator’ al inicio de su código):

import operator
...
fn = operator.add
print(fn(5,7))

Este concepto de función que puede ser invocada a partir de su nombre es muy poderoso… ¡no lo tienen todos los lenguajes!

 

Post-María: Stack

Hola!

Después de las semanas pasadas (sin luz, muchos sin agua) gracias al efecto del huracán María, volvemos a reanudar la clase de Estructuras de Datos en su horario regular, LM 9:30am. Nos reuniremos este lunes 16 de octubre en el lugar de siempre y liego nos ubicaremos mejor.

Espero que todos puedan asistir!

Les escribí que se adelantaran la lectura de dos capítulos de nuestro libro interactivo.

3.6. Simple Balanced Parentheses, y

3.9.1. Conversion of Infix Expressions to Prefix and Postfix

El primer capítulo trata de una técnica sencilla que nos sirve para mostrar como se use un Stack. En el ejemplo, para verificar si en una dada  expresión (un String) haya o no paréntesis balanceados.

El segundo lo deben leer después del 3.9. Infix, Prefix and Postfix Expressions, para entender qué son expresiones artiméticas infijas (las regulares, de tipo 3 + 5 * 3) y las alternas pre- y post-fijas. Pre y post se refieren a dónde se escriben los operadores en la expresión. Si es prefija, los operadores se ponen **antes**:

+ 3 * 4 5  significa 3 + 4*5

Una expresión post-fija es una donde los operadores se escriben **después** de los operandos:

3 6 8 – * equivale a 3*(6-8)

Corran los ejemplos y verifiquen que entienden el proceso de conversión. El lunes lo explicaré bien.

Aquí les dejo una animación muy interesante sobre el algoritmo de conversión de prefijo a posfijo, uno muy elegante y sencillo, utilizando un Stack.

https://www.youtube.com/watch?v=rA0x7b4YiMI

Luego trabajaremos el algoritmo para evaluar una expresión posfija, es decir para calcular el valor que resulta de una expresión artimética. Aquí está el capítulo para que se puedan adelantar, si quieren: 3.9.3. Postfix Evaluation. Nótese que todo el asunto de transformar de prefijo a posfijo se justifica por la simple razón de que es mucho más simple evaluar una expresión posfija que una prefija (al menos por parte de una máquina…), y el algoritmo lo demuestra. Added bonus: ¡las expresiones posfijas no necesitan paréntesis!

https://www.youtube.com/watch?v=TeM6DdvSxvQ

 

Best First Search: Graphs

package graphs;
import java.util.*;
import graphs.State;
public class GraphImplementation
{
public void dfs(Node root)
{
//Avoid infinite loops
if(root == null) return;

System.out.print(root.getVertex() + “t”);
root.state = State.Visited;

//for every child
for(Node n: root.getChild())
{
//if childs state is not visited then recurse
if(n.state == State.Unvisited)
{
dfs(n);
}
}
}

public void bfs(Node root)
{
//Since queue is a interface
Queue<Node> queue = new LinkedList<Node>();

if(root == null) return;

root.state = State.Visited;
//Adds to end of queue
queue.add(root);

while(!queue.isEmpty())
{
//removes from front of queue
Node r = queue.remove();
System.out.print(r.getVertex() + “t”);

//Visit child first before grandchild
for(Node n: r.getChild())
{
if(n.state == State.Unvisited)
{
queue.add(n);
n.state = State.Visited;
}
}
}
}

public static Graphs createNewGraph()
{
Graphs g = new Graphs();
Node[] temp = new Node[8];

temp[0] = new Node(“S”, 2);
temp[1] = new Node(“A”, 3);
temp[2] = new Node(“D”, 3);
temp[3] = new Node(“B”, 3);
temp[4] = new Node(“E”, 3);
temp[5] = new Node(“F”, 2);
temp[6] = new Node(“G”, 1);
temp[7] = new Node(“C”, 1);
//S = 0
temp[0].addChildNode(temp[1]);
temp[0].addChildNode(temp[2]);
//A = 1
temp[1].addChildNode(temp[0]);
temp[1].addChildNode(temp[2]);
temp[1].addChildNode(temp[3]);
//D = 2
temp[2].addChildNode(temp[0]);
temp[2].addChildNode(temp[4]);
temp[2].addChildNode(temp[1]);
//B = 3
temp[3].addChildNode(temp[4]);
temp[3].addChildNode(temp[7]);
temp[3].addChildNode(temp[1]);
//E = 4
temp[4].addChildNode(temp[5]);
temp[4].addChildNode(temp[2]);
temp[4].addChildNode(temp[3]);
//F = 5
temp[5].addChildNode(temp[4]);
temp[5].addChildNode(temp[6]);
//G = 6
temp[6].addChildNode(temp[5]);
//C = 7
temp[7].addChildNode(temp[3]);

for (int i = 0; i < 8; i++)
{
g.addNode(temp[i]);
}
return g;
}

public static void main(String[] args) {

Graphs gDfs = createNewGraph();
GraphImplementation s = new GraphImplementation();

System.out.println(“—————DFS—————“);
s.dfs(gDfs.getNode()[0]);
System.out.println();
System.out.println();
Graphs gBfs = createNewGraph();
System.out.println(“—————BFS—————“);
s.bfs(gBfs.getNode()[0]);

}

}

package graphs;

public class Graphs {

public int count; // num of vertices
private Node vertices[];

public Graphs()
{
vertices = new Node[8];
count = 0;
}

public void addNode(Node n)
{
if(count < 10)
{
vertices[count] = n;
count++;
}
else
{
System.out.println(“graph full”);
}
}

public Node[] getNode()
{
return vertices;
}
}

package graphs;
public class Node {

public Node[] child;
public int childCount;
private String vertex;
public State state;

public Node(String vertex)
{
this.vertex = vertex;
}

public Node(String vertex, int childlen)
{
this.vertex = vertex;
childCount = 0;
child = new Node[childlen];
}

public void addChildNode(Node adj)
{
adj.state = State.Unvisited;
if(childCount < 30)
{
this.child[childCount] = adj;
childCount++;
}
}

public Node[] getChild()
{
return child;
}

public String getVertex()
{
return vertex;
}

}

public enum State {

Unvisited,Visiting,Visited;
}


Asignación 7: Cilog

A.

  1. tell brothers(X,Y) <- brother(X,Y).

tell brothers(X,Y) <- sister(X,Y).

tell sister(nathalia,nieves).

tell brother(carlos,beltran).

tell parent(X,Y) <- father(X,Y).

tell parent(X,Y) <- mother(X,Y).

tell brothers(Q,W) <- parent(X,Q) & parent(X,W).

tell father(walt,carlos).

tell father(walt,nathalia).

tell mother(ana,carlos).

tell mother(ana,nathalia).

ask brothers(nathalia,nieves).

 

  1. tell male(X).

tell female(X).

ask female(nathalia).

B.

  1. tell pinta(X) <- ~fotografos (X).
  1. tell escultores(X) <- ~fotografos(X).
  1. tell escultores(X) <- pintores(X).

C.

  1. tell comen(X) <- perro(X).
  1. tell gusta(X) <- perro(X) ; gato(X).
  1. tell perro(X) <- snoopy(X).
  1. tell nogusta(X) <- snoopy(X).

D.

Vx [M(x) -> H(x)]

-M(x) V H(x)

-H(x) V T

_____________

-M(x) V T

 

Vx [H(x) -> -F(x)]

-M(x) V -F(x)

F(x) V T

_____________

-H(x) V T

 

-M(x) V T

T V -H(x)

____________

-M(x) V -H(x)

-(M(x) ^ H(x))

libreria de prolog cilog.


Proyecto Final (2016)

Kevin Flores Alvarez
201-30-5386

Monografia: Inteligencia Artificial

Abstract

The definition of artificial intelligence is evolving constantly, and so are the mentalities of society. In a world where humans are always leaning on technology, some key questions need to be answered before embarking on the journey of artificial intelligence; Can it be done? If so, what does that mean for mankind? This paper, exposes some realities towards the creation of such programs and machines. Moreover, to understand artificial intelligence is to understand intelligence itself. What does it mean for a program to be intelligent? These are the questions that many people have considered since the creation of logic programming. The historical significance of this field is not understated at any given moment since the creation of the first functional computer. To understand intelligence, we first must understand machine.

Taking into consideration the clashing views of people like Elon Musk and Stephen Hawking, artificial intelligence boils down to if we should pursue this course of action or if we should not.  The fate of Society is not defined by everyone, but rather its leaders. And in a field such as this, it is the scientists who decide if we should ever use machines that can positively or negatively affect our lives. Are we ready for such technology? Is it worth using it? What will be the price that human kind will be for such machines?

La Inteligencia Artificial

La inteligencia artificial se puede entender como una rama de estudio que ha logrado obtener una importancia monumental en la industria de la tecnología, incorporando funciones sobre las máquinas para tener rasgos humanos como la educación, la distinción entre una cosa u otra, o el resolver problemas o situaciones de cualquier índole. Esta área de estudio en el campo de la informática enfatiza la creación y el estudio de las maquinas con inteligencia artificial que trabajan y reaccionan en base a las órdenes que les dan, pero esto se llega a ver de una manera mucho más compleja. Su objetivo principal es permitir el desarrollo de las computadoras que sean capaces de ejercer actos o ideas que usualmente son realizados por el ser humano. Su funcionamiento es un dilema que caería en la programación de ciertos factores como el conocimiento, el razonamiento, la percepción, el aprendizaje, la resolución de ecuaciones complejas, la planificación, la capacidad de manipular y mover objetos, entre otros. La inteligencia artificial, abreviada como IA, tiene varios factores que son fundamentales en el proceso de ejercer esta rama. Estos factores importantes se clasifican como la ingeniería del conocimiento, el aprendizaje automático, la percepción de la máquina y la visión y la robótica.

Las maquinas con inteligencia artificial pueden ser programadas para tener la capacidad de actuar y reaccionar como cualquier ser humano después de que se le suministrar suficiente información relacionada con nuestro mundo. Esto se debe a la ingeniera del conocimiento que es un factor importante en su proceso de investigación y funciona al proveer acceso al IA sobre objetos, categorías, propiedades y las relaciones entre todos estos para que pueda implementar la práctica de la ingeniería del conocimiento. En cuestión de lo que vendría siendo el sentido común, el razonamiento y el poder resolver cualquier tipo de problema es un punto extremadamente complejo en el estudio de la inteligencia artificial. Otro factor importante en el IA es el aprendizaje automático, que se basa en programar la maquina con la capacidad de aprender por su cuenta sin necesitar algún tipo de supervisión. El análisis matemático de los algoritmos de este tipo de aprendizaje y su rendimiento es un punto importante que es definido en el campo de la informática teórica, la cual es también reconocida como la teoría de aprendizaje computacional.

Usualmente este tipo de educación requiere el poder identificar patrones de entrada, mientras que el aprender bajo una buena supervisión contiene la clasificación, que determina la categoría en la que un objeto pertenece, y la regresión numérica, que se ocupa de obtener un conjunto de ejemplos de entrada o salida numérica, que descubren las funciones que permiten generar los productos adecuados a partir de las respectivas entradas. La percepción y la visión son otros dos factores importantes en la IA. La percepción se puede implementar en las máquinas para que estas tengan la capacidad de utilizar los estímulos sensoriales que les ayudan a entender los diferentes aspectos del mundo, mientras que la visión le brinda capacidad a la máquina para poder analizar las entradas visuales con menos sub-problemas, tales como el reconocimiento de los rostros, la voz y los objetos. Cuando se busca hacer que una máquina de inteligencia artificial pueda mover objetos por su cuenta la robótica se introduce en este campo. La robótica es otro factor importante en esta rama porque los mismos robots requieren inteligencia para, exitosamente, llevar a cabo cualquier tarea que se les asigne, como la manipulación de los objetos y la navegación, al igual que sub-problemas como la localización, la planificación de movimientos y cartografía.

En la creación de la inteligencia artificial, el propósito principal se basa en la creación de sistemas para computadoras que puedan pensar y actuar por su cuenta, aunque la meta puede llegar a variar y depender plenamente de lo que el programador desee. Lo más importante que se debe entender es que un sistema de inteligencia artificial no tiene que trabajar exactamente igual que los seres humanos, lo importante es que este sea inteligente. Para llegar a esto la creación de la IA usualmente cae bajo tres variantes. La primera variante, que es usualmente conocida como la IA Fuerte, se basa en la creación de un sistema que piense exactamente o mejor que un ser humano. En esta variante cualquier resultado puede utilizarse, no solo para construir sistemas que piensan, pero también para que esta explique cómo los seres humanos pensamos.

Este tipo de IA es sumamente complejo, por lo cual aún no se ha podido crear un verdadero modelo de IA fuerte que logre exitosamente la simulación de la cognición humana, por el simple hecho de que este es un problema difícil de resolver. La segunda variante, que es generalmente conocida como IA Débil, se basa en crear un sistema programado con inteligencia para llevar a cabo un trabajo determinado sin importar que esta tenga el pensamiento humano. En esta variante, aunque se es posible crear un sistema con el proceso de pensar humano, el sistema es limitado a la tarea para la cual fue diseñada y programada. Finalmente, la tercera variante, usualmente referida como el intermedio, incorpora ambos la IA fuerte y la IA débil, al utilizar el razonamiento humano como modelo pada informar e inspirar, pero no como el objetivo final de imitación. En esta variante los sistemas hacen uso del racionamiento humano como guía, pero no son impulsados por el objetivo de modelar este racionamiento a la perfección.

¿Es posible?

Tomando en cuenta que la IA fuerte busca crear un sistema que piense exactamente o mejor que el humano, mientras que la IA débil busca crea un sistema que solo complete su tarea asignada, se debe generar la pregunta de que si: ¿La inteligencia artificial es algo que es posible? Hasta el día de hoy esta es una interrogante que se ha contestado de manera negativa, ya que el concepto de conocimiento humano es bastante complicado. Se pueden llegar a construir dispositivos computarizados que actúen en base a la labor para la cuales fueron creados, lo cual comienza con la creación de la primera computadora que inicialmente fue creada para resolver problemas matemáticos complejos. Después de un tiempo en el avance tecnológico cualquier dispositivo computarizado podía ser programado con un registro sobre el tipo de equipo que este fuera, lo cual en teoría significaría que el mismo dispositivo llega a tener entendimiento sobre lo que es y para lo que sirve. Más allá en el avance tecnológico los dispositivos son creados con periféricos de entrada o salida, que les permiten la comunicación con otros dispositivos, lo que hace que estos también tengan conciencia de lo que les rodea. El problema estaría en el que el dispositivo piense, actué y razone como lo haría un ser humano, pero por su cuenta. Este problema se crea en base de lo poco que se sabe de los procesos cerebrales que una persona genera para pensar aun con el extenso conocimiento que tenemos de este órgano. Básicamente si una computadora no tiene la capacidad de pensar o racionar por su cuenta no es considerada inteligencia artificial.

La I.A. en la Sociedad

Antes de discutir como la inteligencia artificial puede afectar a la sociedad, se tiene que entender la historia de las computadoras y las maquinas durante la evolución de la humanidad. En su inicio las computadoras y las maquinas servían como instrumentos para mejorar y facilitar la vida de las personas logrando así resolver situaciones complejas, proveyendo acceso total a la información y el conocimiento de diferentes sociedades e culturas, y conectando a las personas con el resto del mundo. Por lo cual es fácil de entender que la inteligencia artificial es una herramienta con la capacidad de, no tan solo cambiar la tecnología que hoy conocemos, pero también puede traer un cambio radical en la manera en que vive la sociedad. Este cambio radical es el tema controversial que genera este la I.A y que se ha estado discutiendo desde el inicio de las maquinas. La posible consecuencia que viene atada con la creación de la inteligencia artificial es el remplazo total que las computadoras o programas con I.A puedan tener sobre las personas, lo cual es algo que ha estado sucediendo desde mucho tiempo antes de la creación de los celulares. Las maquinas, literalmente, se han creado para poder agilizar el trabajo en todo.

El remplazar al personal por maquinas no solo ayudaría a la industria a obtener mejores resultados de una manera más rápida, pero también les estaría ahorrando mucho dinero. Las maquinas ya han comenzado a remplazar a las personas en sus trabajaos, pero más allá, tomando en cuenta como las computadoras han avanzado hasta este día, estas se han vuelto una dependencia sobre las nuevas generaciones que ya ni se molestan en conversar entre sí mismos por estar conectados a sus celulares. La sociedad se ha vuelto adicta a la tecnología hasta el punto en que las personas no se molestan en aprender, ya que simplemente al presionar un botón uno puede acceder a la información requerida. La inteligencia artificial es algo que todavía no se ha podido crear a su máxima potencia y de ser posible, si llegáramos a incluir este factor a los avances tecnológicos que hay en la sociedad, el futuro de la humanidad estaría en peligro. No es tan solo el hecho de que las maquinas nos estén remplazando, sino que también es el hecho de que nuestra mente está siendo manipulada, al ser expuesta a los medios, y nuestra salud se está viendo afectada, por la dependencia a la tecnología. Entre más avances tecnológicos haya en la sociedad más inútiles nos volvemos. 

Conclusión

En conclusión la inteligencia artificial se puede entender como una de las ramas de estudio que en el campo de la informática que trata con la creación y el estudio de las maquinas con inteligencia artificial. El objetivo de este estudio es permitir el desarrollo de las computadoras que sean capaces de ejercer actos o ideas que usualmente son realizados por el ser humano. Estas se clasifican en la I.A. Fuerte, que busca hacer que la I.A. sea posible, mientras la I.A. Débil, busca hacer computadoras y programas que ejerzan alguna labor determinada. Aunque la I.A. no ha podido ser creada por completa, es algo que puede llegar a afectar a la sociedad de una manera drástica, en gran parte de una manera negativa. Esto se debe al hecho de que la humanidad de estos tiempos se ha vuelto dependiente de la tecnología que nos rodea. La humanidad nació con la capacidad de sobrevivir en este mundo con  el uso de recursos básicos, pero hemos llegado al punto de que no podemos sobrevivir sin estar conectados a la tecnología. Antes la sociedad conocía y trabajaba más de lo que conoce o trabaja ahora. Hemos hecho grandes avances en distintos campos, no solo en la tecnología, para facilitar y mejorar nuestro estilo de vida, pero no hemos tomado en cuenta que también hemos provocado una dependencia en estos avances. Personalmente, entiendo que estos avances y la tecnología son buenos para el futuro de la humanidad hasta cierto punto. Las maquinas, las computadoras, los programas y hasta la inteligencia artificial son creaciones humanas, por lo cual cae en nosotros mismos el darles un buen uso para que sirvan de manera positiva en nuestras vidas. En fin, la inteligencia artificial es algo que puede traer consecuencias desconocidas en el futuro de la humanidad.

Referencias

Herrera, R.G. (2016) La inteligencia artificial ¿Hacia dónde nos lleva?.¿Cómo ves?. Extraído en: http://www.comoves.unam.mx/numeros/articulo/2/la-inteligencia-artificial-hacia-donde-nos-lleva.

Warwick, K. (2013) El futuro de la inteligencia artificial y la cibernética. Open Mind. Extraído en: https://www.bbvaopenmind.com/articulo/el-futuro-de-la-inteligencia-artificial-y-la-cibernetica/.

Ariza, Luis, M. (2015) Ventajas y riesgos de la Inteligencia Artificial. Muy Interesante. Extraído en: http://www.muyinteresante.es/tecnologia/articulo/ventajas-y-riesgos-de-la-inteligencia-artificial-651449483429