logDetail( "Action transition matrix: "
if ( _logger.isDetailEnabled() ) _logger.detail( "Action transition matrix: "
    void updateBeliefStateActionTrans( BeliefStateDimension prev_belief,                                       BelievabilityAction action,                                       BeliefStateDimension next_belief )            throws BelievabilityException    {        if (( prev_belief == null )            || ( action == null )            || ( next_belief == null ))            throw new BelievabilityException                    ( "updateBeliefStateActionTrans()",                      "NULL parameter(s) sent in." );        // If the action does not pertain to this state dimension        // (shouldn't happen), then we assume the state remains        // unchanged (identiy matrix).  Note that we copy the        // probability values from prev_belief to next_belief, even        // though the next_belief likely starts out as a clone of the        // prev_belief.  We do this because we were afraid of assuming        // it starts out as a clone, as this would make this more        // tightly coupled with the specific implmentation that calls        // this method. Only if this becomes a performance problem        // should this be revisited.        //         double[] prev_belief_prob = prev_belief.getProbabilityArray();        double[] next_belief_prob = new double[prev_belief_prob.length];        // The action transition matrix will model how the asset state        // change will happen when the action is taken..        //        double[][] action_trans                = _asset_dim_model.getActionTransitionMatrix( action );        logDetail( "Action transition matrix: "                   + _asset_dim_model.getStateDimensionName() + "\n"                   + ProbabilityUtils.arrayToString( action_trans ));        // We check this, but it really should never be null.        //        if ( action_trans == null )            throw new BelievabilityException                    ( "updateBeliefStateActionTrans()",                      "Could not find action transition matrix for: "                      + prev_belief.getAssetID().getName() );                // Start the probability calculation        //        for ( int cur_state = 0;               cur_state < prev_belief_prob.length;               cur_state++ )         {                        for ( int next_state = 0;                   next_state < prev_belief_prob.length;                   next_state++ )             {                next_belief_prob[next_state]                         += prev_belief_prob[cur_state]                          * action_trans[cur_state][next_state];                            } // for next_state        }  // for cur_state        // We do this before the sanity check, but maybe this isn't        // the right thing to do. For now, it allows me to more easily        // convert it to a string in the case where there is a        // problem.         //        next_belief.setProbabilityArray( next_belief_prob );        // Add a sanity check to prevent bogus belief from being        // propogated to other computations.         //        double sum = 0.0;        for ( int i = 0; i < next_belief_prob.length; i++ )            sum += next_belief_prob[i];        if( ! Precision.isZeroComputation( 1.0 - sum ))            throw new BelievabilityException                    ( "updateBeliefStateActionTrans()",                      "Resulting belief doesn't sum to 1.0 : "                      + next_belief.toString() );    } // method updateBeliefStateActionTrans