Modelos de alcance de consenso

Descripción

Los modelos de alcance de consenso son el pilar fundamental para la ejecución de las simulaciones. AFRYCA incorpora diversos mecanismos destinados a simplificar el desarrollo de modelos de alcance de consenso, incluyendo puntos de extensión para su definición, asistentes visuales para su configuración e integrando desde AFRYCA 3, toda la versatilidad de ASE y la potencia del contenedor de inyección de dependencias de E4.

Gracias a ello, las nuevas versiones de AFRYCA permiten plantear el desarrollo de modelos de alcance de consenso abstractos que pueden ser modificados en tiempo de ejecución, lo cual abre la puerta a la propuesta de modelos siguiendo nuevos enfoques.

Desde sus orígenes, AFRYCA ofrece múltiples modelos de alcance de consenso divididos en dos tipos, con feedback, los cuales hacen uso de los comportamientos, y sin feedback.

Features

La funcionalidad se proporciona desde las siguientes features:

afryca.consensusmodel.feature

Plug-ins para la funcionalidad básica de modelos de consenso

  • Plug-ins incluidos:
    • afryca.cm
    • afryca.consensusmodel
    • afryca.dominance
    • afryca.gdmp
  • Features incluidas:
    • afryca.behavior.feature

afryca.consensusmodel.gui.feature

Plug-ins para la funcionalidad gráfica de modelos de consenso

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

afryca.consensusmodel.default.feature

Plug-ins que implementan modelos de consenso

  • Plug-ins incluidos:
    • afryca.consensusmodel.chiclana2008
    • afryca.consensusmodel.herreraviedma2002
    • afryca.consensusmodel.kacprzyk2010
    • afryca.consensusmodel.palomares2011
    • afryca.consensusmodel.palomares2014
    • afryca.consensusmodel.quesada2015
    • afryca.consensusmodel.wu2012
    • afryca.consensusmodel.xu2013
  • Features incluidas:
    • afryca.consensusmodel.feature

Plug-ins

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

afryca.consensusmodel

Funcionalidad básica de modelos de consenso

  • Dependencias:
    • afryca.fpr
    • afryca.gdmp
    • afryca.dominance
    • afryca.cm
    • afryca.behavior
    • afryca.parametervalueconverterhelper
    • org.apache.commons.io
    • org.eclipse.core.runtime
    • org.eclipse.core.commands
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.services
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.ui.workbench
    • org.eclipse.e4.ui.model.workbench
    • org.eclipse.ui
    • afryca.ase

afryca.consensusmodel.gui

Funcionalidad gráfica de comportamientos

  • Dependencias:
    • afryca.consensusmodel
    • org.eclipse.wb.swt
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • org.eclipse.e4.core.services
    • org.eclipse.e4.core.contexts
    • org.eclipse.e4.ui.di
    • org.eclipse.e4.ui.services
    • org.eclipse.e4.ui.model.workbench
    • org.eclipse.jface

afryca.consensusmodel.chiclana2008

Modelo de consenso Chiclana2008

  • Dependencias:
    • afryca.consensusmodel

afryca.consensusmodel.herreraviedma2002

Modelo de consenso HerreraViedma2002

  • Dependencias:
    • afryca.consensusmodel

afryca.consensusmodel.kacprzyk2010

Modelo de consenso Kacprzyk2010

  • Dependencias:
    • afryca.consensusmodel

afryca.consensusmodel.palomares2011

Modelo de consenso Palomares2011

  • Dependencias:
    • afryca.consensusmodel

afryca.consensusmodel.palomares2014

Modelo de consenso Palomares2014

  • Dependencias:
    • afryca.consensusmodel

afryca.consensusmodel.quesada2015

Modelo de consenso Quesada2015

  • Dependencias:
    • afryca.consensusmodel

afryca.consensusmodel.wu2012

Modelo de consenso Wu2012

  • Dependencias:
    • afryca.consensusmodel

afryca.consensusmodel.xu2013

Modelo de consenso Xu2013

  • Dependencias:
    • afryca.consensusmodel

Estructura

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

afryca.consensusmodel

  • afryca.consensusmodel
    • Advice: Modelo para la representación de una recomendación a un experto.
    • Configuration: Modelo para la representación de la configuración de un comportamiento.
    • ConsensusEngine: Entorno con múltiples funciones de utilidad para modelos de consenso.
    • ConsensusModel: Interfaz a implementar por los modelos de consenso.
    • EChangeType: Enumerado para representar los posibles tipos de recomendaciones.
    • Variables: Modelo para representar las variables de un modelo de consenso.
  • afryca.consensusmodel.command
    • OpenConfiguration: Controlador para abrir una configuración.
    • SaveConfiguration: Controlador para almacenar una configuración..
  • afryca.consensusmodel.command.parameter
    • ConfigurationParameterValueConverter: Conversor de parámetro Configuration.
    • ConfigurationParameterValueConverterHelper: Asistente para el conversor de parámetro Configuration.
    • ValueParameterValueConverter: Conversor de parámetro para valores autodefinidos, donde para cada valor se almacena su clase y su valor.
    • ValueParameterValueConverterHelper: Asistente para el conversor de parámetros autodefinidos.
  • afryca.consensusmodel.definition
    • ConsensusModelRegistry: Registro del punto de extensión de modelos de consenso.
    • EElements: Enumerado de los elementos del registro del punto de extensión de modelos de consenso.
    • EResultElements: Enumerado con los diferentes elementos que devolverá la simulación de un modelo de consenso.
    • ERoundResult: Enumerado con los diferentes elementos que se obtendrán al ejecutar una ronda.
  • afryca.consensusmodel.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.consensusmodel.provider
    • IConfigurationProvider: Interfaz del proveedor de configuración.
    • IConsensusModelProvider: Interfaz del proveedor de modelo de consenso.
    • IVariablesProvider: Interfaz del proveedor de variables.
  • afryca.consensusmodel.provider.internal
    • ConfigurationDefaultProvider: Implementación por defecto del proveedor de configuración.
    • ConfigurationProviderContextFunction: Función contextual para la inyección de un proveedor de configuración. Configurada en OSGI-INF/configuration_provider_context_function.xml.
    • ConsensusModelDefaultProvider: Implementación por defecto del proveedor de modelo de consenso.
    • ConsensusModelProviderContextFunction: Función contextual para la inyección de un proveedor de modelo de consenso. Configurada en OSGI-INF/consensus_model_provider_context_function.xml.
    • VariablesDefaultProvider: Implementación por defecto del proveedor de variables.
    • VariablesProviderContextFunction: Función contextual para la inyección de un proveedor de variables. Configurada en OSGI-INF/variables_provider_context_function.xml
  • afryca.consensusmodel.service
    • IConsensusModelService: Interfaz del servicio ConsensusModel.
  • afryca.consensusmodel.service.events
    • IConsensusModelServiceEvents: Definición de eventos lanzados por el servicio ConsensusModel a través del broker de E4..
  • afryca.consensusmodel.service.provider
    • ConsensusModelServiceContextFunction: Función contextual empleada para instanciar el servicio ConsensusModel cuando se solicita su inyección.
    • ConsensusModelServiceProvider: Proveedor del servicio ConsensusModel.
  • afryca.consensusmodel.variable
    • ArrayRelations: Modelo para representar las relaciones de array de una variable.
    • ArrayRestrictions: Modelo para representar las restricciones de array de una variable.
    • Relations: Modelo para representar las relaciones de una variable.
    • Restrictions: Modelo para representar las restricciones de una variable.
    • Variable: Modelo para representar una variable.
  • afryca.consensusmodel.variable.array_relation
    • ArrayRelation: Modelo para representar una relación de array de una variable.
  • afryca.consensusmodel.variable.array_relation.definition
    • ArrayRelationRegistry: Registro de una relación de array.
    • EArrayRelationElements: Enumerado de los elementos del registro de una relación de array.
    • EArrayRelationTypes: Enumerado de los diferentes tipos de relaciones de array.
  • afryca.consensusmodel.variable.array_restriction
    • ArrayRestriction: Modelo para representar una restricción de array de una variable.
  • afryca.consensusmodel.variable.array_restriction.definition
    • ArrayRestrictionRegistry: Registro de una restricción de array.
    • EArrayRestrictionElements: Enumerado de los elementos del registro de una restricción de array.
    • EArrayRestrictionTypes: Enumerado de los diferentes tipos de restricciones de array.
  • afryca.consensusmodel.variable.definition
    • EVariableElements: Enumerado de los elementos del registro de una variable.
    • EVariableTypes: Enumerado de los diferentes tipos de variables.
    • MockVariableConfigurationElement: Simulación de configuración eclipse para su inyección en la creación de variables.
    • VariableRegistry: Registro de una variable.
  • afryca.consensusmodel.variable.relation
    • Relation: Modelo para representar una relación de una variable.
  • afryca.consensusmodel.variable.relation.definition
    • ERelationElements: Enumerado de los elementos del registro de una relación.
    • ERelationTypes: Enumerado de los diferentes tipos de relaciones.
    • RelationRegistry: Registro de una relación.
  • afryca.consensusmodel.variable.restriction
    • Restriction: Modelo para representar una restricción de una variable.
  • afryca.consensusmodel.variable.restriction.definition
    • ERestrictionElements: Enumerado de los elementos del registro de una restricción.
    • ERestrictionTypes: Enumerado de los diferentes tipos de restricciones.
    • RestrictionRegistry: Registro de una restricción.

afryca.consensusmodel.gui

  • afryca.consensusmodel.gui.composite
    • ConsensusModelConfigurationPanel: Composite para la edición de una configuración.
    • ConsensusModelInformationPanel: Composite para la visualización de los metadatos empleados al definir un modelo de consenso.
    • ConsensusModelPanel: Composite para la selección del modelo de consenso.
    • ConsensusModelTableViewer: Composite abstracto para la visualización de modelos de consenso.
    • ConsensusModelWithFeedbackTableViewer: Composite para la visualización de modelos de consensos con feedback.
    • ConsensusModelWithoutFeedbackTableViewer: Composite para la visualización de modelos de consenso sin feedback.
  • afryca.consensusmodel.gui.composite.job
    • CallbackJob: Trabajo eclipse que al entrar en ejecución invoca al método 'call' del objeto 'ICallback' recibido en su constructor.
    • ICallback: Interfaz a implementar por un objeto que desea ser notificado cuando un trabajo 'CallbackJob' entre en ejecución.
  • afryca.consensusmodel.gui.icons: Rutas localizadas a los iconos usados en diferentes idiomas.
  • afryca.consensusmodel.gui.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.consensusmodel.gui.part
    • ConsensusModelConfigurationPart: Para para la edición de una configuración.
    • ConsensusModelPart: Para para la selección de un modelo de consenso y la visualización de los metadatos empleados al definirlo.
  • afryca.consensusmodel.gui.validator
    • ArrayRelationVariableValidator: Validaor de relaciones de array.
    • ArrayRestrictionVariableValidator: Validador de restricciones de array.
    • Validator: Validador abstracto de un elemento de la interfaz asociado a una variable de un modelo de consenso.
    • VariableValidator: Validador de variable.

afryca.consensusmodel.chiclana2008

  • afryca.consensusmodel
    • Chiclana2018: Implementación del modelo.

afryca.consensusmodel.herreraviedma2002

  • afryca.consensusmodel
    • HerreraViedma2002: Implementación del modelo.

afryca.consensusmodel.kacprzyk2010

  • afryca.consensusmodel
    • Kacprzyk2010: Implementación del modelo.

afryca.consensusmodel.palomares2011

  • afryca.consensusmodel
    • Palomares2011: Implementación del modelo.

afryca.consensusmodel.palomares2014

  • afryca.consensusmodel
    • Palomares2014: Implementación del modelo.

afryca.consensusmodel.quesada2015

  • afryca.consensusmodel
    • Quesada2015: Implementación del modelo.

afryca.consensusmodel.wu2012

  • afryca.consensusmodel
    • Wu2012: Implementación del modelo.

​afryca.consensusmodel.xu2013

  • afryca.consensusmodel
    • Xu2013: Implementación del modelo.

Puntos de extensión

Los puntos de extensión ofrecidos por los plug-ins se describen a continuación:

afryca.consensusmodel

El plug-in afryca.consensusmodel define el punto de extensión afryca.consensusmodel con el esquema definido en el archivo schema/afryca.consensusmodel.exsd. El punto de extensión permite crear nuevos modelos de consenso con los que extender la funcionalidad de AFRYCA.

  • Definición:
    • Extensión
      • (1 - *) ConsensusModel.
    • ConsensusModel (asociado a afryca.consensusmodel.definition.ConsensusModelRegistry)
      • id: Identificador.
      • Name: Nombre a mostrar en la interfaz. Puede ser localizado.
      • Information: Información del modelo. Puede ser localizado.
      • MainFeatures: Principales características del modelo. Puede ser localizado.
      • Observations: Observaciones sobre el modelo. Puede ser localizado.
      • ConsensusModel: Clase que implementa el modelo y extiende afryca.consensusmodel.ConsensusModel.
      • WithFeedback: Indicación de si el modelo usa un mecanismo de feedback.
      • (0 - *) Variable.
    • Variable (asociado a afryca.consensusmodel.variable.definicion.VariableRegistry)
      • id: Identificador.
      • description: Descripción de la variable. Puede ser localizado.
      • type: Tipo de la variable.
      • default_value: Valor por defecto.
      • array_default_element_value: Valor por defecto para los elementos si la variable es un array.
      • is_array: Indicación de si la variable es un array.
      • is_internal: Indicación de si la variable es interna.
      • (0 - *) Restriction.
      • (0 - *) Relation.
      • (0 - *) Array_restriction.
      • (0 - *) Array_relation.
    • Restriction (asociado a afryca.consensusmodel.variable.restriction.definition.RestrictionRegistry)
      • type: Tipo de restricción.
      • value: Valor de la restricción.
    • Relation (asociado a afryca.consensusmodel.variable.relation.definition.RelationRegistry)
      • type: Tipo de relación.
      • variable: Variable relacionada.
    • Array_restriction (asociado a afryca.consensusmodel.variable.array_restriction.definition.ArrayRestrictionDefinition)
      • type: Tipo de restricción de array.
      • value: Valor de la restricción.
      • Array_relation (asociado a afryca.consensusmodel.variable.array_relation.definition.ArrayRelationDefinition)
        • type: Tipo de relación de array.
        • variable: Variable relacionada.

    Servicio

    El plug-in afryca.consensusmodel define un servicio declarativo OSGi para los modelos de consenso. El servicio se define en el archivo OSGI-INF/consensus_model_service_context_function.xml y hace uso de una función contextual eclipse, la cual realiza una instanciación de la clase afryca.consensusmodel.service.provider.ConsensusModelServiceContextFunction cuando se solicita la inyección del servicio cuya interfaz define afryca.consensusmodel.service.IConsensusModelService.

    • Interfaz del servicio:
      • getIds() : String[] // Identificadores de los registros de los modelos de consenso.
      • getWithFeedbackConsensusModelsIds() : String[] // Identificadores de los registros de los modelos de consenso con feedback.
      • getWithoutFeedbackConsensusModelsIds() : String[] // Identificadores de los registros de los modelos de consenso sin feedback.
      • getRegistry(String) : ConsensusModelRegistry // Obtención del registro de modelo de consenso con el identificador indicado.
      • setSelection(String) // Selección del registro de modelo de consenso con el identificador indicado.
      • getSelection() : String // Obtención del identificador del registro de modelo de consenso seleccionado.
      • getConfigurations() : Map<String, Configuration> // Mapa de configuraciones en el espacio de trabajo.
      • setConfiguration(Configuration) // Establece la configuración del modelo de consenso seleccionado.
      • getConfiguration() : Configuration // Configuración del modelo de consenso seleccionado.

    Broker

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

    • Topics:
      • CONSENSUS_MODELS // Raíz.
      • CONSENSUS_MODELS/GROUP_UPDATES // Cambio de estado de actualización grupal.
      • CONSENSUS_MODELS/CONSENSUS_MODEL/SELECTION // Cambio de modelo de consenso seleccionado.
      • CONSENSUS_MODELS/CONSENSUS_MODEL/CONFIGURATION // Cambio de configuración seleccionada.
      • CONSENSUS_MODELS/UPDATED // Actualización de comportamientos y actitudes disponibles.

    Comandos

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

    afryca.consensusmodel.command.open_configuration

    Definido en el plug-in afryca.consensusmodel e implementado por la clase afryca.consensusmodel.command.OpenConfiguration. Abre una configuración.

    afryca.consensusmodel.command.save_configuration

    Definido en el plug-in afryca.consensusmodel e implementado por la clase afryca.consensusmodel.command.SaveConfiguration. Almacena una configuración.

    Partes

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

    afryca.consensusmodel.consensusmodels.part

    Definida en el plug-in afryca.consensusmodel.gui e implementada por la clase afryca.consensusmodel.gui.part.ConsensusModelsPart. Muestra un listado de los diferentes modelos de consenso existentes y permite seleccionar el deseado. También proporciona un panel con los metadatos empleados al definir el modelo de consenso en su punto de extensión.

    afryca.consensusmodel.configuration.part

    Definida en el plug-in afryca.consensusmodel.gui e implementada por la clase afryca.consensusmodel.gui.part.ConfigurationPart. Define un editor para la configuración seleccionada.

    Notas finales

    1. Las configuraciones devueltas por el servicio de ConsensusModel son inyectadas por el servicio de workspace, siendo este servicio el que gestiona las configuraciones disponibles en cada momento.
    2. Las funciones Configuration.parseConfiguration() y Configuration.toString() son empleadas para el almacenamiento interno de las configuraciones. Ambas hacen uso del conversor afryca.consensusmodel.command.parameter.converter.ConfigurationParameterValueConverter.
    3. Si se prevé que un único cambio provocará múltiples notificaciones por el broker se notifica una notificación grupal con el topic 'CONSENSUS_MODELS/GROUP_UPDATES'. Por ejemplo, el cambio de selección de modelo de consenso puede hacer necesario cambiar la configuración seleccionada, si los subscriptores controlan los cambios de 'CONSENSUS_MODELS/GROUP_UPDATES' pueden evitar realizar acciones innecesarias y posponer cualquier cambio hasta la finalización de la actualización grupal.
    4. Los cambios realizados en la configuración obligan a comprobar si se cumplen las condiciones para realizar una simulación. Al ser una tarea computacionalmente costosa, los cambios en afryca.consensusmodel.gui.part.ConfigurationPart no son aplicados de forma inmediata, si no que es utilizado un retardo de 500ms. para evitar establecer cambios que son desechados justo a continuación cuando se modifican los controles gráficos de la interfaz.
    5. El uso de afryca.consensusmodel.ConsensusEngine está en desuso. Se recomienda emplear scripts ASE en su lugar.