source: CSE3210/agent58/opponentmodels/OpponentModel.py

Last change on this file was 74, checked in by wouter, 21 months ago

#6 Added CSE3210 parties

File size: 1.9 KB
Line 
1from ..Constants import Constants
2
3
4class OpponentModel:
5 def __init__(self, domain):
6 self._domain = domain
7 self._freqs = {}
8 for issue in self._domain.getIssues():
9 self._freqs[issue] = {}
10
11 # Update value frequency for new incoming bid
12 def update_frequencies(self, bid):
13 if bid is not None:
14 for issue in self._domain.getIssues():
15 value = bid.getValue(issue)
16 if value in self._freqs[issue]:
17 self._freqs[issue][value] += 1
18 else:
19 self._freqs[issue][value] = 1
20
21 # returns normalized weights depending on importance of the issues
22 # along with the largest value freq for each issue
23 def _issue_weights(self):
24 # For each issue we find the highest frequency
25 max_freqs = {}
26 max_f = 0
27 for issue in self._domain.getIssues():
28 max_freqs[issue] = 0
29 for value in self._freqs[issue]:
30 if max_freqs[issue] < self._freqs[issue][value]:
31 max_freqs[issue] = self._freqs[issue][value]
32 if max_f < max_freqs[issue]:
33 max_f = max_freqs[issue]
34 weights = {}
35 # normalize weights
36 for issue in self._domain.getIssues():
37 weights[issue] = max_freqs[issue] / max_f if max_f != 0 else 0
38 return weights, max_freqs
39
40 # returns the utility of our bid to opponent
41 def utility(self, bid):
42 u = 0
43 weights, max_freqs = self._issue_weights()
44 # utility is the sum of normalized value freq * issue weight
45 for issue in self._domain.getIssues():
46 value = bid.getValue(issue)
47 if value in self._freqs[issue]:
48 u += (self._freqs[issue][bid.getValue(issue)] / max_freqs[issue]) * weights[issue]
49
50 u /= len(self._domain.getIssues())
51
52 return u * Constants.opponent_model_offset
Note: See TracBrowser for help on using the repository browser.