// based on:
  // playground.wrashid.parkingSearch.withindayFW.controllers.kti.HUPCControllerKTIzh.getHouseHoldIncomeCantonZH
  public static DoubleValueHashMap<Id> getHouseHoldIncomeCantonZH(Population population) {
    DoubleValueHashMap<Id> houseHoldIncome = new DoubleValueHashMap<Id>();

    for (Id<Person> personId : population.getPersons().keySet()) {
      double rand = MatsimRandom.getRandom().nextDouble();
      if (rand < 0.032) {
        houseHoldIncome.put(personId, 1000 + MatsimRandom.getRandom().nextDouble() * 1000);
      } else if (rand < 0.206) {
        houseHoldIncome.put(personId, 2000 + MatsimRandom.getRandom().nextDouble() * 2000);
      } else if (rand < 0.471) {
        houseHoldIncome.put(personId, 4000 + MatsimRandom.getRandom().nextDouble() * 2000);
      } else if (rand < 0.674) {
        houseHoldIncome.put(personId, 6000 + MatsimRandom.getRandom().nextDouble() * 2000);
      } else if (rand < 0.803) {
        houseHoldIncome.put(personId, 8000 + MatsimRandom.getRandom().nextDouble() * 2000);
      } else if (rand < 0.885) {
        houseHoldIncome.put(personId, 10000 + MatsimRandom.getRandom().nextDouble() * 2000);
      } else if (rand < 0.927) {
        houseHoldIncome.put(personId, 12000 + MatsimRandom.getRandom().nextDouble() * 2000);
      } else if (rand < 0.952) {
        houseHoldIncome.put(personId, 14000 + MatsimRandom.getRandom().nextDouble() * 2000);
      } else {
        houseHoldIncome.put(personId, 16000 + MatsimRandom.getRandom().nextDouble() * 16000);
      }
    }

    return houseHoldIncome;
  }