
/****************************************************************/
/*	C l a s s i f i e r - S y s t e m - E x a m p l e   1	*/
/****************************************************************/
/*	T e s t    (c) by Marcus Hutter  21.05.1991		*/
/****************************************************************/

/* USER-Variables are Model-dependend				*/
/* user-Variables are Program-Specific				*/

/*------------------------------*/
/*	Variables		*/
/*------------------------------*/

/* Array-Sizes and other Compiler-Information */
#define	SMessL	        1	/* USER: # of Messages		*/
#define	SOutL	        1	/* USER: # of Mess prod. by Eff	*/
#define	SCFL	      100	/* USER: # of Classifiers	*/
#define	SEffL           1	/* USER: # of Effectors		*/
#define	SBidL	      100	/* user: # of matching-mess	*/
#define	STupL	      100	/* user: # of matching-tuples	*/

#define	SStr		6	/* USER: # of Bits per String	*/
#define	TwoCond	     FALSE	/* USER: two Conditions (or one)*/
#define	SpeedF	      TRUE	/* user: Optimize for Speed	*/

BreakPoint() {}		/* Set a BreakPoint in this Line !!	*/

#include "D:\TC\MYPROGS\CFSSIM.C" /* Classifier-System-Sim.	*/

/* General - Variables	*/
int	StRate	=      100;	/* USER: Statistic-Activ-Rare	*/
fixp	SclSel	=  FixP(2/3);	/* USER: Scale-Factor  50%-100%	*/
char ProtDev[30]="example1.lst";/* USER: Protocoll-Device 	*/
char	DetMessTag[] =	"#";	/* USER: {0,1,#}*		*/
char	EffMessTag[] =	"##";	/* USER: {0,1,#}*		*/

/* Detector - Variables */
int	DetRate	 =	1;	/* USER: Det.-Sampling-Rate	*/
int	MDetM	 =	1;	/* USER: # of Det.Mess.		*/
fixp	DefDetMI = FixP(1.0);	/* USER: Detector-Mess-Intens.	*/
fixp	DefStr	 = FixP(2.0);	/* USER: DefaultStrength 0..9	*/
fixp	DefStrDev= FixP(0.1);	/* USER: DefaultStrDev	 0..25%	*/

/* Matching - Variables */
fixp	DefNMI	=  FixP(1.0);	/* USER: Default NonMatchIntens	*/

/* Bid - Variables */
fixp	Dev2	=  FixP(0.0);	/* USER: EBid-Deviation	 0..25%	*/

/* Clean - Variables */
int	MEqMess	      =	MaxInt;	/* USER: # of Equal Mess. 	*/
sbyte	DelMessSelMode=	2;	/* USER: DelMode       -6..6	*/
bool	CleanHallF    =	FALSE;	/* USER: Clean Hallunc.Mess.	*/

/* Effector - Variables */
int	EffRate	      =	1;	/* USER: Eff.-Sampling-Rate	*/

/* Credit - Variables	*/
int	ReRate	  =	1;	/* USER: Reinf.Act.Rate		*/
byte	CreditMode=	1;	/* USER: Credit-Assign-Mode 	*/
fixp	NMFrac	  =FixP(0.3);	/* USER: NonMatchCreditFrac.in%	*/
fixp	DetFrac	  =FixP(0.5);	/* USER: DetectorCreditFrac.in%	*/
fixp	PSPFrac   =FixP(0.1);	/* USER: PSP-Reduc.-Constant.in%*/
byte	PSPDisMode=	4;	/* USRR: PSP-Distr.-Mode 1..4	*/

/* Taxes - Variables	*/
fixp	HeadTax	 = FixP(0.00);	/* USER: Head-Tax (CF-Tax)	*/
fixp	MessTax	 = FixP(1.00);	/* USER: Mess-Tax		*/
fixp	BidTax	 = FixP(0.00);	/* USER: Bid-Tax		*/
byte	BidTaxMode   =	2;	/* USER: BidTaxMode	 1..2	*/
bool	MultBidTaxF  =	FALSE;	/* USER: Tax for each Bid	*/
bool	MultMessTaxF =	FALSE;	/* USER: Tax for each Mess	*/

/* StrUpDate - Variables*/
fixp	MaxStr	=   FixP(20.0);	/* USER: Maximal Strength of CF	*/
fixp	MinStr	=   FixP( 0.0);	/* USER: Minimal Strength of CF	*/

/* Genetic - Variables	*/
int	GenRate	  =	50;	/* USER: Genetic-Activ.-Rate	*/
int	NCFRepl	  =	50;	/* USER: # of CF to Replace	*/
sbyte	ReplSelMode=    3;	/* USER: Replace-SelMode	*/
int	NCFMut	  =	0;	/* USER: # of CF to Mutate	*/
int	NMutate	  =	1;	/* USER: # of Mutations per CF	*/
sbyte	MutSelMode=	3;	/* USER: Mutation-SelMode	*/
fixp	CondSp	  =FixP(0.50);	/* USER: Mean Cond-Specifity  %	*/
fixp	ActSp	  =FixP(1.0);	/* USER: Mean Act.-Specifity  %	*/
fixp	NegCondP  =FixP(0.00);	/* USER: Prob. of neg. Cond   %	*/

/* ReInit - Variables	*/
byte    DelMessMode =	2;	/* USER: Del.Mess-Mode   0..2	*/

TCFL	XC	= { 0,0,0,	/* Classifier-Parameters 	*/
	2,			/* USER: BidMode	 1..4	*/
	2,			/* USER: SuppMode	 1..2	*/
	2,			/* USER: BidTupSelMode	-6..6	*/
	2,			/* USER: BidActSelMode	-6..6	*/
	3,			/* USER: FireBidSelMode	-6..6	*/
	2,			/* USER: FireTupSelMode	-6..6	*/
	5,			/* USER: MBids	    1..MaxInt	*/
	MaxInt,			/* USER: MAct	    1..MaxInt	*/
	MaxInt,			/* USER: MFire	    1..MaxInt	*/
	FixP(1.0),		/* USER: RiskFak   FixP(0..1) %	*/
	1,			/* USER: SpecPow	 0..2	*/
	1,			/* USER: RelSuppPow	 0..2	*/
	1,			/* USER: EBidPow	 0..2	*/
	0,			/* USER: ESpecPow	 0..2	*/
	1,			/* USER: ClaimMode	 1..2	*/
	1,			/* USER: DisMode	 1..5	*/
	2 };			/* USER: SumMode	 1..3	*/

TCFL	XE	= { 0,0,0,	/* Effector-Parameters		*/
	2,			/* USER: BidMode	 1..4	*/
	2,			/* USER: SuppMode	 1..2	*/
	2,			/* USER: BidTupSelMode	-6..6	*/
	2,			/* USER: BidActSelMode	-6..6	*/
	2,			/* USER: FireBidSelMode	-6..6	*/
	2,			/* USER: FireTupSelMode	-6..6	*/
	5,			/* USER: MBids	    1..MaxInt	*/
	MaxInt,			/* USER: MAct	    1..MaxInt	*/
	1,			/* Should be 1 (MFire)		*/
	FixP(0.5),		/* USER: RiskFak   FixP(0..1) %	*/
	1,			/* USER: SpecPow	 0..2	*/
	1,			/* USER: RelSuppPow	 0..2	*/
	1,			/* USER: EBidPow	 0..2	*/
	0,			/* USER: ESpecPow	 0..2	*/
	1,			/* USER: ClaimMode	 1..2	*/
	1,			/* USER: DisMode	 1..5	*/
	2 };			/* USER: SumMode	 1..3	*/


char	*MessSL[] =   		/* Predefined Messages		*/
      { /* "1111",
	"1000",
	"1001",
	"0000", */
	NULL };

char	*CFSL[] =		/* Predefined Classifiers	*/
      { /* "+1###+#11#/01#1",
	"-0###-0###/111#",
	"+0###-0000/1###", */
	NULL };

char	*EffSL[] = 		/* Predefined Effectors		*/
      { "+######/00000#",
	NULL };

typedef struct              	/* Enviroment			*/
      {	int	inp;
	int	out;
	bool	success;
	/*...*/ }
	TEnv;

TEnv	Env;			/* Current Enviroment		*/

/*------------------------------*/
	InitEnv()		/* Init	Enviroment		*/
/*------------------------------*/
{ memset(&Env,0,sizeof(Env));
}
/*------------------------------*/
	Detect(MP,N)		/* Detect Messages		*/
/*------------------------------*/
TMessL	*MP;            	/* Message-List			*/
int	N;			/* Max.# of Det.Mess		*/
{ Env.inp=rand()&63;		/* 2 Addr. & 4 Inp. Bits	*/
  Env.out=(Env.inp>>(5-(Env.inp&3)))&1;
  MP->C->M = Env.inp;
  MP->C->I = DefDetMI;
  MP->C->CF= DetId;
  MP->C++;
}
/*------------------------------*/
	Effect(OP)		/* Effect Messages		*/
/*------------------------------*/
TMessL	*OP;
{/* Change Enviroment in dependence on MP */
 /* prf(0,"Output-Mess = Env.Change:\n");
  pprMessL(MP); */
}
/*------------------------------*/
fixp	Reinf(OP)		/* Calculate Reinforcement	*/
/*------------------------------*/
TMessL	*OP;
{ Env.success = (OP->C>OP->B) && (Env.out==(OP->B->M));
  return(FixP( (Env.success) ? 10 : 0 ));
}
/*------------------------------*/
	Display()		/* Display Information		*/
/*------------------------------*/
{ if (prMode>1) then
    prf(LIGHTRED,"4to1Decoder: %s->%d %s\r\n",
      CBtoS(Env.inp,MMask),Env.out,
      (Env.success) ? "Success" : "Failure");
}

/********************** End of Example 1 ************************/
