Flintstones
Plataforma de escritorio para Toma de Decisiones Multi-Criterio (MCDM/MCDA) desarrollada por el grupo de investigación Sinbad2 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
- Compilar
- Ejecutar
- Métodos disponibles
- Tipos de información
- Operadores
- Arquitectura del proyecto
- Estructura de directorios
- Flujo de trabajo en la aplicación
- 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 |
En Windows, Docker Desktop debe estar en modo Linux containers (es el modo por defecto).
Compilar y ejecutar
macOS / Linux
./run.sh
Windows
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:
docker compose stop run # macOS / Linux
docker compose stop run :: Windows
Solo compilar (sin ejecutar)
./build.sh # macOS / Linux
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:
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:
<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 |