Problemas de toma de decisión en grupo

Descripción

Los problemas de toma de decisión en grupo, los cuales se denominarán en adelante por el acrónimo de su traducción en inglés, GDMP (Group Decision Making Problem), son el principal elemento del modelo de AFRYCA. Un GDMP define los expertos que participan en el problema, el conjunto de alternativas que se valorarán y las preferencias de los expertos.

En las versiones publicadas hasta AFRYCA 3, los GDMP emplean FPR como estructuras de preferencias, por lo que su diseño y estructura están fuertemente relacionados.

Features

La funcionalidad se proporciona desde las siguientes features:

afryca.gdmp.feature

Plug-ins para la funcionalidad básica de GDMPs.

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

afryca.gdmp.gui.feature

Plug-ins para la funcionalidad gráfica de GDMPs.

  • Plug-ins incluidos:
    • afryca.dominance
    • afryca.gdmp.gui
  • Features incluidas:
    • afryca.ase.gui.feature
    • afryca.fpr.gui.feature
    • afryca.gdmp.feature

Plug-ins

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

afryca.gdmp

Funcionalidad básica de GDMPs

  • Dependencias:
    • afryca.fpr
    • 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.core.commands
    • org.eclipse.e4.ui.workbench
    • org.eclipse.e4.ui.model.workbench
    • org.eclipse.ui

afryca.gdmp.gui

Funcionalidad gráfica de GDMPs

  • Dependencias:
    • afryca.gdmp
    • afryca.fpr.gui
    • afryca.ase.gui
    • afryca.birt
    • afryca.dominance
    • afryca.workspace.service.events
    • org.eclipse.wb.swt
    • org.eclipse.core.runtime
    • org.eclipse.core.commands
    • 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.di
    • org.eclipse.e4.ui.workbench
    • org.eclipse.e4.ui.model.workbench
    • org.eclipse.e4.ui.services
    • org.eclipse.jface
    • org.eclipse.jface.databinding
    • org.eclipse.core.databinding
    • org.eclipse.core.databinding.property
    • org.eclipse.core.databinding.beans

Estructura

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

afryca.gdmp

  • afryca.gdmp
    • GDMP: Modelo para la representación de GDMP.
  • afryca.gdmp.command
    • AddAlternative: Controlador para añadir una alternativa.
    • AddElement: Controlador abstracto para añadir una alternativa o un experto.
    • AddExpert: Controlador para añadir un experto.
    • BackwardAlternative: Controlador para retroceder una alternativa.
    • BackwardElement: Controlador abstracto para retroceder una alternativa o un experto.
    • CompleteFPR: Controlador para completar una FPR.
    • DeselectAlternative: Controlador para deseleccionar una alternativa.
    • DeselectElement: Controlador abstracto para deseleccionar una alternativa o un experto.
    • DeselectExpert: Controlador para deseleccionar un experto.
    • ForwardAlternative: Controlador para avanzar una alternativa.
    • ForwardElement: Controlador abstracto para avanzar una alternativa o un experto.
    • ForwardExpert: Controlador para avanzar un experto.
    • GenerateRandomFPR: Controlador para generar una FPR aleatoria consistente.
    • OpenGDMP: Controlador para abrir un GDMP.
    • RemoveAlternative: Controlador para eliminar una alternativa.
    • RemoveElement: Controlador abstracto para eliminar una alternativa o un experto.
    • RemoveExpert: Controlador para eliminar un experto.
    • SaveGDMP: Controlador para almacenar un GDMP.
  • afryca.gdmp.command.parameter
    • GDMPParameterValueConverter: Conversor de parámetro GDMP.
    • GDMPParameterValueConverterHelper: Asistente para el conversor de parámetro GDMP.
  • afryca.gdmp.l10n: Mensajes de localización en diferentes indiomas.
  • afryca.gdmp.service
    • IGDMPService: Interfaz del servicio GDMP.
  • afryca.gdmp.service.events
    • IGDMPServiceEvents: Definición de eventos lanzados por el servicio GDMP a través del broker de E4.
  • afryca.gdmp.service.provider
    • GDMPServiceContextFunction: Función contextual empleada para instanciar el servicio GDMP cuando se solicita su inyección.
    • GDMPServiceProvider: Proveedor del servicio GDMP.

afryca.gdmp.gui

  • afryca.gdmp.gui.addon
    • PreferencesAddon: Add-on para la gestión de las preferencias. Subscrito a cambios en el espacio de trabajo para mantener la consistencia.
    • ToolItemVisibilityAddon: Add-on para la gestión de la visibilidad de los toolitems en función de la perspectiva seleccionada.
  • afryca.gdmp.gui.command
    • AddAlternative: Controlador para crear una alternativa solicitando su nombre.
    • AddElement: Controlador abstracto para crear una alternativa o un experto solicitando su nombre.
    • AddExpert: Controlador para crear un experto solicitando su nombre.
    • CreateGDMPWizard: Controlador para la ejecución del asistente de creación de GDMP.
    • ModifyGDMPPreferences: Controlador para modificar las preferencias de GDMP.
    • NewGDMP: Controlador para la creación de un nuevo GDMP.
    • OpenGDMP: Controlador para la apertura de un GDMP solicitando su ruta.
    • SaveAllGDMP: Controlador para el almacenamiento de todos los GDMP modificados.
    • SaveGDMP: Controlador para almacenar un GDMP.
  • afryca.gdmp.gui.composite
    • AlternativesRankingComposite: Composite para la visualización de un ranking de alternativas.
    • AlternativesTableViewer: Composite para la visualización de una tabla de alternativas.
    • CommansPanelComposite: Composite para la visualización de un panel de comandos.
    • 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.
    • PreferencesComposite: Composite para la visualización de una relación de preferencias.
    • PreferencesPanelComposite: Composite para la visualización de una relación de preferencias y un panel de comandos asociado.
  • afryca.gdmp.gui.dialog
    • GDMPPreferencesDialog: Diálogo para la modificación de las preferencias de GDMP.
    • OpenGDMPDialog: Diálogo para la apertura de un GDMP.
  • afryca.gdmp.gui.l10n: Mensajes de localización en diferentes idiomas.
  • afryca.gdmp.gui.manager
    • GDMPSelectionEditorManager: Manager para la visualización del GDMP seleccionado en el editor de GDMPs.
  • afryca.gdmp.gui.part
    • GDMPPart: Parte para la edición de GDMPs
    • LogoPart: Parte que muestra el logo de AFRYCA cuando no se está editando un GDMP.
  • afryca.gdmp.gui.preferences
    • PreferenceConstants: Constantes usadas para las preferencias establecidas en el archivo 'preferences.ini'.
  • afryca.gdmp.gui.wizard
    • CreateWizard: Asistente para la creación de un GDMP.
  • afryca.gdmp.gui.wizard.page
    • AlternativesWizardPage: Página de asistente para la definición de alternativas de un GDMP.
    • ElementWizardPage: Página de asistente abstracta para la definición de las alternativas o expertos de un GDMP.
    • ExpertsWizardPage: Página de asistente para la definición de expertos de un GDMP.

Add-ons

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

afrydca.gdmp.gui.addon.ToolItemVisibilityAddon

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.addon.ToolItemVisibilityAddon. Registra los cambios de perspectiva para mostrar únicamente los comandos asociados a GDMP en la toolbar de la aplicación cuando estos pueden ser de utilidad para el usuario.

afryca.gdmp.gui.addon.PreferencesAddon

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.addon.PreferencesAddon. Garantiza la consistencia de las preferencias ofrecidas por afryca.gdmp. 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.gdmp define un servicio declarativo OSGi para los GDMP. El servicio se define en el archivo OSGI-INF/gdmp_service_context_function.xml y hace uso de una función contextual eclipse, la cual realiza una instanciación de la clase afryca.gdmp.service.provider.GDMPServiceContextFunction cuando se solicita la inyección del servicio cuya interfaz define afryca.gdmp.service.IGDMPService.

  • Interfaz del servicio:
    • getProblems() : Map<String, GDMP> // Mapa de GDMPs en el espacio de trabajo.
    • setSelection(GDMP) // Establecimiento del GDMP seleccionado.
    • getSelection() : GDMP // Obtención del GDMP seleccionado.
    • setSelectedExpert(String) // Establecimiento del experto seleccionado.
    • getSelectedExpert() : String // Obtención del experto seleccionado.
    • addExpert(String) : boolean // Adición de un experto.
    • removeExpert(String) : boolean // Eliminación de un experto.
    • backwardExpert(String) : boolean // Retroceso de un experto.
    • forwardExpert(String) : boolean // Avance de un experto.
    • setSelectedAlternative(String) // Establecimiento de la alternativa seleccionada.
    • getSelectedAlternative() : String // Obtención de la alternativa seleccionada.
    • addAlternative(String) : boolean // Adición de una alternativa.
    • removeAlternative(String) : boolean // Eliminación de una alternativa.
    • backwardAlternative(String) : boolean // Retroceso de una alternativa.
    • forwardAlternative(String) : boolean // Avance de una alternativa.
    • save(GDMP) : boolean // Almacenamiento de un GDMP.
    • saveAll(List<GDMP>) : boolean // Almacenamiento de un listado de GDMPs.
    • notifyModifyExpertPreferences(GDMP, String) : boolean // Notificación de modificación de preferencias de experto de GDMP.
    • generateRandomFPR(GDMP, String) : boolean // Generación de FPR aleatoria para experto de GDMP.
    • competeFPR(GDMP, String): boolean // Completado de FPR de experto de GDMP.

Broker

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

  • Topics:
    • GDMP // Raíz.
    • GDMP/GROUP_UPDATES // Cambio de estado de actualización grupal.
    • GDMP/SELECTION // Cambio de GDMP seleccionado.
    • GDMP/SELECTION/EXPERT // Cambio de experto seleccionado.
    • GDMP/SELECTION/ALTERNATIVE // Cambio de alternativa seleccionada.
    • GDMP/UPDATED // Modificación del GDMP.
    • GDMP/UPDATED/EXPERTS // Modificación de los expertos del GDMP.
    • GDMP/UPDATED/ALTERNATIVES // Modificación de las alternativas del GDMP.
    • GDMP/UDPATED/PREFERENCES // Modificación de las preferencias del GDMP.

Comandos

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

afryca.gdmp.command.save_gdmp

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.SaveGDMP. Almacena físicamente un GDMP.

afryca.gdmp.command.open_gdmp

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.OpenGDMP. Abre físicamente un GDMP.

afryca.gdmp.command.remove_alternative

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.RemoveAlternative. Elimina una alternativa del GDMP seleccionado.

afryca.gdmp.command.remove_expert

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.RemoveExpert. Elimina un experto del GDMP seleccionado.

afryca.gdmp.command.add_alternative

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.AddAlternative. Añade una alternativa al GDMP seleccionado.

afryca.gdmp.command.add_expert

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.AddExpert. Añade un experto al GDMP seleccionado.

afryca.gdmp.command.deselect_alternative

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.DeselectAlternative. Deselecciona la alternativa seleccionada.

afryca.gdmp.command.deselect_expert

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.DeselectExpert. Deselecciona el experto seleccionado.

afryca.gdmp.command.backward_alternative

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.BackwardAlternative. Retrocede la alternativa seleccionada.

afryca.gdmp.command.backward_expert

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.BackwardExpert. Retrocede el experto seleccionado.

afryca.gdmp.command.forward_alternative

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.ForwardAlternative. Avanza la alternativa seleccionada.

afryca.gdmp.command.forward_expert

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.ForwardExpert. Avanza el experto seleccionado.

afryca.gdmp.command.generate_random_fpr

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.GenerateRandomFPR. Genera una FPR aleatoria consistente para el experto seleccionado.

afryca.gdmp.command.complete_fpr

Definido en el plug-in afryca.gdmp e implementado por la clase afryca.gdmp.command.CompleteFPR. Completa los valores perdidos de la FPR del experto seleccionado.

afryca.gdmp.gui.command.new_gdmp

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.command.NewGDMP. Almacena un GDMP solicitando su nombre.

afryca.gdmp.gui.command.open_gdmp

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.command.OpenGDMP. Abre un GDMP solicitando su ruta.

afryca.gdmp.gui.command.create_gdmp_wizard

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.command.CreateGDMPWizard. Lanza el asistente para la creación de un nuevo GDMP.

afryca.gdmp.gui.command.add_expert

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.command.AddExpert. Añade un experto al GDMP seleccionado solicitando su nombre.

afryca.gdmp.gui.command.add_alternative

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.command.AddAlternative. Añade una alternativa al GDMP seleccionado solicitando su nombre.

afryca.gdmp.gui.command.save_gdmp

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.command.SaveGDMP. Almacena un GDMP.

afryca.gdmp.gui.command.save_all_gdmp

Definido en el plug-in afryca.gdmp.gui e implementado por la clase afryca.gdmp.gui.command.SaveAllGDMP. Almacena todos los GDMPs con modificaciones.

afryca.gdmp.gui.command.modify_gdmp_preferences

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

Partes

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

afryca.gdmp.partdescriptor

Definida en el plug-in afryca.gdmp.gui e implementada por la clase afryca.gdmp.gui.part.GDMPPart. Define un editor para el GDMP seleccionado en el servicio de GDMP.

afryca.gdmp.logo.partdescriptor

Definida en el plug-in afryca.gdmp.gui e implementada por la clase afryca.gdmp.gui.part.GDMPPart. Muestra el logo de la aplicación. El gestor afryca.gdmp.gui.manager.GDMPSelectionEditorManager la muestra cuando no se ha seleccionado ningún GDMP. 

Preferencias

Los plug-ins emplean las siguientes preferencias.

module.bindings

Usada por el plug-in afryca.gdmp.gui. Permite establecer los enlaces a módulos a mostrar en el editor de GDMPs.

gdmp.chart.functions

Usada por el plug-in afryca.gdmp.gui. Permite establecer los gráficos BIRT a mostrar en el editor de GDMPs.

Notas finales

  1. El número máximo de elementos de un GDMP está limitado a 10 por motivos de visualización. Para modificar el límite cambiar el valor de afryca.gdmp.GDMP.UPPER_LIMIT.
  2. Los GDMPs devueltos por el servicio de GDMP son inyectados por el servicio de workspace, siendo este servicio el que gestiona los GDMPs disponibles en cada momento.
  3. Las funciones GDMP.parse() y GDMP.toString() son empleadas para el almacenamiento interno de los GDMP. Ambas hacen uso del conversor afryca.gdmp.command.parameter.coverter.GDMPParameterValueConverter.
  4. La mayor parte de los comandos definidos en afryca.gdmp invocan al servicio de GDMP para realizar la acción correspondiente previamente a comprobar que esta puede ser realizada.
  5. La mayor parte de los comandos definidos en afryca.gdmp.gui tienen asociado un comando en afryca.gdmp que es invocado tras realizar una solicitud de información al usuario.
  6. Si existe multiplicidad de comandos para realizar una acción, la cadena de invocación habitual será:
    1. El comando definido en afryca.gdmp.gui solicita un dato al usuario e invoca al comando definido en afryca.gdmp pasando este valor como argumento.
    2. El comando definido en afryca.gdmp valida los argumentos e invoca a la función correspondiente en el servicio.
    3. El servicio realiza la acción si es posible y en tal caso notifica por el broker los cambios realizados.
  7. Si se prevé que un único cambio provocará múltiples notificaciones por el broker se notifica una notificación grupal con el topic 'GDMP/GROUP_UPDATES'. Por ejemplo, el cambio de selección de GDMP puede hacer necesario cambio el experto y alternativa seleccionados, si los subscriptores controlan los cambios de 'GDMP/GROUP_UPDATES' pueden evitar realizar acciones innecesarias y posponer cualquier cambio hasta la finalización de la actualización grupal.