//************************************************************** // File: A1_reactive_experiments.sci // Authors: Gerd Doeben-Henisch // Version Start: May-18, 2010 //--------------------------------- // Last: Nov-26, 2012, 21:44h // //********************************************************** // Diary: //****************************************************************** // CONTENT: // environment_v5.sci := Framework to generate an environment // A1_reactive_experiments.sci := Framework to start and stop experiments // A1_reactive_19Nov2012.sci := Structure of an ANIMAT2 // A1_reactive_functions.sci := Collection of those functions which define the behavior of an ANIMAT // // APPLICATION // // (1) Generate an environment // (2) Define an experiment // (3) Run the experiment //****************************************************************************** // liveR2() // //Running a simple experiment with a given number of RUNS function [ANIMAT,HISTORY,GRID,FOOD]=liveR2(ANIMAT,X,Y,GRID, RUNS,SHOW,ACTDEPTH, CLASSIF,FOODIDX, VTHRESHOLD) if (RUNS<0) then error('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)= 0 ANIMAT(6)=1 //At start time the ANIMAT is supposed to be active ANIMAT(7)=[] ANIMAT(9)=ACTDEPTH //length of oldactions ANIMAT(10)=FOODIDX ANIMAT(12)=VTHRESHOLD //Schwellwert ANIMAT(13)=[] ANIMAT(14)=[] MATCHSET=[] ACTIONSET=[] //Set all Feedback Values of CLASSIF to '000' [ANIMAT]=zeroCLASSIFFEEDB(ANIMAT,CLASSIF) //Set OLDACTIONS to a predefined value [ANIMAT, OLDACTIONS]=oldActZero(ANIMAT,OLDACTIONS) 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 // Select ACTion VITAL=ANIMAT(6) if VITAL==0 then [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDfood(MATCHSET,SHOW) else [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDpath(MATCHSET,SHOW) end //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==5) then, printf("CONTENT OF NEW POSITION= %s\n\n",CELLVALUE), end // Impact of perception onto ENERGY [ANIMAT]=impact(CELLVALUE,ANIMAT,SHOW) printf("ENERGY = %d, VITAL = %d\n",ANIMAT(3),ANIMAT(6)) // Compute Feedback of REW for last action ACT [ANIMAT,OLDACTIONS]=manageOldActs(IDXM,CAND,OLDACTIONS,ACTIONSET,ANIMAT,FOODIDX,MAXREWARD) // 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 //****************************************************************************** // liveR3() // //Running a simple experiment with a a defined end // If the 'end' occurs then the experiment stops // Here we use as an 'end' criterium the eating of food function [ANIMAT,HISTORY,GRID,FOOD,k]=liveR3(ANIMAT,X,Y,GRID,SHOW,ACTDEPTH, CLASSIF,FOODIDX, VTHRESHOLD) //SET GLOBAL VARIABLES AS START VALUES HISTORY=[] ANIMAT(1)=X ANIMAT(2)=Y ANIMAT(3)= FOODIDX //Initial Value FOODIDX ANIMAT(4)=0 ANIMAT(5)= 0 ANIMAT(6)=1 //At start time the ANIMAT is supposed to be active ANIMAT(7)=[] ANIMAT(9)=ACTDEPTH //length of oldactions ANIMAT(10)=FOODIDX ANIMAT(12)=VTHRESHOLD //Schwellwert ANIMAT(13)=[] ANIMAT(14)=[] MATCHSET=[] ACTIONSET=[] //Set all Feedback Values of CLASSIF to '000' [ANIMAT]=zeroCLASSIFFEEDB(ANIMAT,CLASSIF) //Set OLDACTIONS to a predefined value [ANIMAT, OLDACTIONS]=oldActZero(ANIMAT,OLDACTIONS) 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) ENDE=0 k=1 while(ENDE==0), // 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 // Select ACTion VITAL=ANIMAT(6) if VITAL==0 then [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDfood(MATCHSET,SHOW) else [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDpath(MATCHSET,SHOW) end //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==5) then, printf("CONTENT OF NEW POSITION= %s\n\n",CELLVALUE), end // Impact of perception onto ENERGY [ANIMAT]=impact(CELLVALUE,ANIMAT,SHOW) if ANIMAT(15)==1 then ENDE=1 end printf("ENERGY = %d, VITAL = %d\n",ANIMAT(3),ANIMAT(6)) // Compute Feedback of REW for last action ACT [ANIMAT,OLDACTIONS]=manageOldActs(IDXM,CAND,OLDACTIONS,ACTIONSET,ANIMAT,FOODIDX,MAXREWARD,SHOW) // UPDATE HISTORY [HISTORY]=updateHIST(HISTORY,k, CELLVALUE,XN,YN,ANIMAT) //Update while loop k=k+1, end disp(HISTORY) [FOOD]=food(HISTORY,k) //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 //****************************************************************************** // liveR4() // //Running a simple experiment with a a defined end // If the 'end' occurs then the experiment stops // Here we use as an 'end' criterium the eating of food // This version is for repetitions! function [ANIMAT,HISTORY,GRID,FOOD]=liveR4(ANIMAT,X,Y,GRID,SHOW,ACTDEPTH, CLASSIF,FOODIDX, VTHRESHOLD) //SET GLOBAL VARIABLES AS START VALUES HISTORY=[] ANIMAT(1)=X ANIMAT(2)=Y ANIMAT(3)= FOODIDX //Initial Value FOODIDX ANIMAT(4)=0 ANIMAT(5)= 0 ANIMAT(6)=1 //At start time the ANIMAT is supposed to be active ANIMAT(7)=[] ANIMAT(9)=ACTDEPTH //length of oldactions ANIMAT(10)=FOODIDX ANIMAT(12)=VTHRESHOLD //Schwellwert ANIMAT(13)=[] ANIMAT(14)=[] MATCHSET=[] if MATCHSET==[] then //Set OLDACTIONS to a predefined value [ANIMAT, OLDACTIONS]=oldActZero(ANIMAT,OLDACTIONS) end 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) ENDE=0 k=1 while(ENDE==0), // 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 // Select ACTion VITAL=ANIMAT(6) if VITAL==0 then [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDfood(MATCHSET,SHOW) else [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDpath(MATCHSET,SHOW) end //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==5) then, printf("CONTENT OF NEW POSITION= %s\n\n",CELLVALUE), end // Impact of perception onto ENERGY [ANIMAT]=impact(CELLVALUE,ANIMAT,SHOW) if ANIMAT(15)==1 then ENDE=1 end printf("ENERGY = %d, VITAL = %d\n",ANIMAT(3),ANIMAT(6)) // Compute Feedback of REW for last action ACT [ANIMAT,OLDACTIONS]=manageOldActs(IDXM,CAND,OLDACTIONS,ACTIONSET,ANIMAT,FOODIDX,MAXREWARD,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 //****************************************************************************** // liveR4() // //Running a simple experiment with a a defined end // If the 'end' occurs then the experiment stops // Here we use as an 'end' criterium the eating of food // This version is for repetitions! function [ANIMAT,HISTORY,GRID,FOOD,k]=liveR5(ANIMAT,X,Y,GRID,SHOW,ACTDEPTH, CLASSIF,FOODIDX, VTHRESHOLD) //SET GLOBAL VARIABLES AS START VALUES HISTORY=[] ANIMAT(1)=X ANIMAT(2)=Y ANIMAT(3)= FOODIDX //Initial Value FOODIDX ANIMAT(4)=0 ANIMAT(5)= 0 ANIMAT(6)=1 //At start time the ANIMAT is supposed to be active ANIMAT(7)=[] ANIMAT(9)=ACTDEPTH //length of oldactions ANIMAT(10)=FOODIDX ANIMAT(12)=VTHRESHOLD //Schwellwert ANIMAT(13)=[] ANIMAT(14)=[] MATCHSET=[] if MATCHSET==[] then //Set OLDACTIONS to a predefined value [ANIMAT, OLDACTIONS]=oldActZero(ANIMAT,OLDACTIONS) end 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) ENDE=0 k=1 while(ENDE==0), // 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 // Select ACTion VITAL=ANIMAT(6) if VITAL==0 then [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDfood(MATCHSET,SHOW) else [IDXM,CAND, MATCHSET,ACTIONSET,ACT]=makeCANDpath(MATCHSET,SHOW) end //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==5) then, printf("CONTENT OF NEW POSITION= %s\n\n",CELLVALUE), end // Impact of perception onto ENERGY [ANIMAT]=impact(CELLVALUE,ANIMAT,SHOW) if ANIMAT(15)==1 then ENDE=1 end printf("ENERGY = %d, VITAL = %d\n",ANIMAT(3),ANIMAT(6)) // Compute Feedback of REW for last action ACT [ANIMAT,OLDACTIONS]=manageOldActs(IDXM,CAND,OLDACTIONS,ACTIONSET,ANIMAT,FOODIDX,MAXREWARD,SHOW) // UPDATE HISTORY [HISTORY]=updateHIST(HISTORY,k, CELLVALUE,XN,YN,ANIMAT) //Update while loop k=k+1, end disp(HISTORY) [FOOD]=food(HISTORY,k) //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