396 lines
18 KiB
Markdown
396 lines
18 KiB
Markdown
# Flintstones
|
|
|
|
Plataforma de escritorio para **Toma de Decisiones Multi-Criterio (MCDM/MCDA)** desarrollada por el grupo de investigación [Sinbad2](http://sinbad2.ujaen.es/) de la Universidad de Jaén.
|
|
|
|
Flintstones permite definir un problema de decisión (alternativas, criterios, expertos, dominios) y resolverlo con una amplia colección de métodos de ayuda a la decisión, desde AHP clásico hasta modelos lingüísticos avanzados basados en conjuntos difusos y 2-tuplas.
|
|
|
|
---
|
|
|
|
## Tabla de contenidos
|
|
|
|
- [Requisitos](#requisitos)
|
|
- [Compilar](#compilar)
|
|
- [Ejecutar](#ejecutar)
|
|
- [Métodos disponibles](#métodos-disponibles)
|
|
- [Tipos de información](#tipos-de-información)
|
|
- [Operadores](#operadores)
|
|
- [Arquitectura del proyecto](#arquitectura-del-proyecto)
|
|
- [Estructura de directorios](#estructura-de-directorios)
|
|
- [Flujo de trabajo en la aplicación](#flujo-de-trabajo-en-la-aplicación)
|
|
- [Problemas conocidos resueltos](#problemas-conocidos-resueltos)
|
|
|
|
---
|
|
|
|
## Requisitos
|
|
|
|
El único requisito es tener **Docker Desktop** instalado. Todo lo demás (Java 11, Maven, GTK…) corre dentro del contenedor.
|
|
|
|
| Herramienta | Versión mínima | Dónde conseguirla |
|
|
|---|---|---|
|
|
| Docker Desktop | 20+ | [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop/) |
|
|
|
|
> En Windows, Docker Desktop debe estar en modo **Linux containers** (es el modo por defecto).
|
|
|
|
---
|
|
|
|
## Compilar y ejecutar
|
|
|
|
### macOS / Linux
|
|
|
|
```bash
|
|
./run.sh
|
|
```
|
|
|
|
### Windows
|
|
|
|
```bat
|
|
run.bat
|
|
```
|
|
|
|
Eso es todo. El script gestiona automáticamente cada situación:
|
|
|
|
| Situación | Qué hace el script |
|
|
|---|---|
|
|
| Primera vez | Compila el proyecto + construye la imagen Docker + arranca + abre el navegador |
|
|
| Ya compilado, imagen ya construida | Solo arranca el contenedor + abre el navegador |
|
|
| Ya está corriendo | Abre el navegador directamente |
|
|
|
|
La primera compilación descarga dependencias de Eclipse (~1-2 GB) y tarda unos minutos. Las siguientes arrancan en segundos.
|
|
|
|
La aplicación aparece en el navegador en **`http://localhost:6080`** — no hace falta instalar ningún cliente VNC ni ningún visor especial.
|
|
|
|
Para parar la aplicación:
|
|
|
|
```bash
|
|
docker compose stop run # macOS / Linux
|
|
```
|
|
```bat
|
|
docker compose stop run :: Windows
|
|
```
|
|
|
|
### Solo compilar (sin ejecutar)
|
|
|
|
```bash
|
|
./build.sh # macOS / Linux
|
|
```
|
|
```bat
|
|
build.bat :: Windows
|
|
```
|
|
|
|
Los productos compilados quedan en:
|
|
```
|
|
releng/flintstones.application.product/target/products/
|
|
RCP product-linux.gtk.x86_64.zip
|
|
RCP product-macosx.cocoa.x86_64.zip
|
|
RCP product-win32.win32.x86_64.zip
|
|
```
|
|
|
|
### Sin Docker (avanzado)
|
|
|
|
Requiere JDK 11 y Maven 3.8+ instalados localmente:
|
|
|
|
```bash
|
|
mvn clean install -Dmaven.test.skip=true
|
|
```
|
|
|
|
---
|
|
|
|
## Métodos disponibles
|
|
|
|
### Métodos clásicos / Ranking
|
|
|
|
| Método | Bundle | Descripción |
|
|
|---|---|---|
|
|
| **AHP** | `flintstones.method.ahp` | Analytic Hierarchy Process. Descomposición jerárquica de un problema con comparaciones por pares. |
|
|
| **AHP-Sort** | `flintstones.method.ahp.sort` | Variante de clasificación (sorting) sobre AHP. |
|
|
| **AHP-SortII** | `flintstones.method.ahp.sortii` | Segunda versión de AHP-Sort con agregación grupal mejorada. |
|
|
| **AHP-Sort Fuzzy** | `flintstones.method.ahp.sort.fuzzy` | AHP-Sort con información difusa. |
|
|
| **Numeric TOPSIS** | `flintstones.method.decision.topsis.numeric` | TOPSIS clásico (Hwang & Yoon, 1981). Alternativa más próxima a la solución ideal positiva y más alejada de la negativa. |
|
|
| **VIKOR** | `flintstones.method.vikor` | Método de compromiso para criterios conflictivos (Opricovic). |
|
|
| **Fuzzy VIKOR** | `flintstones.method.vikorFuzzy` | VIKOR con pesos y criterios como números difusos triangulares. |
|
|
| **ELECTRE** | `flintstones.method.electre` | Método de superación (outranking) con relaciones de concordancia y discordancia. |
|
|
| **PROMETHEE** | `flintstones.method.promethee` | Outranking basado en flujos netos de preferencia. |
|
|
| **FlowSort** | `flintstones.method.flowsort` | Extensión de PROMETHEE para problemas de clasificación. |
|
|
| **TODIM** | `flintstones.method.todim` | Basado en la Teoría Prospectiva, modela el comportamiento del decisor ante ganancias y pérdidas. |
|
|
| **MMOORA** | `flintstones.method.mmoora` | Multi-MOORA: combina ratio system, reference point y full multiplicative form. |
|
|
| **Fuzzy MMOORA** | `flintstones.method.mmooraFuzzy` | MMOORA con información difusa. |
|
|
| **WASPAS** | `flintstones.method.waspas` | Weighted Aggregated Sum Product ASsessment: combinación de WSM y WPM. |
|
|
| **Fuzzy WASPAS** | `flintstones.method.waspasFuzzy` | WASPAS con números difusos. |
|
|
| **dEvaluation** | `flintstones.method.dEvaluation` | *(en desarrollo)* |
|
|
|
|
### Métodos lingüísticos y difusos
|
|
|
|
| Método | Bundle | Descripción |
|
|
|---|---|---|
|
|
| **2-Tuple** | `flintstones.method.twoTuple` | Modelo 2-tupla lingüística (Herrera & Martínez, 2000). Elimina pérdida de información en la fusión lingüística. |
|
|
| **Hesitant Linguistic** | `flintstones.method.linguistic.hesitant` | MCDM con expresiones lingüísticas comparativas y 2-tuplas para retranslación. |
|
|
| **HFLTS** | `flintstones.method.linguistic.hflts` | Hesitant Fuzzy Linguistic Term Sets. Para expertos que dudan entre varios términos lingüísticos. |
|
|
| **ELICIT** | `flintstones.method.linguistic.elicit` | Extended Comparative Linguistic Expressions with Symbolic Translation. Modelo de representación lingüística más rico que la 2-tupla. |
|
|
| **Linguistic TOPSIS** | `flintstones.method.linguistic.topsis` | TOPSIS con modelo 2-tupla y función de distancia mejorada. |
|
|
| **Heterogeneous Fusion** | `flintstones.method.linguistic.heterogeneous.fusion` | Fusión de información heterogénea (numérica, lingüística, intervalar) con 2-tuplas. |
|
|
| **Unbalanced Linguistic** | `flintstones.method.linguistic.unbalanced` | Conjuntos de términos lingüísticos no uniformes ni simétricos. |
|
|
| **Multigranular LH** | `flintstones.method.linguistic.multigranular.lh` | Jerarquías lingüísticas para información multigranular. |
|
|
| **Multigranular ELH** | `flintstones.method.linguistic.multigranular.elh` | Jerarquía lingüística extendida (ELH) para mayor flexibilidad de escalas. |
|
|
| **Multigranular Fusion** | `flintstones.method.linguistic.multigranular.fusion` | Fusión multigranular sin restricciones en las escalas, con principio de extensión. |
|
|
| **Fuzzy TOPSIS** | `flintstones.method.topsisFuzzy` | TOPSIS con valoraciones difusas. |
|
|
| **Numeric Common Aggregation** | `flintstones.method.numeric.common.aggregation` | Agregación con información numérica. |
|
|
|
|
---
|
|
|
|
## Tipos de información
|
|
|
|
### Dominios de valoración
|
|
|
|
| Tipo | Bundle | Descripción |
|
|
|---|---|---|
|
|
| **Fuzzy Set** | `flintstones.domain.fuzzyset` | Conjuntos difusos (números difusos triangulares). |
|
|
| **Unbalanced Fuzzy Set** | `flintstones.domain.fuzzyset.unbalanced` | Conjuntos difusos con distribución no uniforme. |
|
|
| **Integer Numeric** | `flintstones.domain.numeric.integer` | Dominio numérico entero. |
|
|
| **Real Numeric** | `flintstones.domain.numeric.real` | Dominio numérico real. |
|
|
|
|
### Tipos de valoración (Valuations)
|
|
|
|
| Tipo | Bundle |
|
|
|---|---|
|
|
| Lingüística (2-tupla) | `flintstones.valuation.linguistic` |
|
|
| ELICIT | `flintstones.valuation.elicit` |
|
|
| Hesitant (HFLTS) | `flintstones.valuation.hesitant` |
|
|
| Unbalanced | `flintstones.valuation.unbalanced` |
|
|
| 2-Tupla | `flintstones.valuation.twoTuple` |
|
|
| Proporcional 2-Tupla | `flintstones.valuation.proportionaltwotuple` |
|
|
| AHP | `flintstones.valuation.ahp` |
|
|
| Numérica entera | `flintstones.valuation.numeric.integer` |
|
|
| Numérica entera (intervalo) | `flintstones.valuation.numeric.integer.interval` |
|
|
| Numérica real | `flintstones.valuation.numeric.real` |
|
|
| Numérica real (intervalo) | `flintstones.valuation.numeric.real.interval` |
|
|
| Unificada | `flintstones.valuation.unifiedValuation` |
|
|
| Difusa | `flintstones.valuation.fuzzy` |
|
|
|
|
---
|
|
|
|
## Operadores
|
|
|
|
### Agregación
|
|
|
|
| Operador | Bundle |
|
|
|---|---|
|
|
| Media aritmética | `flintstones.operator.aggregation.arithmeticmean` |
|
|
| Media geométrica | `flintstones.operator.aggregation.geometricMean` |
|
|
| Media armónica | `flintstones.operator.aggregation.harmonicmean` |
|
|
| OWA (Ordered Weighted Averaging) | `flintstones.operator.aggregation.owa` |
|
|
| Mínimo | `flintstones.operator.aggregation.min` |
|
|
| Máximo | `flintstones.operator.aggregation.max` |
|
|
| MinMax | `flintstones.operator.aggregation.minmax` |
|
|
| Mediana | `flintstones.operator.aggregation.median` |
|
|
| Integral de Choquet | `flintstones.operator.aggregation.choquetIntegral` |
|
|
| Media de Bonferroni | `flintstones.operator.aggregation.bonferroniMean` |
|
|
|
|
Los pesos para OWA se calculan con cuantificadores de Yager (`flintstones.quantifiers.yager`).
|
|
|
|
### Normalización (métodos numéricos)
|
|
|
|
| Operador | Bundle |
|
|
|---|---|
|
|
| Ideal | `flintstones.operator.normalization.numeric.ideal` |
|
|
| Distribuida | `flintstones.operator.normalization.numeric.distributed` |
|
|
|
|
### Unificación (métodos lingüísticos)
|
|
|
|
| Operador | Bundle |
|
|
|---|---|
|
|
| 2-Tupla | `flintstones.operator.unification.twotuple` |
|
|
| ELICIT | `flintstones.operator.unification.elicit` |
|
|
| Difusa | `flintstones.operator.unification.fuzzy` |
|
|
|
|
---
|
|
|
|
## Arquitectura del proyecto
|
|
|
|
Flintstones es una aplicación **Eclipse 4 RCP** (Rich Client Platform) basada en OSGi. Cada funcionalidad se encapsula como un bundle independiente con dependencias declaradas en `META-INF/MANIFEST.MF`.
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Eclipse E4 RCP Shell │
|
|
│ (workbench, perspectives, parts, DI) │
|
|
├──────────────┬──────────────┬───────────────────────┤
|
|
│ application │ framework │ perspective.* │
|
|
│ (UI global) │ (UI MCDM) │ (panels por etapa) │
|
|
├──────────────┴──────────────┴───────────────────────┤
|
|
│ method.* (implementación métodos) │
|
|
├─────────────────────────────────────────────────────┤
|
|
│ entity.* │ valuation.* │ domain.* │ operator.* │
|
|
│ (modelo) │ (valoraciones)│ (dominios)│ (operadores│
|
|
├───────────┴───────────────┴────────────┴────────────┤
|
|
│ model.*.service / model.*.provider │
|
|
│ (capa de servicios OSGi, acceso a datos) │
|
|
├─────────────────────────────────────────────────────┤
|
|
│ helper.* (utilidades: I/O, datos, validación) │
|
|
└─────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Patrón service / provider
|
|
|
|
Cada modelo de datos tiene dos bundles:
|
|
- `flintstones.model.X.service` — interfaz OSGi (contrato)
|
|
- `flintstones.model.X.provider` — implementación concreta
|
|
|
|
Los bundles se conectan vía inyección de dependencias de Eclipse E4 (`@Inject`).
|
|
|
|
### Motor R
|
|
|
|
El bundle `flintstones.engine.R` integra el motor estadístico R para cálculos avanzados.
|
|
|
|
---
|
|
|
|
## Estructura de directorios
|
|
|
|
```
|
|
flintstones-develop/
|
|
├── bundles/ # Todos los plugins OSGi (~250 bundles)
|
|
│ ├── flintstones.application/ # Bundle principal (E4 app model)
|
|
│ ├── flintstones.application.*/ # UI de la aplicación
|
|
│ ├── flintstones.domain.*/ # Tipos de dominio de valoración
|
|
│ ├── flintstones.entity.*/ # Entidades del modelo de dominio
|
|
│ ├── flintstones.method.*/ # Implementaciones de métodos MCDM
|
|
│ ├── flintstones.model.*.service/ # Interfaces de servicio OSGi
|
|
│ ├── flintstones.model.*.provider/ # Implementaciones de servicio
|
|
│ ├── flintstones.operator.*/ # Operadores de agregación/unificación
|
|
│ ├── flintstones.valuation.*/ # Tipos de valoración
|
|
│ ├── flintstones.helper.*/ # Utilidades (I/O, datos, UI, validación)
|
|
│ ├── flintstones.quantifiers.*/ # Cuantificadores lingüísticos
|
|
│ ├── flintstones.engine.R/ # Integración con el motor R
|
|
│ ├── flintstones.clustering.*/ # Clustering aglomerativo
|
|
│ ├── flintstones.theme/ # Tema visual
|
|
│ ├── org.apache.commons.math3/ # Dependencia: Apache Commons Math
|
|
│ ├── org.jfree.chart.jfreechart/ # Dependencia: JFreeChart
|
|
│ ├── de.jaret.util.swt/ # Dependencia: Jaret SWT utils
|
|
│ ├── de.kupzog.ktable/ # Dependencia: KTable
|
|
│ └── org.eclipse.nebula.*/ # Dependencia: Eclipse Nebula widgets
|
|
│
|
|
├── features/ # Features Eclipse (agrupaciones de bundles)
|
|
│ ├── flintstones.feature.application/
|
|
│ ├── flintstones.feature.domain/
|
|
│ ├── flintstones.feature.element/
|
|
│ ├── flintstones.feature.engine/
|
|
│ ├── flintstones.feature.entity/
|
|
│ ├── flintstones.feature.helper/
|
|
│ ├── flintstones.feature.libraries/
|
|
│ ├── flintstones.feature.method/
|
|
│ ├── flintstones.feature.model/
|
|
│ ├── flintstones.feature.operator/
|
|
│ ├── flintstones.feature.quantifiers/
|
|
│ ├── flintstones.feature.theme/
|
|
│ └── flintstones.feature.valuation/
|
|
│
|
|
├── releng/ # Release engineering
|
|
│ ├── flintstones.application.configuration/ # POM raíz con config de Tycho
|
|
│ ├── flintstones.application.product/ # Definición del producto (.product)
|
|
│ └── flintstones.application.update/ # Update site
|
|
│
|
|
├── Dockerfile # Imagen Docker para compilar y ejecutar
|
|
├── docker-compose.yml # Servicios: build, run (Xvfb), run-vnc
|
|
├── build.sh # Script de compilación
|
|
└── pom.xml # POM raíz Maven
|
|
```
|
|
|
|
---
|
|
|
|
## Flujo de trabajo en la aplicación
|
|
|
|
La aplicación guía al usuario a través de **perspectivas** secuenciales:
|
|
|
|
```
|
|
1. Framework
|
|
└─ Definir: alternativas, criterios (con pesos y dominios), expertos
|
|
|
|
2. Framework Structuring
|
|
└─ Organizar la estructura jerárquica del problema
|
|
|
|
3. Gathering
|
|
└─ Recoger las valoraciones de cada experto sobre cada alternativa/criterio
|
|
|
|
4. Method Selection
|
|
└─ Elegir el método MCDM a aplicar y configurarlo
|
|
|
|
5. Execution / Results
|
|
└─ Ejecutar el método y visualizar el ranking de alternativas
|
|
|
|
6. Sensitive Analysis
|
|
└─ Analizar la robustez de los resultados ante variaciones en los pesos
|
|
```
|
|
|
|
Los ficheros de problema se guardan/cargan desde **File → Save / Open**.
|
|
El formato de archivo es propio de Flintstones (XML interno).
|
|
|
|
---
|
|
|
|
## Problemas conocidos resueltos
|
|
|
|
Los siguientes problemas estaban presentes en el repositorio y han sido corregidos:
|
|
|
|
### 1. Bundles inexistentes en `feature.xml`
|
|
`flintstones.feature.method/feature.xml` referenciaba tres bundles que ya no existen en el código:
|
|
|
|
```
|
|
flintstones.method.linguistic.elicit.topsis
|
|
flintstones.method.linguistic.elicit.topsis.phase.experts
|
|
flintstones.method.linguistic.elicit.topsis.phase.experts.ui
|
|
```
|
|
|
|
**Fix:** eliminados del `feature.xml`.
|
|
|
|
### 2. Entradas duplicadas en `feature.xml`
|
|
El mismo `feature.xml` contenía dos veces las entradas de `flintstones.method.linguistic.topsis.*`.
|
|
**Fix:** eliminada la segunda ocurrencia.
|
|
|
|
### 3. URLs HTTP obsoletas en el POM
|
|
El POM de configuración usaba URLs `http://` que ya no funcionan:
|
|
|
|
| Antes | Después |
|
|
|---|---|
|
|
| `http://download.eclipse.org/releases/photon` | `https://download.eclipse.org/releases/2018-09` |
|
|
| `http://central.maven.org/maven2/` | `https://repo1.maven.org/maven2/` |
|
|
|
|
El repositorio de Eclipse Photon (2018) se actualizó a **2018-09** porque Photon no incluía el perfil JRE para JavaSE-11 en su repositorio p2 y los bundles del proyecto lo requieren.
|
|
|
|
### 4. Plataformas de 32 bits incompatibles con JavaSE-11
|
|
Los targets `linux/gtk/x86` y `win32/win32/x86` no pueden resolver `osgi.ee=JavaSE(version=11)` porque no hay JDK 11 de 32 bits disponible.
|
|
**Fix:** eliminados. Solo se compila para x86_64 (Linux, Windows, macOS).
|
|
|
|
### 5. Tycho no encontraba el perfil JavaSE-11
|
|
**Fix:** añadidas al `target-platform-configuration`:
|
|
```xml
|
|
<executionEnvironment>JavaSE-11</executionEnvironment>
|
|
<breeAsFilter>false</breeAsFilter>
|
|
```
|
|
|
|
### Bundles huérfanos (pendientes de integrar)
|
|
Existen en el código pero no están incluidos en ninguna feature (no se empaquetan en el producto):
|
|
|
|
| Bundle | Estado |
|
|
|---|---|
|
|
| `flintstones.operator.aggregation.bonferroniMean` | En disco, no en `pom.xml` ni en features |
|
|
| `flintstones.operator.unification.fuzzy` | En disco, no en `pom.xml` ni en features |
|
|
| `flintstones.method.dEvaluation` (+ sub-bundles) | En `pom.xml`, no en features |
|
|
| `flintstones.valuation.fuzzy` | En `pom.xml`, no en features |
|
|
| `flintstones.valuation.proportionaltwotuple` | En `pom.xml`, no en features |
|
|
| `flintstones.clustering.agglomerative` | En `pom.xml`, no en features |
|
|
|
|
---
|
|
|
|
## Tecnologías
|
|
|
|
| Tecnología | Uso |
|
|
|---|---|
|
|
| **Java 11** | Lenguaje principal |
|
|
| **OSGi / Equinox** | Framework de componentes |
|
|
| **Eclipse E4 RCP** | Framework de aplicación de escritorio |
|
|
| **Eclipse SWT + JFace** | Widgets y UI |
|
|
| **Maven Tycho 2.0.0** | Sistema de build para proyectos Eclipse |
|
|
| **EMF** | Eclipse Modeling Framework (modelos de datos) |
|
|
| **Apache Commons Math 3** | Cálculos matemáticos y estadísticos |
|
|
| **JFreeChart** | Gráficas y visualización |
|
|
| **R Engine** | Cálculos estadísticos avanzados |
|
|
| **Eclipse Nebula** | Widgets SWT adicionales |
|
|
| **Docker** | Entorno de build reproducible |
|