Files
Francisco Jesús Martínez Mimbrera 40dda44902 public code v2
2026-05-23 00:39:14 +02:00

18 KiB

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

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