source: CSE3210/agent52/FreqModelWeighted.py

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

#6 Added CSE3210 parties

File size: 2.0 KB
Line 
1from geniusweb.opponentmodel import FrequencyOpponentModel
2from decimal import Decimal
3from geniusweb.issuevalue.Domain import Domain
4from geniusweb.issuevalue.Bid import Bid
5from typing import Dict, Optional
6from geniusweb.issuevalue.Value import Value
7from geniusweb.utils import val
8import numpy as np
9
10
11class FreqModelWeighted(FrequencyOpponentModel.FrequencyOpponentModel):
12
13 def __init__(self, domain: Optional[Domain],
14 freqs: Dict[str, Dict[Value, int]], total: int,
15 resBid: Optional[Bid]):
16 super.__init__(domain, freqs, total, resBid)
17
18 # Override
19 def getUtility(self, bid: Bid) -> Decimal:
20 if self._domain == None:
21 raise ValueError("domain is not initialized")
22 if self._totalBids == 0:
23 return Decimal(1)
24 sum = Decimal(0)
25
26 for issue in val(self._domain).getIssues():
27 if issue in bid.getIssues():
28 sum = sum + Decimal(self._issueWeights[issue]) * self._getFraction(issue, val(bid.getValue(issue)))
29 return round(sum / len(self._bidFrequencies), FrequencyOpponentModel.FrequencyOpponentModel._DECIMALS)
30
31 """
32 Find issue weights by considering count of most occurring value in each domain and scaling their sum to be 1
33 """
34 def updateIssueWeights(self):
35 self._issueWeights = {}
36 totalWeights = 0.0
37 for issue in val(self._domain).getIssues():
38 freqs = []
39
40 for value, count in self._bidFrequencies.get(issue).items():
41 freqs.append(count)
42
43 if len(freqs) <= 1:
44 self._issueWeights[issue] = 1
45 else:
46 freqs = np.array(freqs) / self._totalBids
47 self._issueWeights[issue] = np.max(freqs)
48 totalWeights += self._issueWeights[issue]
49
50 for issue, weight in self._issueWeights.items():
51 self._issueWeights[issue] = weight / totalWeights
52
53 return self._issueWeights
54
Note: See TracBrowser for help on using the repository browser.