asm
Class ASMModelSwarm

asm.ASMModelSwarm

public class ASMModelSwarm

Title: ASMModelSwarm

Description: El ASMModelSwarm es donde se lleva a cabo todo el trabajo de peso. Existe una única instancia de esta clase. La instancia de esta clase es asmModelSwarm. Cuando el usuario pone en marcha la simulación, esta instancia recibe los parámetros, probablemente modificados desde las sondas. A continuación crea todos los objetos relevantes (agentes, mundo, especialista y dividendo, principalmente) por medio del método buildObjects(). Una vez creados los agentes, crea una historia ficticia del mercado para que las condiciones iniciales del mundo (por ejemplo la media móvil de 500 periodos) tengan sentido. Por último, hace sonar la campana de apertura del mercado y deja a los agentes que hagan el resto.

El programa de acciones del modelo es bastante complejo, aunque lo fue muchísimo más en las primeras versiones del mercado en ObjectiveC. Lo que se persigue es conseguir crear una historia ficticia inicial de 502 periodos de forma que cuando los agentes empiecen a negociar dispongan de datos que tengan un mínimo de sentido. Para conseguir este objetivo se crean dos programas de acciones. El primero, llamado startupSchedule, será el encargado de crear la historia ficticia inicial. El segundo, llamado periodSchedule, será el que se repita cada periodo normal de simulación.

El primer programa (startupSchedule) se compone únicamente de una acción (doWarmupStep), pero que se repite 502 veces (lo matizaremos más tarde). Esta acción de calentamiento lo único que hace es crear un dividendo (mediante un proceso AR(1)) y fijar el precio como el precio fundamental (dividendo/tasa de interés). Como este proceso se lleva a cabo 502 veces, cuando termina la ejecución del programa startupSchedule (que no se ejecuta más que una única vez, aunque comprenda 502 acciones iguales), resulta que disponemos de una situación bursátil más o menos creíble. Es decir, todos los parámetros tales como medias móviles sobre el precio o sobre el dividendo contienen datos más o menos válidos. De la misma forma, disponemos de la historia de los 500 últimos dividendos, así como de la historia de los 500 últimos precios (fundamentales). Cabe resaltar que durante la ejecución de los 502 "doWarmStep", los agentes no han intervenido para nada. Este periodo de calentamiento no aparecerá ni en las salidas gráficas, ni en los ficheros. No forma parte de la simulación propiamente dicha.

Bien es cierto que lo expuesto en el párrafo anterior con fines didácticos no es del todo exacto. El programa startupSchedule también contiene un grupo de acciones adicional (periodActions) que se ejecutará después de las 502 acciones de calentamiento (doWarmupStep). Este grupo de acciones es el que determina la ejecución normal de la simulación y que luego se repetirá cada periodo de simulación, aunque formando parte del segundo programa.

En definitiva, podemos resumir diciendo que el primer programa (startupSchedule) se ejecuta una sola vez antes de nada en la simulación (en t=0). Este programa se compone de 502 acciones iguales (doWarmupStep) y un grupo de acciones (periodActions). Las primeras 502 acciones de calentamiento crean la historia ficticia inicial del mercado, mientras que la ejecución del grupo de acciones periodActions se encarga de que se lleve a cabo el primer intercambio bursátil de la simulación. Este programa, una vez ejecutado, desaparece y deja paso al programa que gestiona la ejecución normal de la simulación: el periodSchedule.

El segundo programa (periodSchedule) es el que determina el curso normal de la simulación. Se repite cada vez que avanza el reloj de la simulación (al contrario que el primer programa: startupSchedule) y comprende un único grupo de acciones, el ya conocido periodActions. Este grupo de acciones regula la ejecución normal de la simulación.

Copyright:

Depto. de Organización y Gestión de Empresas. Universidad de Valladolid

Version:
1.0
Author:
José Manuel Galán & Luis R. Izquierdo

Field Summary
 swarm.activity.FActionForEach actionForEach
          Utilizado para crear acciones para cada uno de los agentes.
 java.util.LinkedList agentList
          La lista enlazada de Java que contiene a todos los agentes.
 ASMModelParams asmModelParams
          Objeto instancia de ASMModelParams que contiene los parámetros del modelo.
 BFParams bfParams
          Objeto instancia de BFParams que contiene los parámetros de los bfAgents.
 Dividend dividendProcess
          El objeto instancia de la clase Dividend que genera el dividendo mediante un proceso AR(1).
(package private)  int modelTime
          Entero que representa el tiempo actual en la simulación
 Output output
          Objeto creado en ASMObserverSwarm que gestiona la escritura en ficheros de los parámetros y de los resultados de la simulación.
 swarm.activity.ActionGroup periodActions
          El grupo de acciones que se ejecutará secuencialmente en cada periodo de simulación.
 swarm.activity.Schedule periodSchedule
          Programa que contiene únicamente al grupo de acciones periodActions.
 Specialist specialist
          El especialista o market-maker, que vacia el mercado.
 swarm.activity.Schedule startupSchedule
          Este programa se ejecuta una sola vez antes de nada en la simulación (en t=0).
 World world
          El mundo.
 
Constructor Summary
(package private) ASMModelSwarm(swarm.defobj.Zone aZone)
          Constructor de la clase.
 
Method Summary
 swarm.activity.Activity activateIn(swarm.objectbase.Swarm swarmContext)
          En este método se activan los programas del asmModelSwarm.
 java.lang.Object buildActions()
          Crea las acciones.
 java.lang.Object buildObjects()
          Construye e inicializa los objetos principales de la simulación: el dividendo, el mundo, el especialista y los agentes.
 java.lang.Object doWarmupStep()
          Este método se ejecuta 502 veces en tiempo de simulación t=0 con el objetivo de crear una historia bursátil ficticia inicial.
 void drop()
          Este mensaje nos permite avisar a los distintos objetos de que la simulación ha terminado.
 java.util.LinkedList getAgentList()
          Devuelve la lista enlazada de agentes
 double getInitialCash()
          Devuelve la posesión inicial de efectivo de los bfagents, variable instancia de asmModelParams
 int getModelTime()
          Devuelve el entero que representa el tiempo actual en la simulación.
 int getNumBFagents()
          Devuelve el número de bfagents, variable instancia de asmModelParams
 Output getOutput()
          Devuelve una referencia al objeto output.
 Specialist getSpecialist()
          Devuelve una referencia al market-maker (objeto specialist).
 World getWorld()
          Devuelve una referencia al mundo (objeto world), donde se registra la situación actual y pasada del mercado.
 java.lang.Object periodStepDividend()
          Dice al objeto dividendProcess que genere un nuevo dividendo, se lo envía al mundo e incrementa el tiempo de simulación en 1.
 java.lang.Object periodStepPrice()
          En primer lugar le dice al market-maker que fije el precio de mercado.
 java.lang.Object setBatchRandomSeed(int newSeed)
          El valor de la semilla (randomSeed) para generar números aleatorios permanece constante a no ser que se modifique a través de este método.
 java.lang.Object setOutputObject(Output obj)
          Le indicamos dónde encontrar el objeto que gestiona la escritura en ficheros de los parámetros y de los resultados de la simulación.
 java.lang.Object setParamsModel$BF(ASMModelParams modelParams, BFParams bfp)
          Cuando creamos el asmModelSwarm, necesitamos comunicarle dónde encontrar los parámetros para que cree los agentes y demás objetos conforme a los parámetros introducidos por el usuario.
 java.lang.Object writeParams()
          Este método ordena al objeto Output crear un fichero con los parámetros de la simulación.
 

Field Detail

modelTime

int modelTime
Entero que representa el tiempo actual en la simulación

periodActions

public swarm.activity.ActionGroup periodActions
El grupo de acciones que se ejecutará secuencialmente en cada periodo de simulación. Se compone de 7 acciones diferentes, entre las que se encuentran la generación del dividendo, la determinación del precio de mercado y la actualización del mundo, entre otras.

periodSchedule

public swarm.activity.Schedule periodSchedule
Programa que contiene únicamente al grupo de acciones periodActions. Es el programa que determina el curso normal de la simulación. Se repite cada vez que avanza el reloj de la simulación.

startupSchedule

public swarm.activity.Schedule startupSchedule
Este programa se ejecuta una sola vez antes de nada en la simulación (en t=0). Se compone de 502 acciones iguales (doWarmupStep) y el grupo de acciones periodActions.

agentList

public java.util.LinkedList agentList
La lista enlazada de Java que contiene a todos los agentes.

specialist

public Specialist specialist
El especialista o market-maker, que vacia el mercado.

dividendProcess

public Dividend dividendProcess
El objeto instancia de la clase Dividend que genera el dividendo mediante un proceso AR(1).

world

public World world
El mundo. Contiene la situación actual y pasada del mercado.

output

public Output output
Objeto creado en ASMObserverSwarm que gestiona la escritura en ficheros de los parámetros y de los resultados de la simulación.

bfParams

public BFParams bfParams
Objeto instancia de BFParams que contiene los parámetros de los bfAgents.

asmModelParams

public ASMModelParams asmModelParams
Objeto instancia de ASMModelParams que contiene los parámetros del modelo.

actionForEach

public swarm.activity.FActionForEach actionForEach
Utilizado para crear acciones para cada uno de los agentes.
Constructor Detail

ASMModelSwarm

ASMModelSwarm(swarm.defobj.Zone aZone)
Constructor de la clase. Ponemos a 0 el reloj de la simulación.
Parameters:
aZone - Zona de memoria Swarm en la que se aloja el objeto Swarm
Method Detail

setParamsModel$BF

public java.lang.Object setParamsModel$BF(ASMModelParams modelParams,
                                          BFParams bfp)
Cuando creamos el asmModelSwarm, necesitamos comunicarle dónde encontrar los parámetros para que cree los agentes y demás objetos conforme a los parámetros introducidos por el usuario.
Parameters:
modelParams - Objeto instancia de ASMModelParams que contiene los parámetros del modelo.
bfp - Objeto instancia de BFParams que contiene los parámetros de los bfAgents.
Returns:
this

setOutputObject

public java.lang.Object setOutputObject(Output obj)
Le indicamos dónde encontrar el objeto que gestiona la escritura en ficheros de los parámetros y de los resultados de la simulación.
Parameters:
obj - Objeto instancia de Output que gestiona la escritura en ficheros de los parámetros y de los resultados de la simulación.
Returns:
this

getNumBFagents

public int getNumBFagents()
Devuelve el número de bfagents, variable instancia de asmModelParams
Returns:
asmModelParams.numBFagents número de agentes bfAgents

getInitialCash

public double getInitialCash()
Devuelve la posesión inicial de efectivo de los bfagents, variable instancia de asmModelParams
Returns:
asmModelParams.initialcash posesión inicial de efectivo de los bfagents

getAgentList

public java.util.LinkedList getAgentList()
Devuelve la lista enlazada de agentes
Returns:
agentList lista enlazada de agentes

getWorld

public World getWorld()
Devuelve una referencia al mundo (objeto world), donde se registra la situación actual y pasada del mercado.
Returns:
world El mundo. Contiene la situación actual y pasada del mercado.

getSpecialist

public Specialist getSpecialist()
Devuelve una referencia al market-maker (objeto specialist).
Returns:
specialist El especialista o market-maker, que vacia el mercado.

getOutput

public Output getOutput()
Devuelve una referencia al objeto output.
Returns:
output Objeto instancia de Output que gestiona la escritura en ficheros de los parámetros y de los resultados de la simulación.

getModelTime

public int getModelTime()
Devuelve el entero que representa el tiempo actual en la simulación.
Returns:
modelTime Entero que representa el tiempo actual en la simulación.

setBatchRandomSeed

public java.lang.Object setBatchRandomSeed(int newSeed)
El valor de la semilla (randomSeed) para generar números aleatorios permanece constante a no ser que se modifique a través de este método.
Parameters:
newSeed - Semilla para la generación de números aleatorios.
Returns:
this

buildObjects

public java.lang.Object buildObjects()
Construye e inicializa los objetos principales de la simulación: el dividendo, el mundo, el especialista y los agentes.
Returns:
this

writeParams

public java.lang.Object writeParams()
Este método ordena al objeto Output crear un fichero con los parámetros de la simulación.
Returns:
this

buildActions

public java.lang.Object buildActions()

Crea las acciones. Como ya hemos indicado en la introducción a esta clase, el modelo consta de dos programas de acciones: el startupSchedule y el periodSchedule.

startupSchedule se compone de 502 acciones iguales (doWarmupStep) y un grupo de acciones (periodActions). Se ejecuta un única vez en t=0.

periodSchedule es el programa que determina el curso normal de la simulación. Se repite cada vez que avanza el reloj de la simulación (al contrario que el primer programa: startupSchedule) y comprende un único grupo de acciones, el ya conocido periodActions.

Cabe destacar que el tiempo de generación no se calcula a través de un contador, sino que es Swarm quien lo calcula internamente. Podremos cosultar el tiempo de simulación en cualquier momento mediante el método getTime.

Returns:
this

doWarmupStep

public java.lang.Object doWarmupStep()
Este método se ejecuta 502 veces en tiempo de simulación t=0 con el objetivo de crear una historia bursátil ficticia inicial. Básicamente, lo que hace es generar un dividendo, actualizar el mundo y fijar el precio de mercado como el precio fundamental.
Returns:
this

periodStepDividend

public java.lang.Object periodStepDividend()
Dice al objeto dividendProcess que genere un nuevo dividendo, se lo envía al mundo e incrementa el tiempo de simulación en 1.
Returns:
this

periodStepPrice

public java.lang.Object periodStepPrice()
En primer lugar le dice al market-maker que fije el precio de mercado. Después se lo notifica al mundo.
Returns:
this

activateIn

public swarm.activity.Activity activateIn(swarm.objectbase.Swarm swarmContext)
En este método se activan los programas del asmModelSwarm.
Parameters:
swarmContext - El entorno de nuestro Swarm.
Returns:
getActivity() La actividad de nuestro Swarm.

drop

public void drop()
Este mensaje nos permite avisar a los distintos objetos de que la simulación ha terminado. Liberamos memoria y cerramos ficheros.