source: src/main/java/agents/anac/y2015/pokerface/OpponentBidLists.java

Last change on this file was 127, checked in by Wouter Pasman, 6 years ago

#41 ROLL BACK of rev.126 . So this version is equal to rev. 125

File size: 4.9 KB
Line 
1package agents.anac.y2015.pokerface;
2
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.Comparator;
6import java.util.HashMap;
7import java.util.List;
8import java.util.Map;
9import java.util.Map.Entry;
10
11import genius.core.Bid;
12import genius.core.issue.Issue;
13import genius.core.issue.Value;
14import genius.core.utility.AdditiveUtilitySpace;
15import genius.core.utility.Evaluator;
16
17import java.util.Set;
18import java.util.TreeMap;
19import java.util.TreeSet;
20
21public class OpponentBidLists {
22
23 private List<Object> senders;
24 // map: Sender -> ("<issue_id,issue_value>" -> count)
25 private Map<Object, Map<Pair<Integer, Value>, Integer>> map;
26 private boolean single_list;
27 private AdditiveUtilitySpace utilitySpace;
28
29 public OpponentBidLists(AdditiveUtilitySpace utilitySpace, boolean single_list) {
30 senders = new ArrayList<Object>();
31 map = new HashMap<Object, Map<Pair<Integer, Value>, Integer>>();
32 this.single_list = single_list;
33 this.utilitySpace = utilitySpace;
34 if (single_list) {
35 Map<Pair<Integer, Value>, Integer> bid_list = new TreeMap<Pair<Integer, Value>, Integer>(
36 new MapComparator());
37 map.put(this, bid_list);
38 }
39 }
40
41 private boolean hasSender(Object sender) {
42 return (senders.indexOf(sender) != -1);
43 }
44
45 private void addSender(Object sender) {
46 if (!single_list) {
47 Map<Pair<Integer, Value>, Integer> bid_list = new TreeMap<Pair<Integer, Value>, Integer>(
48 new MapComparator());
49 map.put(sender, bid_list);
50 }
51 senders.add(sender);
52 }
53
54 public List<Object> getSenders() {
55 return senders;
56 }
57
58 public void insertBid(Object sender, Bid bid) {
59 if (!hasSender(sender)) {
60 addSender(sender);
61 }
62 Map<Pair<Integer, Value>, Integer> issue_value_counts;
63 if (single_list) {
64 issue_value_counts = map.get(this);
65 } else {
66 issue_value_counts = map.get(sender);
67 }
68
69 List<Issue> issues = bid.getIssues();
70 Map<Integer, Value> values = bid.getValues();
71
72 for (int j = 0; j < values.size(); j++) {
73 Integer issue_id = issues.get(j).getNumber();
74 Value value_id = values.get(j + 1);
75 Pair<Integer, Value> pair = new Pair<Integer, Value>(issue_id,
76 value_id);
77 Integer current_count = issue_value_counts.get(pair);
78 if (current_count == null)
79 issue_value_counts.put(pair, 1);
80 else
81 issue_value_counts.put(pair, current_count++);
82 }
83 }
84
85 public Map<Pair<Integer, Value>, Integer> getBids(Object sender) {
86 if (single_list) {
87 return map.get(this);
88 } else {
89 return map.get(sender);
90 }
91 }
92
93 public List<Entry<Pair<Integer, Value>, Integer>> getMostFrequentIssueValues(
94 Object sender) {
95 Map<Pair<Integer, Value>, Integer> issue_value_counts = map.get(sender);
96 if (sender == null || map.get(sender) == null)
97 return new ArrayList<Entry<Pair<Integer, Value>, Integer>>(0);
98 Set<Entry<Pair<Integer, Value>, Integer>> pull_through = new TreeSet<Entry<Pair<Integer, Value>, Integer>>(
99 new Comparator<Entry<Pair<Integer, Value>, Integer>>() {
100 public int compare(Entry<Pair<Integer, Value>, Integer> e1,
101 Entry<Pair<Integer, Value>, Integer> e2) {
102 return e1.getValue().compareTo(e2.getValue());
103 }
104 });
105 pull_through.addAll(issue_value_counts.entrySet());
106 return new ArrayList<Entry<Pair<Integer, Value>, Integer>>(pull_through);
107 }
108
109 public List<Entry<Pair<Integer, Value>, Double>> weightIssueValues(
110 List<Entry<Pair<Integer, Value>, Integer>> sorted_list) {
111 Map<Pair<Integer, Value>, Double> map = new HashMap<Pair<Integer, Value>, Double>();
112 for (Entry<Pair<Integer, Value>, Integer> entry : sorted_list) {
113 double value = (double) entry.getValue();
114 int issue_id = entry.getKey().getInteger();
115 Evaluator evaluator = utilitySpace.getEvaluator(issue_id);
116 double weight = evaluator.getWeight();
117 double evaluation;
118 try {
119 Bid temp = utilitySpace.getMaxUtilityBid();
120 temp = temp.putValue(issue_id, entry.getKey().getValue());
121 evaluation = evaluator.getEvaluation(utilitySpace, temp,
122 issue_id);
123 } catch (Exception e) {
124 evaluation = 1.0;
125 }
126 map.put(entry.getKey(), value * weight * evaluation);
127 }
128 List<Entry<Pair<Integer, Value>, Double>> weighted_list = new ArrayList<Entry<Pair<Integer, Value>, Double>>(
129 ((Map<Pair<Integer, Value>, Double>) map).entrySet());
130 Collections.sort(weighted_list,
131 new Comparator<Entry<Pair<Integer, Value>, Double>>() {
132 public int compare(Entry<Pair<Integer, Value>, Double> o1,
133 Entry<Pair<Integer, Value>, Double> o2) {
134 return o1.getValue().compareTo(o2.getValue());
135 }
136 });
137 return weighted_list;
138 }
139
140 private class MapComparator implements Comparator<Pair<Integer, Value>> {
141 public MapComparator() {
142 }
143
144 public int compare(Pair<Integer, Value> p1, Pair<Integer, Value> p2) {
145 return (p1.getInteger() + p1.getValue().toString()).compareTo(p2
146 .getInteger() + p2.getValue().toString());
147 }
148 }
149}
Note: See TracBrowser for help on using the repository browser.