asm
Class Specialist

asm.Specialist

public class Specialist

Title: Specialist

Description: Existe una única instancia de esta clase. Esa instancia es la encargada de recoger las demandas (positivas o negativas) de los agentes y calcular, mejor o peor, el precio que vacía el mercado (o al menos lo intenta).

Existen tres tipos de especialistas diferentes, aunque todos siguen el mismo procedimiento para calcular el precio de mercado:

Una vez que han calculado el precio de mercado, dicen a los agentes que actualicen su posición, sus ganancias y sus posesiones de efectivo.

Los tres tipos de especialistas implementados en esta versión son:

El especialista "Expectativas racionales" (ER) calcula el precio sin iterar como una función lineal del dividendo (precio = rea*dividendo + reb). Partiendo de la hipótesis de que los agentes participantes son homogéneos con expectativas racionales y teniendo en cuenta que forman sus expectativas para el próximo precio como una función lineal del dividendo, se calculan los coeficientes de esta ecuación (rea y reb). El precio calculado usando esta ecuación y esos coeficientes es el que impone este especialista. La utilidad de este especialista es comprobar si el modelo soporta las predicciones del modelo neoclásico estándar. Si así fuera, se debería observar un mercado estático (como efectivamente ocurre). El cálculo de los coeficientes rea y reb no es inmediato aunque tampoco es complicado. Para más detalles, consúltese el proyecto de fin de carrera de Luis R. Izquierdo.

El especialista de pendiente (P) calcula el exceso de oferta o de demanda para un precio de prueba y, teniendo en cuenta la pendiente de las curvas de oferta y demanda, lanza un nuevo precio de prueba. El proceso de búsqueda termina cuando el desajuste entre oferta es suficientemente pequeño (

Finalmente, el Especialista de ETA fija (ETA) lanza como primer precio de prueba el precio del último periodo. Recoge las demandas de activos de los agentes para ese precio y calcula el exceso de demanda o el exceso de oferta que se produzca para dicho precio. Multiplica este exceso de oferta o demanda por un coeficiente constante (ETA) y entonces fija el precio de mercado de acuerdo con la siguiente ecuación:

precio = precio-de-prueba*(1 + ETA*(desajuste))

El proceso de búsqueda del precio de mercado finaliza en dos pasos.

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
(package private)  double bidfrac
          Proporción de demanda satisfecha: volume/bidtotal
(package private)  double eta
          Se usa para ajustar el precio ante un desequilibrio oferta-demanda
(package private)  int maxiterations
          Número máximo de iteraciones para calcular el precio de mercado
(package private)  double maxprice
          Precio máximo
(package private)  double minexcess
          El desajuste |demanda - oferta| debe ser inferior a minexcess para que el especialista deje de iterar por esta razón.
(package private)  double minprice
          Precio mínimo
(package private)  double offerfrac
          Proporción de oferta satisfecha: volume/offertotal
(package private)  double rea
          Usado por el especialista ER para calcular el precio de mercado: precio = rea*dividendo + reb
(package private)  double reb
          Usado por el especialista ER para calcular el precio de mercado: precio = rea*dividendo + reb
(package private)  int SP_ETA
          Especialista de ETA fija
(package private)  int SP_RE
          Especialista "Expectativas racionales"
(package private)  int SP_SLOPE
          Especialista de pendiente
(package private)  int sptype
          Tipo de especialista que se está usando.
(package private)  double taupdecay
          Coeficiente para calcular la media móvil del beneficio de los agentes.
(package private)  double taupnew
          Coeficiente para calcular la media móvil del beneficio de los agentes.
(package private)  double volume
          Volumen de negociación
 
Constructor Summary
(package private) Specialist(swarm.defobj.Zone aZone)
          Constructor de la clase
 
Method Summary
 java.lang.Object completeTrades$Market(java.util.LinkedList agentList, World worldForSpec)
          Actualiza la posición y el efectivo de cada agente después de que se lleven a cabo los intercambios acordados.
 void drop()
          Liberador de memoria.
 double getVolume()
           
 double performTrading$Market(java.util.LinkedList agentList, World worldForSpec)
          Este es el método principal de la clase.
 java.lang.Object setETA(double ETA)
          Fija eta
 java.lang.Object setMaxIterations(int someIterations)
          Fija el número máximo de iteraciones para calcular el precio de mercado
 java.lang.Object setMaxPrice(double maximumPrice)
          Fija el precio máximo
 java.lang.Object setMinExcess(double minimumExcess)
          Fija el mínimo desajuste |demanda - oferta| para que el especialista deje de iterar por esta razón.
 java.lang.Object setMinPrice(double minimumPrice)
          Fija el precio mínimo
 java.lang.Object setREA(double REA)
          Fija rea
 java.lang.Object setREB(double REB)
          Fija reb
 java.lang.Object setSPtype(int i)
          Fija el tipo de especialista que vamos a usar.
 java.lang.Object setTaup(double aTaup)
          Calcula los pesos de la media móvil del beneficio de los agentes.
 

Field Detail

SP_RE

final int SP_RE
Especialista "Expectativas racionales"

SP_SLOPE

final int SP_SLOPE
Especialista de pendiente

SP_ETA

final int SP_ETA
Especialista de ETA fija

maxprice

double maxprice
Precio máximo

minprice

double minprice
Precio mínimo

eta

double eta
Se usa para ajustar el precio ante un desequilibrio oferta-demanda

minexcess

double minexcess
El desajuste |demanda - oferta| debe ser inferior a minexcess para que el especialista deje de iterar por esta razón.

rea

double rea
Usado por el especialista ER para calcular el precio de mercado: precio = rea*dividendo + reb

reb

double reb
Usado por el especialista ER para calcular el precio de mercado: precio = rea*dividendo + reb

bidfrac

double bidfrac
Proporción de demanda satisfecha: volume/bidtotal

offerfrac

double offerfrac
Proporción de oferta satisfecha: volume/offertotal

maxiterations

int maxiterations
Número máximo de iteraciones para calcular el precio de mercado

volume

double volume
Volumen de negociación

taupdecay

double taupdecay
Coeficiente para calcular la media móvil del beneficio de los agentes. Este coeficiente es el peso de la media móvil anterior.

taupnew

double taupnew
Coeficiente para calcular la media móvil del beneficio de los agentes. Este coeficiente es el peso de la nueva entrada.

sptype

int sptype
Tipo de especialista que se está usando.

Los tres tipos de especialistas implementados en esta versión son:

Constructor Detail

Specialist

Specialist(swarm.defobj.Zone aZone)
Constructor de la clase
Parameters:
aZone - Zona de memoria Swarm en la que se aloja el objeto Swarm
Method Detail

setMaxPrice

public java.lang.Object setMaxPrice(double maximumPrice)
Fija el precio máximo
Parameters:
maximumPrice -  
Returns:
this

setMinPrice

public java.lang.Object setMinPrice(double minimumPrice)
Fija el precio mínimo
Parameters:
minimumPrice -  
Returns:
this

setTaup

public java.lang.Object setTaup(double aTaup)
Calcula los pesos de la media móvil del beneficio de los agentes.
Parameters:
aTaup - Coeficiente para calcular la media móvil del beneficio de los agentes
Returns:
this

setSPtype

public java.lang.Object setSPtype(int i)
Fija el tipo de especialista que vamos a usar. Por defecto se usa el especialista pendiente.
Parameters:
i - Tipo de especialista
Returns:
this

setMaxIterations

public java.lang.Object setMaxIterations(int someIterations)
Fija el número máximo de iteraciones para calcular el precio de mercado
Parameters:
someIterations -  
Returns:
this

setMinExcess

public java.lang.Object setMinExcess(double minimumExcess)
Fija el mínimo desajuste |demanda - oferta| para que el especialista deje de iterar por esta razón.
Parameters:
minimumExcess -  
Returns:
this

setETA

public java.lang.Object setETA(double ETA)
Fija eta
Parameters:
ETA -  
Returns:
this

setREA

public java.lang.Object setREA(double REA)
Fija rea
Parameters:
REA -  
Returns:
this

setREB

public java.lang.Object setREB(double REB)
Fija reb
Parameters:
REB -  
Returns:
this

performTrading$Market

public double performTrading$Market(java.util.LinkedList agentList,
                                    World worldForSpec)
Este es el método principal de la clase. En este método se calcula el precio de mercado de acuerdo con el especialista elegido.

Existen tres tipos de especialistas diferentes, aunque todos siguen el mismo procedimiento para calcular el precio de mercado:

Una vez que han calculado el precio de mercado, dicen a los agentes que actualicen su posición, sus ganancias y sus posesiones de efectivo.

Parameters:
agentList - La lista enlazada de Java que contiene a todos los agentes.
worldForSpec - Referencia al mundo.
Returns:
trialprice Precio de mercado

getVolume

public double getVolume()

completeTrades$Market

public java.lang.Object completeTrades$Market(java.util.LinkedList agentList,
                                              World worldForSpec)
Actualiza la posición y el efectivo de cada agente después de que se lleven a cabo los intercambios acordados. En ocasiones (casi siempre) es necesario prorratear.
Parameters:
agentList - La lista enlazada de Java que contiene a todos los agentes.
worldForSpec - Referencia al mundo.
Returns:
this

drop

public void drop()
Liberador de memoria.