public static void setAverageScoreMap(ValueChart chart){
        LinkedHashMap<String,IndividualEntryMap> listOfEntryMaps = chart.listOfEntryMaps;
        LinkedHashMap<String,HashMap<String,Double>> listOfWeightMaps = chart.listOfWeightMaps;
        HashMap<String,Double> maxWeightMap = chart.maxWeightMap;
        // for each criteria, for each alternative
        HashMap<String, HashMap<String, Double>> averageAttributeScores = new HashMap<String, HashMap<String, Double>>();
        
        // for each user
        for (Map.Entry<String, IndividualEntryMap> iem : listOfEntryMaps.entrySet()) {
            
            // for each alternative
            for (Map.Entry<String, ChartEntry> entry : iem.getValue().getEntryMap().entrySet()) {
                
                // for each criteria
                for (Map.Entry<String, AttributeValue> attrVal : entry.getValue().map.entrySet()) {
                    
                    // get criteria 
                    String critkey = attrVal.getKey();
                    HashMap<String, Double> means = averageAttributeScores.get(critkey);
                    if (means == null) {
                        means = new HashMap<String, Double>();
                        averageAttributeScores.put(critkey, means);
                    } 
                    
                    // get alternative
                    String attrkey = entry.getKey();
                    
                    // get the weight
                    double val = attrVal.getValue().weight();
                    // scale it relative to the maximum assigned weight
                    double scale = listOfWeightMaps.get(iem.getKey()).get(critkey);
                    scale /= maxWeightMap.get(critkey);
                    val *= scale;
                    
                    Double mean = means.get(attrkey);
                    if (mean == null) {
                        means.put(attrkey, val);
                    } else {
                        means.put(attrkey, mean + val);
                    }
                }
            }
        }
        
        // for each criteria
        for (Map.Entry<String, HashMap<String, Double>> meansMap : averageAttributeScores.entrySet()) {
            // for alternative
            for (Map.Entry<String, Double> means : meansMap.getValue().entrySet()) {
                double mean = means.getValue() / listOfEntryMaps.size();
                means.setValue(mean);
            }
        }
        
        chart.averageAttributeScores = averageAttributeScores;
    }