Files
AFRYCA/README.md
T
2026-05-22 11:14:29 +02:00

457 lines
18 KiB
Markdown

# 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
<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 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