457 lines
18 KiB
Markdown
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
|
|
|
|
|