def __init__(self, learningArgs, motionModelArgs):
     lr = learningArgs[0]
     lrDecay_stepSize = learningArgs[1]
     lrDecay_gamma = learningArgs[2]
     weight_decay = learningArgs[3]
     self.device = 'cuda:0' if torch.cuda.is_available() else 'cpu'
     self.MotionModel = probabilisticMotionModel(motionModelArgs).to(
         self.device)
     self.optimizer = Adam(self.MotionModel.parameters(),
                           lr=lr,
                           weight_decay=weight_decay)
     self.lrScheduler = torch.optim.lr_scheduler.StepLR(
         self.optimizer, step_size=lrDecay_stepSize, gamma=lrDecay_gamma)
     self.criterion = torch.nn.MSELoss()
        torch.tensor(startState[3]).unsqueeze(0).to(device))
    predSequentialX = [startState[3][0]]
    predSequentialY = [startState[3][1]]
if evalProbabilistic:
    numParticles = 10
    inStateDim = len(startState[0][0]) + 1
    inActionDim = len(startState[0][2])
    inMapDim = startState[0][1].shape[1]
    outStateDim = len(startState[1][0])
    argDim = [inStateDim, inMapDim, inActionDim, outStateDim]
    convSizes = [[32, 5], [32, 4], [32, 3]]
    fcSizes = [1024, 512, 256]  #,128]
    networkSizes = [convSizes, fcSizes]
    dropout_ps = [0, 0, 0]
    motionModelArgs = [argDim, networkSizes, dropout_ps]
    motionModelProb = probabilisticMotionModel(motionModelArgs).to(device)
    motionModelProb.load_state_dict(
        torch.load('motionModels/sequentialProbailistic.pt'))
    motionModelProb.eval()
    cliffordStatePredProb = cliffordStateTransformation(
        torch.tensor(startState[3]).unsqueeze(0).to(device),
        numParticles=numParticles)
    predProbabilisticX = [[startState[3][0]] for i in range(numParticles)]
    predProbabilisticY = [[startState[3][1]] for i in range(numParticles)]
if evalLSTM:
    inStateDim = 9
    inActionDim = len(startState[0][2])
    inMapDim = startState[0][1].shape[1]
    outStateDim = 13
    argDim = [inStateDim, inMapDim, inActionDim, outStateDim]
    convSizes = [[32, 5], [32, 4], [32, 3]]