Simulación

Descripción

El objetivo prioritario de AFRYCA es permitir simular los procesos de alcance de consenso en problemas de toma de decisión en grupo para analizar los modelos tanto de forma individual como conjunta.

Con el lanzamiento de AFRYCA 3, el framework pasa a ofrecer múltiples partes y perspectivas con las que es posible analizar diferentes aspectos de las simulaciones. Además, con la integración de ASE y BIRT el usuario cuenta con total libertad para definir sus propias funciones de análisis y gráficas de visualización.

Cabe destacar que desde la publicación de AFRYCA 3 también es posible acceder a todas las simulaciones realizadas, lo cual abre la puerta a la realización de análisis comparativos.

Features

La funcionalidad se proporciona desde las siguientes features:

afryca.simulation.feature

Plug-ins para la funcionalidad básica de simulaciones

  • Plug-ins incluidos:
    • afryca.simulation
  • Features incluidas:
    • afryca.ase.feature
    • afryca.consensusmodel.feature
    • afryca.gdmp.feature

afryca.simulation.gui.feature

Plug-ins para la funcionalidad gráfica de simulaciones

  • Plug-ins incluidos:
    • afryca.simulation.gui
    • org.eclipse.wb.swt
    • org.swtchart
  • Features incluidas:
    • afryca.behavior.gui.feature
    • afryca.consensusmodel.gui.feature
    • afryca.gdmp.gui.feature
    • afryca.simulation.feature

Plug-ins

Los plug-ins desarrollados de forma específica para proveer su funcionalidad son los siguientes:

afryca.simulation

Funcionalidad básica de simulaciones

  • Dependencias:
    • afryca.ase
    • afryca.gdmp
    • afryca.behavior
    • afryca.consensusmodel
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.di.extensions
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.services
    • org.eclipse.e4.ui.workbench
    • org.eclipse.e4.ui.model.workbench

afryca.simulation.gui

Funcionalidad gráfica de simulaciones

  • Dependencias:
    • afryca.simulation
    • afryca.ase.gui
    • afryca.fpr.gui
    • afryca.gdmp.gui
    • afryca.behavior.gui
    • afryca.consensusmodel.gui
    • afryca.birt
    • afryca.workspace.service.events
    • org.eclipse.wb.swt
    • org.swtchart
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.di.extensions
    • org.eclipse.e4.core.services
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.core.commands
    • org.eclipse.e4.ui.services
    • org.eclipse.e4.ui.model.workbench
    • org.eclipse.e4.ui.di
    • org.eclipse.e4.ui.workbench
    • org.eclipse.e4.ui.workbench.perspectiveswitcher
    • org.eclipse.jface

Estructura

La utilidad de los diferentes paquetes y clases que conforman los plug-ins es la siguiente:

afryca.simulation

  • afryca.simulation
    • Simulation: Modelo para la representación de una simulación.
  • afryca.simulation.command
    • DeselectAlternative: Controlador para deseleccionar la alternativa seleccionada.
    • DeselectElement: Controlador abstracto para deseleccionar la alternativa o el experto seleccionado.
    • DeselectExpert: Controlador para deseleccionar el experto seleccionado.
    • Simulate: Controlador para realizar una simulación.
  • afryca.simulation.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.simulation.service
    • ISimulationService: Interfaz del servicio Simulation.
  • afryca.simulation.service.events
    • ISimulationServiceEvents: Definición de eventos lanzados por el servicio Simulation a través del broker de E4.
  • afryca.simulation.service.provider
    • SimulationServiceContextFunction: Función contextual empleada para instanciar el servicio Simulation cuando se solicita su inyección.
    • SimulationServiceProvider: Proveedor del servicio Simulation.

afryca.simulation.gui

  • afryca.simulation.gui.addon
    • PreferencesAddon: Add-on para la gestión de las preferencias. Subscrito a cambios en el espacio de trabajo para mantener la consistencia.
  • afryca.simulation.gui.command
    • ModifySimulationPreferences: Controlador para modificar las preferencias de simulaciones.
    • Simulate: Controlador para realizar uan simulación informando gráficamente de cualquier error y de su finalización.
  • afryca.simulation.gui.composite
    • AlternativesRankingComposite: Composite para la visualización de la diferencia entre dos ranking de alternativas.
    • AlternativesTableViewer: Composite para la visualización de una tabla de alternativas.
    • AttitudeStackElement: Composite para la gestión de la actitud en la pila de simulación.
    • BehaviorStackElement: Composite para la gestión del comportamiento en la pila de simulación.
    • ConfigurationStackElement: Composite para la gestión de la configuración en la pila de simulación.
    • ConsensusModelStackElement: Composite para la gestión del modelo de consenso en la pila de simulación.
    • ElementPanelComposite: Composite para la visualización de una tabla de expertos o alternativas y un panel de comandos asociado.
    • ElementTableViewer: Composite abstracto para la visualización de una tabla de alternativas o de expertos.
    • ExpertsTableViewer: Composite para la visualización de una tabla de expertos.
    • GDMPStackElement: Composite para la gestión del problema de toma de decisión en grupo en la pila de simulación.
    • MDSComposite: Composite para la visualización de las preferencias empleando escalado multidimensional.
    • PreferencesComposite: Composite para la visualización de la diferencia entre dos relaciones de preferencias.
    • PreferencesPanelComposite: Composite para la visualización de la diferencia entre dos relaciones de preferencias y un panel de comandos asociado.
    • StackElement: Composite abstracto para la gestión de un elemento de la pila de simulación.
  • afryca.simulation.gui.dialog
    • SimulationPreferencesDialog: Diálogo para la modificación de las preferencias de simulaciones.
  • afryca.simulation.gui.icons: Rutas localizadas a los iconos usados en diferentes idiomas.
  • afryca.simulation.gui.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.simulation.gui.part
    • FinalRoundPart: Parte para la selección de la ronda final de la simulación.
    • GDMPPart: Parte para la visualización del problema de toma de decisión en grupo empleado en una simulación.
    • InitalRoundPart: Parte para la selección de la ronda inicial de la simulación.
    • MDSPart: Para para la visualización del escalado multidimensional de las preferencias.
    • MetricsPart: Parte para la visualización de los enlaces a módulos de métricas.
    • ResultsPart: Parte para la visualización de los resultados de una simulación.
    • SettingsPart: Parte para la visualización de la configuración de una simulación.
    • SimulationChartsPart: Parte para la visualización de gráficas BIRT en la perspectiva de simulación.
    • SimulationPart: Parte para la gestión de la pila de simulación.
    • SimulationsChartsPart: Parte para la visualización de gráficas BIRT en la perspectiva de simulaciones.
    • SimulationsPart: Parte para la selección de la simulación a analizar.
  • afryca.simulation.gui.part.provider
    • ESettingElement: Enumerado de los diferentes tipos de elementos en la configuración de una simulación.
    • ResultsContentProvider: Proveedor de contenido de resultados de simulación.
    • RoundContentProvider: Proveedor de contenido de ronda de simulación.
    • RoundLabelProvider: Proveedor de etiqueta de ronda de simulación.
    • SettingFieldNameColumnLabelProvider: Proveedor de etiqueta de nombre de elemento de configuración de simulación.
    • SettingFieldValueColumnLabelProvider: Proveedor de etiqueta de valor de elemento de configuración de simulación.
    • SettingsContentProvider: Proveedor de contenido de configuración de simulación.
    • SimulationLabelProvider: Proveedor de etiqueta de simulación.
    • SimulationsContentProvider: Proveedor de contenido de simulaciones.
  • afryca.simulation.gui.preferences
    • PreferenceConstants: Constantes usadas para las preferencias establecidas en el archivo 'preferences.ini'.

Add-ons

La función de los add-ons proporcionados por los plug-ins se indica seguidamente:

afryca.simulation.gui.addon.PreferencesAddon

Definido en el plug-in afryca.simulation.gui e implementado por la clase afryca.simulation.gui.addon.PreferencesAddon. Garantiza la consistencia de las preferencias ofrecidas por afryca.simulation.gui. La consistencia de las preferencias es analizada cada vez que se inicia la aplicación o que se realiza un cambio en el espacio de trabajo de la aplicación que pueda afectar su estado.

Servicio

El plug-in afryca.simulation define un servicio declarativo OSGi para las simulaciones. El servicio se define en el archivo OSGI-INF/simulation_service_context_function.xml y hace uso de una función contextual eclipse, la cual realiza una instanciación de la clase afryca.simulation.service.provider.SimulationServiceContextFunction cuando se solicita la inyección del servicio cuya interfaz define afryca.simulation.service.ISimulationService.

  • Interfaz del servicio:
    • canExecute() : boolean // Información de si es posible realizar una simulación.
    • configurationMeetsRequirements() : boolean // Información de si la configuración cumple con los requerimientos para la simulación.
    • execute() : Simulation // Ejecución de la simulación configurada en la pila.
    • getSimulationStack() : Map<Long, Simulation> // Obtención de la pila de simulaciones.
    • setSelection(Simulation) // Establecimiento de la simulación seleccionada.
    • getSelection() : Simulation // Obtención de la simulación seleccionada.
    • setInitialRound(Integer) // Establecimiento de la ronda inicial de la simulación.
    • getInitialRound() : Integer // Obtención de la ronda inicial seleccionada de la simulación.
    • setFinalRound(Integer) // Establecimiento de la ronda final de la simulación.
    • getFinalRound() : Integer // Obtención de la ronda final seleccionada de la simulación.
    • setSelectedExpert(String) // Establecimiento del experto seleccionado.
    • getSelectedExpert() : String // Obtención del experto seleccionado de la simulación.
    • setSelectedAlternative(String) // Establecimiento de la alternativa seleccionada.
    • getSelectedAlternative() : String // Obtención de la alternativa seleccionada.

Broker

El servicio hace uso del broker de E4 para notificar de diversa información de interés.

  • Topics:
    • SIMULATIONS // Raíz.
    • SIMULATIONS/GROUP_UPDATES // Cambio de estado de actualización grupal.
    • SIMULATIONS/ADDED // Simulación añadida.
    • SIMULATIONS/SELECTION // Cambio de simulación seleccionada.
    • SIMULATIONS/SIMULATION_INITIAL_ROUND // Cambio de ronda inicial seleccionada.
    • SIMULATIONS/SIMULATION_FINAL_ROUND // Cambio de ronda final seleccionada.
    • SIMULATIONS/SIMULATION_SELECTED_EXPERT // Cambio de experto seleccionado.
    • SIMULATIONS/SIMULATION_SELECTED_ALTERNATIVE // Cambio de alternativa seleccionada.

Comandos

Los comandos añadidos por los plug-ins son los siguientes:

afryca.simulation.command.simulate

Definido en el plug-in afryca.simulation e implementado por la clase afryca.simulation.command.Simulate. Realiza una simulación.

afryca.simulation.command.deselect_expert

Definido en el plug-in afryca.simulation e implementado por la clase afryca.simulation.command.DeselectExpert. Deseleccionada un experto.

afryca.simulation.command.deselect_alternative

Definido en el plug-in afryca.simulation e implementado por la clase afryca.simulation.command.DeselectAlternative. Deseleccionada una alternativa.

afryca.simulation.gui.command.simulate

Definido en el plug-in afryca.simulation.gui e implementado por la clase afryca.simulation.command.gui.Simulate. Realiza una simulación informando de su finalización o de cualquier error ocurrido durante la misma.

afryca.simulation.gui.command.modify_simulation_preferences

Definido en el plug-in afryca.simulation.gui e implementado por la clase afryca.simulation.gui.command.ModifySimulationPreferences. Lanza la ventana de diálogo para la modificación de las preferencias asociadas a las simulaciones.

Partes

Las partes definidas por los plug-ins son las siguientes:

afryca.simulation.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.SimulationPart. Muestra el estado de la pila de simulación, permitiendo navegar entre las diferentes vistas que gestionan los elementos de la misma.

afryca.simulation.simulations.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.SimulationsPart. Muestra todas las simulaciones realizadas permitiendo seleccionar la deseada.

afryca.simulation.settings.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.SettingsPart. Muestra la configuración de la simulación seleccionada.

afryca.simulation.results.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.ResultsPart. Muestra los resultados de la simulación seleccionada.

afryca.simulation.mds.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.MDSPart. Muestra una visualización de las preferencias empleando escalado multidimensional.

afryca.simulation.metrics.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.MetricsPart. Muestra los resultados de los enlaces a módulos de métricas.

afryca.simulation.simulation.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.SimulationPart. Muestra los gráficos BIRT establecidos en preferencias para 'simulation.chart.functions'.

afryca.simulation.round.initial.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.InitialRoundPart. Muestra todas las rondas realizadas en la simulación seleccionada permitiendo seleccionar aquella que será considerada la ronda inicial.

afryca.simulation.round.final.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.FinalRoundPart. Muestra todas las rondas realizadas en la simulación seleccionada permitiendo seleccionar aquella que será considerada la ronda final.

afryca.simulation.gdmp.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.GDMPPart. Muestra el problema de toma de decisión en grupo usado en la simulación seleccionada.

afryca.simulation.simulations.part

Definida en el plug-in afryca.simulation.gui e implementada por la clase afryca.simulation.gui.part.SimulationsPart. Muestra los gráficos BIRT establecidos en preferencias para 'simulations.chart.functions'.

Preferencias

Los plug-ins emplean las siguientes preferencias.

module.bindings

Usada por el plug-in afryca.simulation.gui. Permite establecer los enlaces a módulos a mostrar en la parte afryca.simulation.gdmp.part.

simulation.chart.functions

Usada por el plug-in afryca.simulation.gui. Permite establecer los gráficos BIRT a mostrar en la parte afryca.simulation.simulation.part.

simulations.chart.functions

Usada por el plug-in afryca.simulation.gui. Permite establecer los gráficos BIRT a mostrar en la parte afryca.simulation.simulations.part.

Notas finales

  1. La cadena de invocación habitual de simulación es:
    1. El comando definido en afryca.simulation.gui comprueba que la simulación puede ser realizada y en tal caso invoca al comando definido en afryca.simulation.
    2. El comando definido en afryca.simulation comprueba que la simulación puede ser realizada y en tal caso emplea el servicio Simulation para realizarla.
    3. El servicio realiza la simulación si es posible y en tal caso notifica por el broker de la nueva simulación usando el topic 'SIMULATIONS/ADDED'.
  2. Como se desprende del punto anterior, la comprobación de si es posible llevar a cabo una simulación puede ser realizada múltiples veces para una única acción. Además, esta comprobación es una tarea muy costosa, al ser cada modelo responsable de garantizar si se cumplen las condiciones para su ejecución. Por todo ello, las comprobaciones almacenadas en el servicio cada vez que se realiza una modificación son almacenadas y no son recalculadas hasta que esto es estrictamente necesario.
  3. Si se prevé que un único cambio provocará múltiples notificaciones por el broker se notifica una notificación grupal con el topic 'SIMULATIONS/GROUP_UPDATES'. Por ejemplo, el cambio de selección de simulación puede hacer necesario cambio el experto, alternativa, ronda inicial y ronda final seleccionados, si los subscriptores controlan los cambios de 'SIMULATIONS/GROUP_UPDATES' pueden evitar realizar acciones innecesarias y posponer cualquier cambio hasta la finalización de la actualización grupal.