asm
Class BitVector

asm.BitVector

public class BitVector

Title: BitVector

Description: Esta clase son los "instentinos" del programa que hacen los forecast posibles. Un bitVector es un grupo de "words", y cada "word" contiene 16 indicadores. En este modelo, los bitvectors tienen 5 "words", lo que significa que hay 80 indicadores posibles.

En este modelo un "bit" es un aspecto del mundo que puede ser observado. En términos de Algoritmo Genético, uno puede decir "NO","YES" o "no importa", en cada porción de información. Un "bit" tiene los valores 0,1,2 en formato entero. En binario, es 00, 01 y 10. En esta clase se representan los números puestos juntos por medio de un entero de 32 bits:

0110001000011000010101100100100101010101

En el cual se mantienen 16 estados del mundo. Puede haber 5 "words" como esta en un BitVector. Estas palabras son referidas por "conditions". La primera palabra puede ser encontrada en conditions[0], la segunda conditions[1] y asi...

The world en el ASM puede ser descrito por un vector también, dándonos en binario muchos indicadores, diciendonos si se cumplen o no( son 0´s o 1´s). El BFAgent coge esta serie de bits, y los chaquea para ver si se cumplen las condiciones de su forecast o no. Todos los chequeos de bits y configuraciones, son manejados por la clase BitVector.

No nos vamos a meter ahora con matemática de bits, pero si se desea más información del funcionamiento de esta clase,en el método makebittables o en los comentarios en el código se puede seguir más ampliamente

Copyright:

Depto.Organización Industrial. Universidad de Valladolid

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

Field Summary
(package private)  int condbits
          Nº de bits de condición que estan en uso
(package private)  int[] conditions
          Array donde se guardan los condwords
(package private)  int condwords
          Nº de palabras de memoria necesitadas para mantener los bits en el modelo
static int[] MASK
           
static int MAXCONDBITS
           
static int[] NMASK
           
static int[] SHIFT
           
 
Constructor Summary
(package private) BitVector(swarm.defobj.Zone aZone)
           
 
Method Summary
 java.lang.Object createEnd()
          Se reserva memoria para las condwords
 void drop()
          Libera memoria
 int[] getConditions()
          Devuelve conditions
 int getConditionsbit(int bit)
          Devuelve el estado de un bit dado(0,1,2)
 int getConditionsWord(int i)
          Devuelve la palabra i de conditions
static void init()
           
static void makebittables()
          Construye tablas para la evaluación y el empaquetado rápido de bits.
 void maskConditionsbit(int bit)
           
 void setCondbits(int x)
          Establece el número de bits que el bitvector tiene en cuenta
 void setConditions(int[] x)
          Establece conditions a partir de x
 void setConditionsbit$FromZeroTo(int bit, int x)
          Cambia un bit dado, de 0 a 1 o 2
 void setConditionsbit$To(int bit, int x)
          Entra dentro de conditions, encuentra el bit dado, y se le pone el valor x
 void setConditionsbitToThree(int bit)
          El valor 3 se usa para indicar que un bit no es usado
 void setConditionsWord$To(int i, int value)
          Pone valores a la palabra i de conditions
 void setCondwords(int x)
          Establece el número de palabras válidas de memorias que serán usadas
 void switchConditionsbit(int bit)
          Si el bit es 1 lo cambia a 2 o viceversa
 int WORD(int bit)
           
 

Field Detail

condwords

int condwords
Nº de palabras de memoria necesitadas para mantener los bits en el modelo

condbits

int condbits
Nº de bits de condición que estan en uso

conditions

int[] conditions
Array donde se guardan los condwords

MAXCONDBITS

public static final int MAXCONDBITS

SHIFT

public static int[] SHIFT

MASK

public static int[] MASK

NMASK

public static int[] NMASK
Constructor Detail

BitVector

BitVector(swarm.defobj.Zone aZone)
Parameters:
aZone -  
Method Detail

WORD

public int WORD(int bit)
Parameters:
bit -  
Returns:
a

createEnd

public java.lang.Object createEnd()
Se reserva memoria para las condwords
Returns:
this

init

public static void init()

setCondwords

public void setCondwords(int x)
Establece el número de palabras válidas de memorias que serán usadas
Parameters:
x -  

setCondbits

public void setCondbits(int x)
Establece el número de bits que el bitvector tiene en cuenta
Parameters:
x -  

setConditions

public void setConditions(int[] x)
Establece conditions a partir de x
Parameters:
x -  

getConditions

public int[] getConditions()
Devuelve conditions
Returns:
conditions

setConditionsWord$To

public void setConditionsWord$To(int i,
                                 int value)
Pone valores a la palabra i de conditions
Parameters:
i -  
value -  

getConditionsWord

public int getConditionsWord(int i)
Devuelve la palabra i de conditions
Parameters:
i -  
Returns:
conditions[i]

setConditionsbit$To

public void setConditionsbit$To(int bit,
                                int x)
Entra dentro de conditions, encuentra el bit dado, y se le pone el valor x
Parameters:
bit -  
x -  

setConditionsbit$FromZeroTo

public void setConditionsbit$FromZeroTo(int bit,
                                        int x)
Cambia un bit dado, de 0 a 1 o 2
Parameters:
bit -  
x -  

getConditionsbit

public int getConditionsbit(int bit)
Devuelve el estado de un bit dado(0,1,2)
Parameters:
bit -  
Returns:
value

setConditionsbitToThree

public void setConditionsbitToThree(int bit)
El valor 3 se usa para indicar que un bit no es usado
Parameters:
bit -  

maskConditionsbit

public void maskConditionsbit(int bit)

switchConditionsbit

public void switchConditionsbit(int bit)
Si el bit es 1 lo cambia a 2 o viceversa
Parameters:
bit -  

drop

public void drop()
Libera memoria

makebittables

public static void makebittables()
Construye tablas para la evaluación y el empaquetado rápido de bits. Asumiendo palabras de 32 bits, almacenado 16 valores ternarios (0,1, o *) por palabra, con uno de los siguientes códigos: Value Message-board coding Rule coding 0 2 1 1 1 2 * - 0 La satisfacción de una regla así planteada puede ser evaluada con un simple AND entre los dos tipos de código. Configura las tablas para almacenar MAXCONDBITS valores ternarios en CONDWORDS = ceiling(MAXCONDBITS/16) words. Despues de llamar a esta rutina, dado un array[CONDWORDS] se pueden hacer las siguientes cosas: a.Almacenar "value" (0,1,2, usando uno de los códigos de arriba) para el bit n con array[WORD(n)] |= value << SHIFT[n]; si el valor anterior era previamente 0; o b.Almacenar "value" (0,1,2, usando uno de los códigos de arriba) para el bit n con array[WORD(n)] = (array[WORD(n)] & NMASK[n]) | (value << SHIFT[n]); si el estado inicial es desconocido. c.Almacena el valor 0 para el bit n con array[WORD(n)] &= NMASK[n]; d.Extrae el valor del bit n(0,1,2 o 3) con value = (array[WORD(n)] >> SHIFT[n]) & 3; e.Busca el valor 0 en el bit n con if ((array[WORD(n)] & MASK[n]) == 0) ... f.Chequea si una condición se cumple o no (usando los dos códigos anteriores) con for (i=0; i