# AFRYCA — Analytical Framework for Group Decision-Making **AFRYCA** es una plataforma de software científico basada en Eclipse RCP para el análisis de problemas de **toma de decisiones en grupo (GDM - Group Decision Making)**. Permite modelar, simular y analizar procesos de consenso con múltiples expertos, incorporando más de 20 modelos de consenso publicados en literatura científica. --- ## Tabla de Contenidos - [Descripción General](#descripción-general) - [Características Principales](#características-principales) - [Tecnologías y Dependencias](#tecnologías-y-dependencias) - [Arquitectura del Proyecto](#arquitectura-del-proyecto) - [Requisitos del Sistema](#requisitos-del-sistema) - [Instalación y Construcción](#instalación-y-construcción) - [Estructura del Proyecto](#estructura-del-proyecto) - [Módulos y Plugins](#módulos-y-plugins) - [Modelos de Consenso Implementados](#modelos-de-consenso-implementados) - [Motor de Scripting (ASE)](#motor-de-scripting-ase) - [Representaciones de Preferencia](#representaciones-de-preferencia) - [Configuración de la Aplicación](#configuración-de-la-aplicación) - [Licencia](#licencia) --- ## Descripción General AFRYCA es una aplicación de escritorio (Rich Client Platform) desarrollada sobre Eclipse E4 que proporciona un entorno integrado para: - Definir **problemas de decisión en grupo** (GDMP) con múltiples expertos, alternativas y criterios. - Aplicar **modelos de consenso** basados en publicaciones científicas para simular procesos de negociación. - Ejecutar **scripts analíticos** en múltiples lenguajes de programación (Python, Groovy, Ruby, Scala, Lua, R) a través del motor ASE. - Visualizar resultados mediante **gráficos y matrices de decisión** interactivos. - Modelar **comportamientos de expertos** (actitudes estándar y adversas) durante el proceso de consenso. La plataforma está orientada a investigadores y académicos en el área de inteligencia computacional y toma de decisiones difusas. --- ## Características Principales ### Problemas de Decisión en Grupo (GDMP) - Definición de problemas con múltiples expertos, alternativas y criterios - Gestión de dominios de datos: números reales, enteros y conjuntos difusos - Soporte para relaciones de preferencia de distintos tipos - Workspace con ejemplos precargados (CAEPIA2016, Palomares2014) ### Modelos de Consenso (20+) - Implementaciones directas de modelos publicados en literatura científica - Más de 20 modelos distintos cubriendo desde 2008 hasta 2020 - Soporte para variantes con clustering, workflow y ELICIT ### Motor de Scripting Analítico (ASE) - Ejecución de scripts en 6 lenguajes: Jython, Groovy, JRuby, Scala, LuaJ y R - Sistema modular de fragmentos, funciones y módulos reutilizables - Consola interactiva integrada ### Simulación - Simulación de rondas de negociación y convergencia al consenso - Modelado de actitudes y comportamientos de expertos - Generación de estadísticas y reportes detallados ### Visualización - Matrices de decisión interactivas - Gráficos con JFreeChart y SWTChart - Vistas de análisis de preferencias - Soporte de gráficos 3D mediante JOGL --- ## Tecnologías y Dependencias ### Lenguajes de Programación | Lenguaje | Uso | |----------|-----| | **Java 8 / 11** | Lenguaje principal del proyecto | | **Groovy** | Motor de scripting embebido | | **Jython (Python)** | Motor de scripting embebido | | **JRuby (Ruby)** | Motor de scripting embebido | | **Scala** | Motor de scripting embebido | | **Lua (LuaJ)** | Motor de scripting embebido | | **R** | Motor de scripting embebido | ### Framework y Plataforma | Tecnología | Versión | Propósito | |------------|---------|-----------| | **Eclipse RCP E4** | Photon | Plataforma Rich Client | | **OSGi** | - | Arquitectura modular de plugins | | **Eclipse Tycho** | 2.0.0 | Build Maven para Eclipse RCP | | **EMF** | - | Eclipse Modeling Framework | ### Librerías de UI y Gráficos | Librería | Propósito | |----------|-----------| | **SWT** | Standard Widget Toolkit (GUI nativa) | | **JFace** | Componentes avanzados y databinding | | **SWTChart** | Gráficos integrados en SWT | | **JFreeChart** | Reportes y gráficos estadísticos | | **JOGL** | Gráficos 3D con OpenGL | | **KTable** | Componentes de tabla personalizados | ### Librerías Científicas | Librería | Propósito | |----------|-----------| | **Apache Commons Math 3** | Cálculos matemáticos avanzados | | **Apache Commons IO** | Utilidades de entrada/salida | ### Herramientas de Construcción - **Apache Maven 3.x** con extensión Tycho PomLess - Scripts de build para Windows (`build.bat`, `clean.bat`) --- ## Arquitectura del Proyecto El proyecto sigue una arquitectura en capas sobre OSGi/Eclipse E4: ``` ┌──────────────────────────────────────────────────────────────┐ │ CAPA DE PRESENTACIÓN (UI) │ │ afryca.rcp · afryca.*.gui · afryca.workspace.gui │ │ afryca.structure.gui · afryca.decisionmatrix.gui │ └───────────────────────────┬──────────────────────────────────┘ │ ┌───────────────────────────▼──────────────────────────────────┐ │ CAPA DE LÓGICA DE NEGOCIO │ │ afryca.consensusmodel (20+ modelos) · afryca.gdmp │ │ afryca.behavior · afryca.simulation · afryca.ase │ └───────────────────────────┬──────────────────────────────────┘ │ ┌───────────────────────────▼──────────────────────────────────┐ │ CAPA DE DATOS / DOMINIO │ │ afryca.domain* · afryca.pr · afryca.cm · afryca.hpr │ │ afryca.lpr · afryca.mpr · afryca.fpr · afryca.hlpr │ │ afryca.structure · afryca.twotuple · afryca.elicit │ └───────────────────────────┬──────────────────────────────────┘ │ ┌───────────────────────────▼──────────────────────────────────┐ │ LIBRERÍAS EXTERNAS / PLATAFORMA │ │ Eclipse RCP/E4 · EMF · Apache Commons · JFreeChart │ │ SWT/JFace · Jython · Groovy · JRuby · Scala · R │ └──────────────────────────────────────────────────────────────┘ ``` ### Patrones Arquitectónicos Utilizados - **OSGi Plugin Architecture**: Modularidad y extensibilidad mediante bundles - **E4 Dependency Injection**: Inyección de dependencias nativa de Eclipse E4 - **Strategy Pattern**: Múltiples implementaciones de modelos de consenso - **Factory Pattern**: Creadores de estructuras y conversores de parámetros - **MVVM**: En componentes GUI con JFace databinding - **Service-Oriented**: Servicios OSGi registrados mediante `ContextFunction` --- ## Requisitos del Sistema ### Para ejecutar AFRYCA - **Java Runtime Environment**: JRE 8 o superior - **Sistema Operativo compatible**: - Windows (32/64 bits) - Linux GTK (32/64 bits) - macOS Cocoa (64 bits) - **Memoria RAM**: 512 MB mínimo recomendado - **Espacio en disco**: ~200 MB para la instalación completa ### Para construir AFRYCA desde código fuente - **Java Development Kit**: JDK 8 o JDK 11 - **Apache Maven**: 3.6.x o superior - **Eclipse IDE** con PDE (Plugin Development Environment) — opcional, para desarrollo --- ## Instalación y Construcción ### Construcción desde código fuente **En Windows:** ```bat # Construcción completa build.bat # Limpieza y verificación clean.bat ``` **Mediante Maven directamente:** ```bash # Construcción completa mvn clean install # Solo empaquetado mvn clean package # Limpieza mvn clean ``` ### Plataformas de construcción configuradas | Sistema Operativo | Arquitectura | Estado | |-------------------|--------------|--------| | Linux GTK | x86 | Soportado | | Linux GTK | x86_64 | Soportado | | Windows win32 | x86 | Soportado | | Windows win32 | x86_64 | Soportado | | macOS Cocoa | x86_64 | Soportado | Los artefactos de construcción se generan en `releng/afryca.application.product/target/`. --- ## Estructura del Proyecto ``` afryca-master/ ├── plugins/ # Plugins OSGi del proyecto (91 total) │ ├── afryca.*/ # 78 plugins propios de AFRYCA │ ├── com.jogamp.jogl/ # Librería JOGL (OpenGL) │ ├── de.kupzog.ktable/ # Widget KTable │ ├── Jython/ # Intérprete Python (Jython) │ ├── org.apache.commons.math3/ # Apache Commons Math │ ├── org.codehaus.groovy/ # Groovy │ ├── org.jfree.chart.JFreeChart/ # JFreeChart │ ├── org.jruby/ # JRuby (Ruby) │ ├── org.luaj/ # LuaJ (Lua) │ └── org.swtchart*/ # SWT Chart │ ├── features/ # Features Eclipse (43 total) │ └── afryca.*.feature/ # Agrupaciones de plugins │ ├── releng/ # Release Engineering │ ├── afryca.application.configuration/ # Configuración del build │ ├── afryca.application.product/ # Definición del producto │ └── afryca.application.update/ # Repositorio P2 │ ├── design/ # Assets de diseño │ ├── logo/ # Logos PNG y SVG │ └── workspace/ # Recursos del workspace │ ├── theme/ # Temas visuales │ ├── 2.0 - Burundi/ # Tema versión 2.0 │ └── 3.0 - Cameroon/ # Tema versión 3.0 (actual) │ ├── workspace/ # Workspace Eclipse de trabajo ├── pom.xml # POM raíz Maven ├── build.bat # Script de construcción (Windows) └── clean.bat # Script de limpieza (Windows) ``` --- ## Módulos y Plugins ### 1. Core de la Aplicación | Plugin | Descripción | |--------|-------------| | `afryca.rcp` | Aplicación RCP principal, lifecycle manager | | `afryca.workspace` | Gestión de ficheros y workspace | | `afryca.theme` | Tema visual CSS de la aplicación | ### 2. Modelos de Datos y Dominio | Plugin | Descripción | |--------|-------------| | `afryca.domain` | Dominio base abstracto | | `afryca.domain.real` | Dominio de números reales | | `afryca.domain.integer` | Dominio de números enteros | | `afryca.domain.fuzzyset` | Dominio de conjuntos difusos | | `afryca.structure` | Estructuras base del modelo | | `afryca.cm` | Consensus Matrix | | `afryca.twotuple` | Representación Two-Tuple | | `afryca.decisionmatrix` | Matrices de decisión | ### 3. Relaciones de Preferencia | Plugin | Descripción | |--------|-------------| | `afryca.pr` | Preference Relation (base) | | `afryca.hpr` | Hesitant Preference Relations | | `afryca.lpr` | Linguistic Preference Relations | | `afryca.mpr` | Multiplicative Preference Relations | | `afryca.fpr` | Fuzzy Preference Relations | | `afryca.hlpr` | Hesitant Linguistic Preference Relations | | `afryca.elicit` | Operaciones ELICIT | ### 4. Lógica Principal de Decisión | Plugin | Descripción | |--------|-------------| | `afryca.gdmp` | Group Decision-Making Problem (núcleo) | | `afryca.consensusmodel` | Base para todos los modelos de consenso | | `afryca.behavior` | Modelos de comportamiento de expertos | | `afryca.behavior.standard` | Comportamiento estándar | | `afryca.behavior.standard_with_adverse` | Comportamiento con actitud adversa | | `afryca.simulation` | Motor de simulación | | `afryca.valueforcer` | Forzadores de valores | | `afryca.parametervalueconverterhelper` | Conversores de parámetros | ### 5. Motor de Scripting (ASE) | Plugin | Descripción | |--------|-------------| | `afryca.ase` | Analytical Scripting Engine (núcleo) | | `afryca.ase.engine.Jython` | Motor Python | | `afryca.ase.engine.Groovy` | Motor Groovy | | `afryca.ase.engine.JRuby` | Motor Ruby | | `afryca.ase.engine.Scala` | Motor Scala | | `afryca.ase.engine.LuaJ` | Motor Lua | | `afryca.ase.engine.R` | Motor R | | `afryca.ase.gui` | Interfaz gráfica del ASE | | `afryca.rcp.ase.context` | Contexto ASE para la aplicación | ### 6. Interfaces Gráficas (GUI) | Plugin | Descripción | |--------|-------------| | `afryca.workspace.gui` | GUI del workspace | | `afryca.gdmp.gui` | GUI de problemas de decisión | | `afryca.consensusmodel.gui` | GUI de modelos de consenso | | `afryca.simulation.gui` | GUI de simulación | | `afryca.structure.gui` | GUI de estructuras | | `afryca.decisionmatrix.gui` | GUI de matrices de decisión | | `afryca.domain.*.gui` | GUIs de dominios de datos | | `afryca.behavior.*.gui` | GUIs de comportamientos | | `afryca.*.gui` | GUIs para cada módulo principal | --- ## Modelos de Consenso Implementados AFRYCA incluye implementaciones de los siguientes modelos de consenso publicados en literatura científica: | Plugin | Referencia | |--------|-----------| | `afryca.consensusmodel.Chiclana2008` | Chiclana et al. (2008) | | `afryca.consensusmodel.HerreraViedma2002` | Herrera-Viedma et al. (2002) | | `afryca.consensusmodel.Kacprzyk2010` | Kacprzyk et al. (2010) | | `afryca.consensusmodel.Palomares2014` | Palomares et al. (2014) | | `afryca.consensusmodel.Palomares2014_clustering` | Palomares et al. (2014) — variante clustering | | `afryca.consensusmodel.Palomares2014_workflow` | Palomares et al. (2014) — variante workflow | | `afryca.consensusmodel.Labella2019` | Labella et al. (2019) | | `afryca.consensusmodel.Labella2020` | Labella et al. (2020) | | `afryca.consensusmodel.Labella2020ELICIT` | Labella et al. (2020) — variante ELICIT | | `afryca.consensusmodel.Rodriguez2015` | Rodríguez et al. (2015) | | `afryca.consensusmodel.Rodriguez2018` | Rodríguez et al. (2018) | | `afryca.consensusmodel.Rodriguez2018_clustering` | Rodríguez et al. (2018) — variante clustering | | `afryca.consensusmodel.Wu2012` | Wu et al. (2012) | | `afryca.consensusmodel.Xu2013` | Xu et al. (2013) | | `afryca.consensusmodel.Zhang2011` | Zhang et al. (2011) | | `afryca.consensusmodel.Zhang2012` | Zhang et al. (2012) | | `afryca.consensusmodel.Quesada2015` | Quesada et al. (2015) | | `afryca.consensusmodel.HongBin2018` | Hong & Bin (2018) | | `afryca.consensusmodel.Ishizaka2018` | Ishizaka et al. (2018) | | `afryca.consensusmodel.TransRisk2018` | TransRisk (2018) | | `afryca.consensusmodel.Fen2015` | Fen et al. (2015) | --- ## Motor de Scripting (ASE) El **Analytical Scripting Engine (ASE)** permite a los investigadores ejecutar scripts de análisis directamente dentro de AFRYCA en múltiples lenguajes de programación. ### Lenguajes Soportados - **Jython** — Python 2.x embebido en Java - **Groovy** — Lenguaje dinámico basado en JVM - **JRuby** — Ruby embebido en Java - **Scala** — Lenguaje funcional/OOP en JVM - **LuaJ** — Lua embebido en Java - **R** — Lenguaje estadístico ### Componentes del ASE - **Fragmentos (Fragments)**: Porciones de código reutilizables - **Funciones (Functions)**: Funciones definidas por el usuario - **Módulos (Modules)**: Agrupaciones de funciones y lógica - **Snippets**: Ejemplos y plantillas de código precargados El workspace incluye un repositorio de snippets y ejemplos precargados para todos los motores disponibles. --- ## Representaciones de Preferencia AFRYCA soporta múltiples formas de expresar preferencias entre alternativas: | Tipo | Nombre Completo | Descripción | |------|----------------|-------------| | **PR** | Preference Relation | Relación de preferencia base | | **HPR** | Hesitant Preference Relations | Preferencias con hesitación | | **LPR** | Linguistic Preference Relations | Preferencias lingüísticas | | **MPR** | Multiplicative Preference Relations | Preferencias multiplicativas | | **FPR** | Fuzzy Preference Relations | Preferencias difusas | | **HLPR** | Hesitant Linguistic Preference Relations | Preferencias lingüísticas hesitantes | ### Dominios de Datos | Dominio | Descripción | |---------|-------------| | **Real** | Valores en el intervalo [0, 1] o rangos personalizados | | **Integer** | Escalas enteras (ej. 1-9) | | **FuzzySet** | Conjuntos difusos triangulares/trapezoidales | | **Two-Tuple** | Representación two-tuple lingüística | --- ## Configuración de la Aplicación ### Información del Producto - **Nombre**: AFRYCA - **Versión**: 3.0 (Cameroon) - **Plataforma base**: Eclipse E4 Application - **Tema visual**: `afryca.theme` (CSS) - **Lifecycle Manager**: `afryca.rcp.lifecycle.LifeCycleManager` ### Temas Disponibles | Versión | Nombre | |---------|--------| | 2.0 | Burundi | | 3.0 | Cameroon (actual) | ### Configuración de Build (Tycho) ```xml 2.0.0 UTF-8 1.8 1.8 ``` ### Ejemplos Precargados en el Workspace - `CAEPIA2016` — Ejemplo de congreso CAEPIA 2016 - `Palomares2014_HR` — Recursos Humanos - `Palomares2014_Marketing` — Marketing - `Palomares2014_Sales` — Ventas - `Palomares2014_Technical` — Técnico --- ## Estadísticas del Proyecto | Métrica | Valor | |---------|-------| | Total de plugins OSGi | 91 | | Plugins propios (afryca.*) | 78 | | Features Eclipse | 43 | | Ficheros Java | ~863 | | Modelos de consenso | 20+ | | Motores de scripting | 6 | | Tipos de PR soportados | 6 | --- ## Licencia Este proyecto es software académico/de investigación. Consultar los términos de licencia específicos en cada plugin. Las dependencias externas incluidas mantienen sus propias licencias: - **JOGL**: New BSD License - **Apache Commons**: Apache License 2.0 - **JFreeChart**: GNU LGPL - **Groovy**: Apache License 2.0 - **JRuby**: CPL/GPL/LGPL (triplicado) - **LuaJ**: MIT License - **Jython**: Python Software Foundation License