private void refreshMonLocsAtRiskRand() {
		double base = 0.05;
		TreeMap<Integer,Integer> atRiskLocs = new TreeMap<Integer,Integer>();
		Iterator<Integer> atRiskPeople = this.mySim.getAtRiskPeople().iterator();
		Iterator<Integer> implocs = this.trackLocations.keySet().iterator();
		while (implocs.hasNext()) {
			atRiskLocs.put(implocs.next(), new Integer(0));
		}
		while (atRiskPeople.hasNext()) {
			Integer person = atRiskPeople.next();
			Iterator<Integer> locs = this.mySim.locsVisited.get(person).iterator();
			while (locs.hasNext()) {
				Integer loc = locs.next();
				if (this.trackLocations.containsKey(loc));
					EpiSimUtil.incMapValue(atRiskLocs, loc, -1);
			}
		}
		double[] weights = new double[this.trackLocsByIndex.length];
		for (int i=0; i < this.trackLocsByIndex.length; i++) {
			weights[i] = atRiskLocs.get(this.trackLocsByIndex[i]).doubleValue();
		}
		weights = EpiSimUtil.normalize(weights);
		for (int i=0; i < weights.length; i ++) {
			weights[i] = base + (1 - base)*weights[i];
		}
		this.trackLocsWeight = weights;
		monitoredLocs = new HashSet<Integer>(this.numMonitors);
		
		WeightedRandPerm perm = new WeightedRandPerm(rand, this.trackLocsWeight);
		perm.reset(this.trackLocsWeight.length);
		for (int i = 0; perm.hasNext() && i < this.numMonitors;) {
			int index = perm.next();
			if (!this.isClosed(trackLocsByIndex[index], this.mySim.curTime)) {
				monitoredLocs.add(trackLocsByIndex[index]);
				i++;
			}
		}
	}