# OpenCog

OpenCog es un proyecto que tiene como objetivo construir un marco de inteligencia artificial de código abierto. OpenCog Prime es una arquitectura para la cognición incorporada, virtual y robótica, que define un conjunto de componentes interactivos diseñados para dar lugar a la inteligencia artificial general (AGI) equivalente a humanos como un fenómeno emergente de todo el sistema. El diseño de OpenCog Prime es principalmente el trabajo de Ben Goertzel, mientras que el marco OpenCog está diseñado como un marco genérico para la investigación de AGI de base amplia. La investigación que utiliza OpenCog se ha publicado en revistas y se ha presentado en conferencias y talleres, incluida la Conferencia anual sobre Inteligencia General Artificial. OpenCog se publica bajo los términos de la licencia pública general GNU Affero.
OpenCog es utilizado por más de 50 empresas, incluyendo Huawei y Cisco.

## Origen

OpenCog se basó originalmente en el lanzamiento en 2008 del código fuente de la propiedad "Novamente Cognition Engine" (NCE) de Novamente LLC. El código NCE original se analiza en el libro PLN (ver más abajo). El desarrollo continuo de OpenCog cuenta con el apoyo del Instituto de Investigación de Inteligencia General Artificial (AGIRI), el proyecto Google Summer of Code, Hanson Robótica, SingularityNET y otros.

## Componentes

OpenCog Consta de:
* Una base de datos orientada a grafos , denominada AtomSpace, que contiene "átomos" (es decir, términos, fórmulas atómicas, sentencias y relaciones) junto con sus "valores" (valoraciones o interpretaciones, que pueden considerarse bases de datos de claves-valor por átomo). Un ejemplo de valor sería un valor de verdad. Los átomos son globalmente únicos, inmutables y están indexados (se pueden buscar); los valores son fugaces y cambiantes.
* Una colección de átomos predefinidos, denominada Atomese, que se utiliza para la representación del conocimiento genérico, como grafos conceptuales y redes semánticas, así como para representar y almacenar las reglas (en el sentido de reescritura de términos) necesarias para manipular tales grafos.
* Colección de átomos predefinidos que codifican un subsistema de tipos, incluidos los constructores de tipos y los tipos de funciones. Se utilizan para especificar los tipos de variables, términos y expresiones, y se utilizan para especificar la estructura de grafos genéricos que contienen variables.
* Una colección de átomos predefinidos que codifican estilos de programación tanto funcionales como imperativos. Estos incluyen la abstracción lambda para vincular variables libres en variables vinculadas, así como para realizar la reducción beta.
* Una colección de átomos predefinidos que codifican un solucionador de teorías de satisfacibilidad módulo, integrado como parte de un motor de consulta de un grafo genérico, para realizar coincidencias de patrones de grafos e hipergrafos (descubrimiento de subgrafos isomórficos). Esto generaliza la idea de un lenguaje de consulta estructurado (SQL) al dominio de consultas genéricas de grafos; es una forma extendida de un lenguaje de consulta de grafos.
* Un motor de reglas genérico, que incluye un encadenamiento hacia adelante y un encadenamiento hacia atrás, que es capaz de encadenar reglas. Las reglas son exactamente las consultas de grafos del subsistema de consultas del grafo, por lo que el motor de reglas se parece vagamente a un planificador de consultas. Está diseñado para permitir la implementación de diferentes tipos de motores de inferencia y sistemas de razonamiento, como inferencia bayesiana o lógica difusa, o tareas prácticas, como solucionadores de restricciones o planificadores de movimiento.
* Un subsistema de asignación de atención basado en la teoría económica, denominado ECAN. Este subsistema se utiliza para controlar la explosión combinatoria de posibilidades de búsqueda que se cumplen durante la inferencia y el encadenamiento.
* Una implementación de un motor de razonamiento probabilístico basado en redes lógicas probabilísticas (PLN). La implementación actual utiliza el motor de reglas para encadenar reglas específicas de inferencia lógica (como modus ponens), junto con algunas fórmulas matemáticas muy específicas que asignan una probabilidad y una confianza a cada deducción. Este subsistema se puede considerar como un cierto tipo de asistente de prueba que trabaja con una forma modificada de inferencia bayesiana.
* Un evolucionador de programa genético probabilístico llamado Meta-Optimizing Semantic Evolutionary Search, o MOSES. Esto se utiliza para descubrir colecciones breves de programas Atomese que realizan tareas; estos pueden considerarse como una especie de aprendizaje de árbol de decisiones, lo que resulta en una especie de bosque de decisiones, o más bien, una generalización del mismo.
* Un sistema de entrada de lenguaje natural que consiste en Link Grammar, y en parte inspirado tanto en la Teoría de Meaning-Text como en la gramática de Palabras de Dick Hudson, que codifica relaciones semánticas y sintácticas en Atomese.
* Un sistema de generación de lenguaje natural .
* Una implementación de Psi-Theory para manejar estados emocionales, unidades e impulsos, denominada OpenPsi.
* Interfaces con robots de Hanson Robtics, incluido el modelado de emociones a través de OpenPsi. Esto incluye el proyecto Loving AI, utilizado para demostrar técnicas de meditación.

## Organización y financiación

En 2008, el Instituto de Investigación de la Inteligencia de las Máquina (MIRI), anteriormente llamado el Instituto de la Singularidad para la Inteligencia Artificial (SIAI), patrocinó a varios investigadores e ingenieros. Se han realizado muchas contribuciones de la comunidad de código abierto desde la participación de OpenCog en Google Summer of Code en 2008 y 2009. Actualmente, MIRI ya no es compatible con OpenCog. OpenCog ha recibido financiación y soporte de varias fuentes, incluido el gobierno de Hong Kong, la Universidad Politécnica de Hong Kong, la fundación Jeffrey Epstein VI y Hanson Robotics. El proyecto OpenCog está actualmente afiliado a SingularityNET y Hanson Robotics.

## Aplicaciones

Al igual que en otras arquitecturas cognitivas, el objetivo principal es crear humanos virtuales, que son personajes en forma de avatar tridimensionales. El objetivo es imitar comportamientos como emociones, gestos y aprendizaje. Por ejemplo, el módulo de emociones en el software solo se programó porque los humanos tenemos emociones. La Inteligencia General Artificial puede realizarse si simula la inteligencia de los humanos.
La autodescripción del proyecto OpenCog proporciona posibles aplicaciones adicionales que van en la dirección del procesamiento del lenguaje natural y la simulación de un perro.