//******************************************** // A1_reactive_fitness.sci // //********************************** // AUTHORs: Gerd Doeben-Henisch // First: unknown // Last: Nov-19,2012,23:40h //*************************************************** // Management of the old actions // The actual action will be positioned at position 1, the predecessors are shifted back 1 position each // Log the action with classifier index in ANIMAT function [ANIMAT,OLDACTIONS]=manageOldActs(IDXM,CAND,OLDACTIONS,ACTIONSET,ANIMAT,FOODIDX,MAXREWARD,SHOW) // Shift all classifiers one position 'down' by one position d=ANIMAT(9) for i=1:(d-1),OLDACTIONS(d+1-i,1)=OLDACTIONS(d-i,1),OLDACTIONS(d+1-i,2)=OLDACTIONS(d-i,2),end // Find index for new classifier [r,c]=size(ANIMAT(8)) i=1, while (i<r+1) do if (strcmp(ANIMAT(8)(i),ACTIONSET(1,1))==0 & (ANIMAT(8)(i,3)==ACTIONSET(1,3) )) then OLDACTIONS(1,1)=i, OLDACTIONS(1,2)=0, i=r+1 else i=i+1 end, end if SHOW==5 then printf("OLDACTIONS WITHOUT FITNESS = ") disp(OLDACTIONS) end // Distribute values in old actions, if there was a fitness value >0 if ANIMAT(15)>0 then s=0 for i=1:ANIMAT(9) //ACTDEPTH s=s+i end fitshare= (FOODIDX/s)/FOODIDX for i=1:ANIMAT(9) OLDACTIONS(i,2)=OLDACTIONS(i,2)+((ANIMAT(9)+1-i)*fitshare) //if OLDACTIONS(i,2)>MAXREWARD then OLDACTIONS(i,2)=MAXREWARD //end end if SHOW==5 then printf("OLDACTIONS WITHFITNESS = ") disp(OLDACTIONS) end //Update fitness values in CLASSIF for i=1:ANIMAT(9) if OLDACTIONS(i,1)>0 then ANIMAT(8)(OLDACTIONS(i,1),4) =sci2exp(eval(ANIMAT(8)(OLDACTIONS(i,1),4))+OLDACTIONS(i,2)), if eval(ANIMAT(8)(OLDACTIONS(i,1),4)) > MAXREWARD then ANIMAT(8)(OLDACTIONS(i,1),4)=sci2exp(1),end end end if SHOW==5 then printf("UPDATE OF CLASSIFIER Fitness = ") disp(ANIMAT(8)) end ANIMAT(15)=0 //Set fitness Flag back to zero end //End of case new fitness value endfunction