StateDimensionEstimation currentEstimatedBaseStateDimension,
    private VariantEvaluation createCompensatoryVariantEvaluation(ActionDescription thisVariantDescription,                                                                  ActionEvaluation thisActionEvaluation,                                                                  AssetStateDimension baseStateDimension,                                                                   StateDimensionEstimation currentEstimatedBaseStateDimension,                                                                   AssetStateDimension compensatedStateDimension,                                                                  double benefitOfStayingTheSame,                                                                  CostBenefitKnob knob) {        double predictedCost = 0.0;        double predictedBenefit = 0.0;        long maxTransitionTime = thisVariantDescription.getTransitionForState("*").getOneTimeCost().getTimeCost();        Iterator baseStateIterator = baseStateDimension.getPossibleStates().iterator();        Vector cumulativeProbVector = new Vector();            cumulativeProbVector.add(new StateProb("Excellent", 0.0));            cumulativeProbVector.add(new StateProb("Good", 0.0));            cumulativeProbVector.add(new StateProb("Fair", 0.0));            cumulativeProbVector.add(new StateProb("Poor", 0.0));            cumulativeProbVector.add(new StateProb("None", 0.0));        while (baseStateIterator.hasNext()) {            String startStateName = ((AssetState)baseStateIterator.next()).getName();            double startStateProb = 0.0;            try {               startStateProb = currentEstimatedBaseStateDimension.getProbability(startStateName);            }            catch (BelievabilityException e) {                logger.error(e.toString());            }            Vector v = mapCompensation(startStateName, thisVariantDescription.name());            if (logger.isDebugEnabled()) logger.debug(thisVariantDescription.name() +" for " + startStateName + "----"+v.toString());            accumulateProbs(cumulativeProbVector, v, startStateProb);        }        if (logger.isDebugEnabled()) logger.debug("Cumulative Compensated Prob Vector: " + cumulativeProbVector.toString());        predictedBenefit = knob.horizon * computeBenefit(cumulativeProbVector, compensatedStateDimension, knob) - benefitOfStayingTheSame;        return new VariantEvaluation(thisVariantDescription, thisActionEvaluation, predictedCost, predictedCost/knob.getHorizon(), predictedBenefit, maxTransitionTime);    }