Comportamientos

Descripción

AFRYCA emplea comportamientos basados en distribuciones de probabilidad estadísticas para simular la actitud de los expertos en aquellos procesos de alcance de consenso que hacen uso de un mecanismo de feedback y solicitan a los expertos que modifiquen sus valoraciones para incrementar el grado de consenso.

Desde la versión 3 de AFRYCA, los comportamientos hacen uso de scripts ejecutados en ASE, por lo que el desarrollador cuenta con libertad para plantear comportamientos de forma abstracta y realizar su modificación en tiempo de ejecución.

Features

La funcionalidad se proporciona desde las siguientes features:

afryca.behavior.feature

Plug-ins para la funcionalidad básica de comportamientos

  • Plug-ins incluidos:
    • afryca.behavior
    • afryca.parametervalueconverterhelper
    • org.apache.commons.io
  • Features incluidas:
    • afryca.ase.feature

afryca.behavior.gui.feature

Plug-ins para la funcionalidad gráfica de comportamientos

  • Plug-ins incluidos:
    • afryca.behavior.gui
    • org.eclipose.wb.swt
  • Features incluidas:
    • afryca.behavior.feature

afryca.behavior.default.feature

Plug-ins que implementan comportamientos

  • Plug-ins incluidos:
    • afryca.behavior.standard
    • afryca.behavior.standard_with_adverse
  • Features incluidas:
    • afryca.behavior.feature

Plug-ins

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

afryca.behavior

Funcionalidad básica de comportamientos

  • Dependencias:
    • afryca.ase
    • afryca.parametervalueconverterhelper
    • org.apache.commons.io
    • org.eclipse.core.runtime
    • 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.behavior.gui

Funcionalidad gráfica de comportamientos

  • Dependencias:
    • afryca.behavior
    • afryca.birt
    • 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
    • org.eclipse.birt.chart.engine

afryca.behavior.standard

Comportamiento estándar

  • Dependencias:
    • afryca.behavior
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • afryca.ase

afryca.behavior.standard_with_adverse

Comportamiento estándar con adverso

  • Dependencias:
    • afryca.behavior
    • org.eclipse.core.runtime
    • org.eclipse.e4.core.di
    • afryca.ase

Estructura

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

afryca.behavior

  • afryca.behavior
    • Attitude: Modelo para la representación de la actitud de un comportamiento.
    • Behavior: Interfaz a implementar por los comportamientos.
    • Parameter: Modelo para representar un parámetro de actitud.
  • afryca.behavior.command
    • OpenAttitude: Controlador para abrir una actitud.
    • SaveAttitude: Controlador para almacenar una actitud.
  • afryca.behavior.command.parameter
    • AttitudeParameterValueConverter: Conversor de parámetro Attitude.
    • AttitudeParameterValueConverterHelper: Asistente para el conversor de parámetro Attitude.
    • ParameterParameterValueConverter: Conversor de parámetro Parameter.
    • ParameterParameterValueConverterHelper: Asistente para el conversor de parámetro Parameter.
  • afryca.behavior.definition
    • BehaviorRegistry: Registro del punto de extensión de comportamientos.
    • EElements: Enumerado de los elementos del registro del punto de extensión de comportamientos.
    • EParameterElements: Enumerado de los elementos del registro de un parámetro.
    • EParameterTypes: Enumerado de los diferentes tipos de parámetros,
    • ParameterRegistry: Registro de un parámetro.
  • afryca.behavior.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.behavior.provider
    • IAttitudeProvider: Interfaz del proveedor de actitudes.
    • IBehaviorProvider: Interfaz del proveedor de comportamientos.
  • afryca.behavior.provider.internal
    • AttitudeDefaultProvider: Implementación por defecto del proveedor de actitudes.
    • AttitudeProviderContextFunction: Función contextual para la inyección de un proveedor de actitudes. Configurada en OSGI-INF/attittude_provider_context_function.xml,
    • BehaviorDefaultProvider: Implementación por defecto del proveedor de comportamientos.
    • BehaviorProviderContextFunction: Función contextual para la inyección de un proveedor de comportamientos. Configurada en OSGI-INF/behavior_provider_context_function.xml,
  • afryca.behavior.service
    • IBehaviorService: Interfaz del servicio Behavior.
  • afryca.behavior.service.events
    • IBehaviorServiceEvents: Definición de eventos lanzados por el servicio Behavior a través del broker de E4.
  • afryca.behavior.service.provider
    • BehaviorServiceContextFunction: Función contextual empleada para instanciar el servicio Behavior cuando se solicita su inyección.
    • BehaviorServiceProvider: Proveedor del servicio Behavior.

afryca.behavior.gui

  • afryca.behavior.gui.columnlabelprovider
    • BehaviorColumnLabelProvider
  • afryca.behavior.gui.composite
    • AttitudePanel: Composite para la edición de una actitud.
    • BehaviorSimulationPanel: Composite para la visualización de la simulación de un comportamiento.
    • BehaviorsPanel: Composite para la selección del comportamiento.
  • afryca.behavior.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.behavior.gui.icons: Rutas localizadas a los iconos usados en diferentes idiomas.
  • afryca.behavior.gui.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.behavior.gui.part
    • AttitudePart: Parte para la edición de la actitud.
    • BehaviorsPart: Para para la selección de un comportamiento y la visualización de una simulación usando el mismo.
  • afryca.behavior.gui.preferences
    • PreferenceConstants: Constantes usadas para las preferencias establecidas en el archivo 'preferences.ini'.

afryca.behavior.standard

  • afryca.behavior
    • Standard: Comportamiento estándar

afryca.behavior.standard_with_adverse

  • afryca.behavior
    • StandardWithAdverse: Comportamiento estándar con adverso

Puntos de extensión

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

afryca.behavior

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

  • Definición:
    • Extensión
      • (1 - *) Behavior.
    • Behavior (asociado a afryca.behavior.definition.BehaviorRegistry)
      • id: Identificador.
      • descripcion: Descripción del comportamiento. Puede ser localizado.
      • name: Nombre a mostrar en la interfaz. Puede ser localizado.
      • Behavior: Clase que implementa el comportamiento y extiende afryca.behavior.Behavior.
      • (0 - *) Parameter.
    • Parameter (asociado a afryca.behavior.definicion.ParameterRegistry)
      • Id: Identificador.
      • type: Tipo del parámetro.
      • description: Descripción del parámetro. Puede ser localizado.
      • default_value: Valor por defecto del parámetro.
      • lower_limit: Límite inferior.
      • upper_limit: Límite superior.

Servicio

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

  • Interfaz del servicio:
    • getIds() : String[] // Identificadores de los registros de los comportamientos.
    • getRegistry(String) : BehaviorRegistry // Obtención del registro de comportamiento con el identificador indicado.
    • setSelection(String) // Selección del registro de comportamiento con el identificador indicado.
    • getSelection() : String // Obtención del identificador del registro de comportamiento seleccionado.
    • getBehavior(String) : Behavior // Devuelve el comportamiento con el identificador indicado.
    • getAttitudes() : Map<String, Attitude> // Mapa de actitudes en el espacio de trabajo.
    • setAttitude(Attitude) // Establece la actitud del comportamiento seleccionado.
    • getAttitude() : Attitude // Actitud del comportamiento seleccionado.
    • getNChanges(String, int) : double[] // Devuelve un numero de cambios generado usando el comportamiento con el identificador indicado y su actitud por defecto.
    • getNChanges(int) : double[] // Devuelve un numero de cambios generado usando el comportamiento seleccionado y su actitud actual.

Broker

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

  • Topics:
    • BEHAVIORS // Raíz.
    • BEHAVIORS/GROUP_UPDATES // Cambio de estado de actualización grupal.
    • BEHAVIORS/BEHAVIOR/SELECTION // Cambio de comportamiento seleccionado.
    • BEHAVIORS/BEHAVIOR/ATTITUDE // Cambio de actitud seleccionada.
    • BEHAVIORS/UPDATED // Actualización de comportamientos y actitudes disponibles.

Comandos

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

afryca.behavior.command.save_attitude

Definido en el plug-in afryca.behavior e implementado por la clase afryca.behavior.command.SaveAttitude. Almacena una actitud.

afryca.behavior.command.open_attitude

Definido en el plug-in afryca.behavior e implementado por la clase afryca.behavior.command.OpenAttitude. Abre una actitud.

Partes

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

afryca.behavior.behaviors.part

Definida en el plug-in afryca.behavior.gui e implementada por la clase afryca.behavior.gui.part.BehaviorsPart. Muestra un listado de los diferentes comportamientos existente y permite seleccionar el deseado. También proporciona un conjunto de gráficas destinadas a visualizar una simulación del comportamiento.

afryca.behavior.attitude.part

Definida en el plug-in afryca.behavior.gui e implementada por la clase afryca.behavior.gui.part.AttitudePart. Define un editor para la actitud seleccionada.

Preferencias

Los plug-ins emplean las siguientes preferencias:

behavior.simulation.chart.functions

Usada por el plug-in afryca.behavior.gui. Permite establecer el nombre de las funciones usadas para la generación de los gráficos BIRT mostrados en afryca.behavior.gui.composite.BehaviorSimulationPanel.

Notas finales

  1. Las actitudes devueltas por el servicio de Behavior son inyectadas por el servicio de workspace, siendo este servicio el que gestiona las actitudes disponibles en cada momento.
  2. Las funciones Attitude.parseAttitude() y Attitude.toString() son empleadas para el almacenamiento interno de las actitudes. Ambas hacen uso del conversor afryca.behavior.command.parameter.converter.AttitudeParameterValueConverter.
  3. Si se prevé que un único cambio provocará múltiples notificaciones por el broker se notifica una notificación grupal con el topic 'BEHAVIORS/GROUP_UPDATES'. Por ejemplo, el cambio de selección de comportamiento puede hacer necesario cambiar la actitud seleccionada, si los subscriptores controlan los cambios de 'BEHAVIORS/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 actitud obligan a refrescar los gráficos de simulaciones y, en caso de que se haya seleccionado un modelo de consenso que hace uso de comportamiento, a comprobar si se cumplen las condiciones para realizar una simulación. Al ser ambas tareas computacionalmente costosas, los cambios en afryca.behavior.gui.part.AttitudePart 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. Desde AFRYCA 3, afryca.behavior.Behavior incorpora una caché experimental. Usualmente, los modelos de consenso con comportamientos solicitan múltiples veces cambios al comportamiento, los cuales son generados haciendo uso de distribuciones de probabilidad. El uso de una caché resulta de gran utilidad si se considera que la instanciación de una distribución de probabilidad es una tarea computacionalmente muy costosa y que en la generación de comportamientos habitualmente se usan las mismas distribuciones de probabilidad con los mismos parámetros. Por ello, cada vez que se generan cambios según unos parámetros de actitud específica, en primer lugar AFRYCA intenta extraer los mismos de la caché y en caso de que no disponga de valores suficientes para los parámetros indicados realizará la generación de un gran numero de valores (1000 actualmente) y los almacenará en la caché. Como es lógico, cada valor consumido de la caché es desechado de la misma para garantizar la validez estadística de los mismos.