public RandomVariable calculate_next_backward_message(
     RandomVariable forwardBelief, RandomVariable present_backward_message, String perception) {
   RandomVariable result = present_backward_message.duplicate();
   // System.out.println("fb :-calculating new backward message");
   // System.out.println("fb :-diagonal matrix from sens model = ");
   Matrix oMatrix = sensorModel.asMatrix(perception);
   // System.out.println(oMatrix);
   Matrix transitionMatrix = transitionModel.asMatrix(); // action
   // should
   // be
   // passed
   // in
   // here?
   // System.out.println("fb :-present backward message = "
   // +present_backward_message);
   Matrix backwardMatrix =
       transitionMatrix.times(oMatrix.times(present_backward_message.asMatrix()));
   Matrix resultMatrix = backwardMatrix.arrayTimes(forwardBelief.asMatrix());
   result.updateFrom(resultMatrix);
   result.normalize();
   // System.out.println("fb :-normalized new backward message = "
   // +result);
   return result;
 }