package geniusweb.exampleparties.simpleshaop; import java.util.HashMap; import java.util.Map.Entry; import geniusweb.issuevalue.Bid; import geniusweb.issuevalue.Domain; import geniusweb.issuevalue.Value; public class USpace { // نگه داری وزن های ایشیوها private HashMap weights = new HashMap(); private HashMap> evals = new HashMap>(); private Domain domain; public USpace(Domain domain) { this.domain = domain; intitialize(); } private void intitialize() { double w = 1.0/this.domain.getIssues().size(); for ( String issue : this.domain.getIssues() ) { weights.put(issue, w); HashMap hm = new HashMap();; for ( Value val : this.domain.getValues(issue) ) { hm.put(val, 1.0); } evals.put(issue, hm); } } public Domain getDomain() { return domain; } public void setWeight(String issue, double w) { weights.replace(issue, w); } public void setEval(String issue, Value val, double eval) { //System.err.println( issue + ", "+ val +", "+eval ); HashMap hm = new HashMap(); hm.put(val, eval); for ( Value value : domain.getValues(issue) ) if( !value.equals(val) ) hm.put(value, evals.get(issue).get(value)); evals.replace( issue, hm ); } public HashMap getWeights() { return weights; } public HashMap> getEvals() { return evals; } public Double getWeight(String iss) { return weights.get(iss); } public HashMap getValues(String issue) { return evals.get(issue); } public double getValue(String issue, Value val) { return evals.get(issue).get(val); } public double getUtility(Bid bid) { HashMap maxValOfIssue = new HashMap(); for (String issue : domain.getIssues()) for ( Value val : domain.getValues(issue) ) maxValOfIssue.put(issue, 0.0); // پیدا کردن ماکزیمم ولیو برای هر ایشیو for (String issue : domain.getIssues()) for ( Value val : domain.getValues(issue) ) if ( getValue(issue, val) > maxValOfIssue.get(issue) ) maxValOfIssue.replace(issue, getValue(issue, val)); // نرمالایز کردن HashMap> evalsTemp = new HashMap>(); for ( String issue : getEvals().keySet() ) { HashMap valTemp = new HashMap(); for ( Value val : getValues(issue).keySet() ) { valTemp.put(val, (double)getValue(issue, val)/maxValOfIssue.get(issue) ); } evalsTemp.put(issue, valTemp); } double u = 0; for ( Entry e : bid.getIssueValues().entrySet() ) u += weights.get(e.getKey())*evalsTemp.get(e.getKey()).get(e.getValue()); return u; } public String toString() { String s = "["; for ( String w : weights.keySet() ) { s += w+ "=> W=" + weights.get(w)+"=>["; for ( Value val : evals.get(w).keySet() ) s += val.toString() + "=" + evals.get(w).get(val)+", "; } s += "]"; return s; } }