source: CSE3210/agent68/opponent/opponent.py

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

#6 Added CSE3210 parties

File size: 2.4 KB
Line 
1from geniusweb.issuevalue.Bid import Bid
2from geniusweb.issuevalue.Domain import Domain
3
4class Opponent:
5
6 def __init__(self):
7 self._domain: Domain = None
8 self._freqDict: dict = {}
9 self._allBids = []
10 self._lastBid: Bid = None
11 self._firstBid: Bid = None
12 self._changed_issues = set()
13 # self._currentBid: Bid = None
14
15 def init_domain(self, domain: Domain):
16 """
17 Initialize the domain.
18
19 :param domain: The domain.
20 """
21 self._domain = domain
22 initValue = 1 / len(self._domain.getIssues())
23 for issue in domain.getIssues():
24 self._freqDict[issue] = initValue
25
26 def log_bid(self, bid: Bid):
27 """
28 Main method of the opponent class
29 it handles logging the bids the opponent made
30 for learning purposes.
31
32 :param bid: The bid that the agent received.
33 """
34 if self._firstBid is None:
35 self._firstBid = bid
36 self._update_freq_dict(bid, 0.1)
37 self._allBids.append(bid)
38 self._lastBid = bid
39
40 def get_issue_weight(self, issue: str) -> float:
41 return self._freqDict[issue]
42
43 def get_value_weight(self, issue: str, value: str) -> float:
44 return 1 / len(self._domain.getValues(issue))
45
46 def get_utility(self, bid: Bid) -> float:
47 """
48 Given a bid return the predicted utility
49
50 :param bid: The bid to calculate utility value on.
51 """
52 pass
53
54 def _update_freq_dict(self, received_bid: Bid, step: float):
55 if self._lastBid is None or received_bid is None:
56 return
57
58 for issue in received_bid.getIssues():
59 # Might fail if we receive partial bid.
60 if issue not in self._changed_issues and received_bid.getValue(issue) == self._firstBid.getValue(issue):
61 self._freqDict[issue] += step
62 else:
63 self._changed_issues.add(issue)
64
65 print("=========")
66 print("Last bid: " + str(self._lastBid))
67 print("Curr bid: " + str(received_bid))
68 print("Before: " + str(self._freqDict))
69 self._freqDict = self.normalize(self._freqDict, 1)
70 print("After: " + str(self._freqDict))
71 print("=========")
72
73 def normalize(self, d: dict, target=1.0):
74 raw = sum(d.values())
75 factor = target / raw
76 # d.items()
77 return {key: value * factor for key, value in d.items()}
78
Note: See TracBrowser for help on using the repository browser.