/** initialization */
  public void initializeDataStructures(Domain domain) {
    try {
      ArrayList<Issue> issues = domain.getIssues();
      for (Issue lIssue : issues) {
        switch (lIssue.getType()) {
          case DISCRETE:
            IssueDiscrete lIssueDiscrete = (IssueDiscrete) lIssue;
            HashMap<Value, Integer> discreteIssueValuesMap = new HashMap<Value, Integer>();
            for (int j = 0; j < lIssueDiscrete.getNumberOfValues(); j++) {
              Value v = lIssueDiscrete.getValue(j);
              discreteIssueValuesMap.put(v, 0);
            }
            opponentBidsStatisticsDiscrete.add(discreteIssueValuesMap);
            break;

          case REAL:
            IssueReal lIssueReal = (IssueReal) lIssue;
            ArrayList<Integer> numProposalsPerValue = new ArrayList<Integer>();
            int lNumOfPossibleValuesInThisIssue = lIssueReal.getNumberOfDiscretizationSteps();
            for (int i = 0; i < lNumOfPossibleValuesInThisIssue; i++) {
              numProposalsPerValue.add(0);
            }
            opponentBidsStatisticsForReal.add(numProposalsPerValue);
            break;

          case INTEGER:
            IssueInteger lIssueInteger = (IssueInteger) lIssue;
            ArrayList<Integer> numOfValueProposals = new ArrayList<Integer>();

            // number of possible value when issue is integer (we should add 1 in order to include
            // all values)
            int lNumOfPossibleValuesForThisIssue =
                lIssueInteger.getUpperBound() - lIssueInteger.getLowerBound() + 1;
            for (int i = 0; i < lNumOfPossibleValuesForThisIssue; i++) {
              numOfValueProposals.add(0);
            }
            opponentBidsStatisticsForInteger.add(numOfValueProposals);
            break;
        }
      }
    } catch (Exception e) {
      System.out.println("EXCEPTION in initializeDataAtructures");
    }
  }