Zadanie pamięci roboczej 1-2-AX

Zadanie pamięci roboczej 1-2-AX
Zamiar zdolności pamięci roboczej pamięci krótkotrwałej

Zadanie pamięci roboczej 1-2-AX jest testem poznawczym , który wymaga rozwiązania pamięci roboczej .

Można go wykorzystać jako przypadek testowy do uczenia się algorytmów w celu sprawdzenia ich zdolności do zapamiętywania niektórych starych danych. To zadanie może być wykorzystane do zademonstrowania możliwości pamięci roboczej algorytmów , takich jak PBWM lub długa pamięć krótkotrwała .

Opis

Dane wejściowe zadania to sekwencja cyfr/liter 1 , 2 , A , X , B i Y oraz dodatkowe rozpraszające wystąpienia 3 , C i Z , które należy zignorować. Na każdy wprowadzany znak w sekwencji podmiot musi odpowiedzieć lewą ( L ) lub prawą ( R ).

Dwie sekwencje docelowe, których szuka podmiot, to AX i BY . Kiedy badany napotka 1 , musi przełączyć się na szukanie AX , a kiedy napotka 2 , musi przełączyć się na szukanie BY .

Szukając AX , jeśli badany napotka X , ponieważ wcześniej widział A (i podobnie dla Y , szukając BY ), a poprzednia litera nie była częścią wcześniejszej sekwencji, odpowiada R , aby zaznaczyć koniec tej sekwencja; ich odpowiedzią na wszystkie inne znaki powinno być L .

Przykłady

Wejście 2 1 A A X X Y A X
Wyjście Ł Ł Ł Ł R Ł Ł Ł R
Wejście 1 2 A B X Y A C Z
Wyjście Ł Ł Ł Ł Ł R Ł Ł Ł

Wymagania dla algorytmów

niezależnie zapamiętać zarówno ostatnią cyfrę 1 lub 2 , jak i ostatnią literę A lub B. Nazywamy tę pamięć pamięcią roboczą . Ta pamięć musi utrzymywać wszystkie inne dane wejściowe. Ponadto algorytm musi być w stanie usunąć i zignorować litery C i Z.

Rozwiązania

Pseudo kod

W przypadku tradycyjnych modeli komputerów oba wymagania są łatwe do spełnienia. Oto Pythona (rodzaj pseudokodu , ale działa), w którym funkcja next_output pobiera jedną cyfrę/literę jako dane wejściowe i zwraca albo literę, albo nic. next_outputs służy wygodzie obsługi całej sekwencji.

  
  

      
    










      
        
          
          
         
        
          
         
        
              
          
            
             
         
     

    
    










          last_num  =  ""  last_letter  =  ""  def  next_output  (  next_input  :  str  )  ->  str  |  Brak  :  """  Argumenty:  next_input: Ciąg zawierający pojedynczy znak.  Zwraca:  Ciąg zawierający litery "L", "R" lub None.  Przykład:  >>> next_output("2")  'L'  """  global  last_num  ,  last_letter  if  next_input  in  [  "1"  ,  "2"  ]:  last_num  =  next_input  last_letter  =  ""  return  "L"  elif  next_input  in  [  "A"  ,  "B"  ]:  last_letter  =  next_input  return  "L"  elif  next_input  in  [  "X"  ,  "Y"  ]:  seq  =  last_num  +  last_letter  +  next_input  last_letter  =  next_input  if  seq  in  [  "1AX"  ,  "2BY"  ]:  return  "R"  return  "L"  return  Brak  def  next_outputs  (  next_inputs  :  str  )  ->  list  [  str  ]:  """  Argumenty:  next_input: Ciąg.  Zwraca:  Lista ciągów zawierających litery "L" lub "R".  Przykład:  >>> next_outputs("21AAXBYAX")  ["L" , "L", "L", "L", "R", "L", "L", "L", "R"] ""  "  return  [  następne_wyjście  (  c  )  dla  c  w  następnych_wejściach  ] 

Przykład:




 >>>  next_outputs  (  "21AAXBYAX"  )  ['L', 'L', 'L', 'L', 'R', 'L', 'L', 'L', 'R']  >>>  next_outputs  (  "12CBZY"  )  ['L', 'L', Brak, 'L', Brak, 'R'] 

Maszyna o skończonych stanach

Podobnie zadanie to może być rozwiązane w prosty sposób przez maszynę skończoną z 7 stanami (nazwijmy je --- , 1-- , 2-- , 1A- , 2B- , 1AX , 2BY ).

Sieć neuronowa

To zadanie jest znacznie trudniejsze dla sieci neuronowych . W przypadku prostych sieci neuronowych typu feedforward zadanie to nie jest możliwe do rozwiązania, ponieważ sieci typu feedforward nie mają żadnej pamięci roboczej. W końcu włączenie pamięci roboczej do sieci neuronowych jest trudnym zadaniem. Było kilka podejść, takich jak PBWM lub długa pamięć krótkotrwała , które mają pamięć roboczą. To zadanie 1-2-AX jest dobrym zadaniem dla tych modeli i oba są w stanie je rozwiązać.