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
- Características Principales
- Tecnologías y Dependencias
- Arquitectura del Proyecto
- Requisitos del Sistema
- Instalación y Construcción
- Estructura del Proyecto
- Módulos y Plugins
- Modelos de Consenso Implementados
- Motor de Scripting (ASE)
- Representaciones de Preferencia
- Configuración de la Aplicación
- 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:
# Construcción completa
build.bat
# Limpieza y verificación
clean.bat
Mediante Maven directamente:
# 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)
<tycho.version>2.0.0</tycho.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
Ejemplos Precargados en el Workspace
CAEPIA2016— Ejemplo de congreso CAEPIA 2016Palomares2014_HR— Recursos HumanosPalomares2014_Marketing— MarketingPalomares2014_Sales— VentasPalomares2014_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