zsc2_experiment

//**************************************************************
// File: zcs2-experiments.sce
// Authors: Gerd Doeben-Henisch
// Version Start: May-18, 2010
//---------------------------------
// Update May-19-2010-1459
// Update May-19-10-2343
// Update May-27-10-1825
// Update May-31-10-2005
// Update June-1-10-1743
// Update June-1-10-2119
// Update June-6-10-1552
// Update June-6-22-0600
//**********************************************************
// diary('H:\FH\SCILAB\HISTORIES\Date.txt')
//diary('/home/gerd/public_html/uffmm/science-technology/single/themes/computer-science/personal-sites/doeben-henisch/KNOW/GBBLT/SCILAB/HISTORIES/Date.txt')
//******************************************************************
// CONTENT: 
// zsc2_environment := Framework to generate an environment
// zsc2_experiment := Framework to start and stop experiments
// zsc2_animat := Structure of an ANIMAT2
// zsc2_functions := Collection of those functions which define the behavior of an ANIMAT
// zsc2_feedback := Extension of the functions
//
// APPLICATION
//
// (1) Generate an environment
// (2) Define an experiment
// (3) Run the experiment

//******************************************************************************
//

//funcprot(0)
function [ANIMAT,HISTORY,GRID,FOOD]=liveR2(ANIMAT,X,Y,GRID, RUNS,SHOW,MATCHSET, ACTIONSET, CLASSIF,FOODIDX) 
  
  if (RUNS<0) then error('liveR1: RUNS is not specified'),end

  
  //SET GLOBAL VARIABLES AS START VALUES
  HISTORY=[]
  ANIMAT(1)=X
  ANIMAT(2)=Y
  ANIMAT(3)= FOODIDX //Initial Value FOODIDX
  ANIMAT(4)=0
  ANIMAT(5)= FOODIDX
  ANIMAT(6)=1  //At start time the ANIMAT is supposed to be active
  ANIMAT(13)=[]
  ANIMAT(14)=[] 
  MATCHSET=[]
  ACTIONSET=[]
  
  //Set all Feedback Values of CLASSIF to '000'
  [ANIMAT]=zeroCLASSIFFEEDB(ANIMAT,CLASSIF)
  
  f=1 //Index to store in which cycle food has been found
  FOOD=[] //Storage for differences
  FOLD=0
  FNEW=0
  
  
  [YMAX,XMAX]= size(GRID)
  //printf("DIMENSION OF GRID - ROWS = %d, COLUMNS = %d\n\n",ZMAX,XMAX)

  k=1
  while(k < RUNS+1),
    
   // if (SHOW==1) then
    printf("-----CYCLE %d---------------------------------------------------\n\n",k)
   // end
  
  
  // (1) Get actual position (XO,YO) from Animat 
  // Is given with argument ANIMAT(1) = rows and ANIMAT(2) = columns
  
  XO= ANIMAT(1)
  YO= ANIMAT(2)
  
  // Insert ANIMAT into GRID
  
  REPLACE=GRID(YO,XO)
  GRID(YO,XO)='*'
  
 // if (SHOW==1) then
  disp(GRID),
 // end

// Get SENSINPUT as string: PERC

 [PERC]=ainp(YO,XO,GRID,SHOW)


//Select MATCHSET for PERC and VITAL

MATCHSET=ANIMAT(13)
[ANIMAT,MATCHSET]=selectM(ANIMAT, CLASSIF,PERC,MATCHSET,SHOW)

// Generate candidates for ACTion out of MATCHSET
// CAND are the classifiers selected
// IDXM is a randomly generated index into CAND

[IDXM,CAND, MATCHSET]=makeCAND(MATCHSET,SHOW)

// Select ACTion 

[ACT,ACTIONSET,ANIMAT]=action2(IDXM,CAND, MATCHSET,ACTIONSET,ANIMAT)
ANIMAT(14)=ACTIONSET

//Delete ANIMAT in GRID

GRID(YO,XO)=REPLACE

//Generate new move
[YN, XN]=aout(ACT,SHOW, YO, XO)
ANIMAT(1)=XN, ANIMAT(2)=YN

if (SHOW==1) then
  printf("liveR2: NEW POSITION PROPOSED=(YN,XN)= (%d, %d)\n\n",YN,XN),
  end


  // Decode the content of new position
  
  [CELLVALUE]=decode(YN,XN,GRID,SHOW)
  
   if (SHOW==1) then,
     printf("liveR2: CONTENT OF NEW POSITION= %s\n\n",CELLVALUE),
     end
     
     
     

// Impact of perception onto ENERGY

[ANIMAT]=impact(CELLVALUE,ANIMAT,SHOW)

// Compute Feedback of REW for last action ACT

[ANIMAT, CLASSIF,ACTIONSET]=feedback(CLASSIF, ANIMAT, ACTIONSET,SHOW)

// UPDATE HISTORY

[HISTORY]=updateHIST(HISTORY,k, CELLVALUE,XN,YN,ANIMAT)  

  //Update while loop
  
  
  k=k+1,
  
end

disp(HISTORY)

[FOOD]=food(HISTORY,RUNS)

//if (SHOW==1) then
  printf("ENERGY = %d,\n MEAN NUMNER OF ACTIONS = %f\n DENSITY OF FOODDETECTION = %f \n",ANIMAT(3),FOOD(4), FOOD(3))
 // end


endfunction

//**************************************************************
// File: zcs2-experiments.sce
// Authors: Gerd Doeben-Henisch
// Version Start: May-18, 2010
//---------------------------------
// Update May-19-2010-1459
// Update May-19-10-2343
// Update May-27-10-1825
// Update May-31-10-2005
// Update June-1-10-1743
// Update June-1-10-2119
// Update June-6-10-1552
//**********************************************************
// diary('H:\FH\SCILAB\HISTORIES\Date.txt')
//diary('/home/gerd/public_html/uffmm/science-technology/single/themes/computer-science/personal-sites/doeben-henisch/KNOW/GBBLT/SCILAB/HISTORIES/May20-10-1032.txt')
//******************************************************************


//***************************************************
// SIMPLE AUTOMATED TEST FRAMEWORK FOR ZCS
// WITH REPETITION
//
// ANIMAT := Structure OF ANIMAT system
// HISTORY := Protocol of movements and cumulated rewards
// RUNS := How many cycles the simulation shall run. 1 cycle means one action
// GRID := Fixed GRID from external source
// N:= Number of repetitions of an experiment with RUNS-many actions
// ACTIONSPERFOOD := List of food hits per repetition
// MEAN := statistical mean
// STD := standard deviation
// YS, XS := start position




function [ACTIONSPERFOOD,MEAN, STD]=experiment1(ANIMAT,X,Y,HISTORY,N, GRID, RUNS,SHOW,MATCHSET, ACTIONSET, CLASSIF,FOODIDX)
  
  ACTIONSPERFOOD=[]
  
  for i=1:N,
    
    [ANIMAT,HISTORY,GRID,FOOD]=liveR2(ANIMAT,X,Y,GRID, RUNS,SHOW,MATCHSET, ACTIONSET, CLASSIF,FOODIDX) 
    
    //Counting food values
    
  ACTIONSPERFOOD(i)=FOOD(4)
  
  // Set back 
  
  ANIMAT(1) = X, ANIMAT(2)=Y, ANIMAT(5) = FOODIDX
  
  end //for N


MEAN=mean(ACTIONSPERFOOD)
STD=st_deviation(ACTIONSPERFOOD)


endfunction



Gerd Doeben-Henisch 2012-03-31