class_docstr: Fully-connected + LSTM state-input discrete Q-function.
  
  Args:
      n_dim_obs: number of dimensions of observation space
      n_dim_action: number of dimensions of action space
      n_hidden_channels: number of hidden channels before LSTM
      n_hidden_layers: number of hidden layers before LSTM
class_docstr_tok: ["Fully-connected","+","LSTM","state-input","discrete","Q-function",".","Args",":","n_dim_obs",":","number","of","dimensions","of","observation","space","n_dim_action",":","number","of","dimensions","of","action","space","n_hidden_channels",":","number","of","hidden","channels","before","LSTM","n_hidden_layers",":","number","of","hidden","layers","before","LSTM"]
code: def __call__(self, x):
      h = F.relu(self.fc(x))
      h = self.lstm(h)
      return DiscreteActionValue(self.out(h))
  
imports: import chainer
  from chainer import cuda
  from chainer import functions
  from chainer import links
  import numpy
  import chainerrl
  from chainerrl.action_value import DiscreteActionValue
  from chainerrl.action_value import DistributionalDiscreteActionValue
  from chainerrl.action_value import QuadraticActionValue
  from chainerrl.functions.lower_triangular_matrix import lower_triangular_matrix
  from chainerrl.links.mlp import MLP
  from chainerrl.links.mlp_bn import MLPBN
  from chainerrl.q_function import StateQFunction
  from chainerrl.recurrent import RecurrentChainMixin
label_desc: Use image node_id 2 for calling the FCLSTMStateQFunction obj's underlying member method code with example usage: obj.__call__(x) and returns: DiscreteActionValue