source: src/main/java/agents/anac/y2019/agentlarry/VectorConverter.java

Last change on this file was 201, checked in by Katsuhide Fujita, 5 years ago

Add ANAC 2019 agents (2)

  • Property svn:executable set to *
File size: 3.0 KB
Line 
1package agents.anac.y2019.agentlarry;
2
3import genius.core.Bid;
4import genius.core.Domain;
5import genius.core.issue.*;
6
7import java.util.List;
8
9public class VectorConverter {
10 /**
11 * Convert a bid to vector
12 *
13 * First add to vector a value of one (bias)
14 *
15 * Then for each issue of the bid if its an integer change it to range between 0 to 1 and add it to the vector
16 * if it is discrete for each possible value add a value to the vector -
17 * 0 if the issue is not the value and 1 if it is the value
18 * For example discrete issue of color with possible value blue, green and yellow and the real value is green
19 * we will add to the vector [0,1,0]
20 *
21 * @param bid The bid to convert
22 * @return The vector from the bid
23 */
24 public Vector convert(Bid bid) {
25 List<Issue> issues = bid.getIssues();
26 Vector vector = new Vector();
27 vector.add(1.0);
28 for (Issue issue : issues) {
29 if (issue instanceof IssueInteger) {
30 vector.add(this.convertInteger((IssueInteger) issue, bid));
31 } else {
32 vector.addAll(this.convertDiscrete((IssueDiscrete) issue, bid));
33 }
34 }
35
36 return vector;
37 }
38
39 /**
40 * @param domain The domain of the negotiation
41 * @return The size of the vector
42 */
43 public int getVectorSize(Domain domain) {
44 int vectorSize = 1;
45 for (Issue issue : domain.getIssues()) {
46 if (issue instanceof IssueInteger) {
47 vectorSize++;
48 } else {
49 IssueDiscrete issueDiscrete = (IssueDiscrete) issue;
50 vectorSize += issueDiscrete.getNumberOfValues();
51 }
52 }
53 return vectorSize;
54 }
55
56 /**
57 * @param value The value to normalize
58 * @param upperBound The upper bound of the value
59 * @param lowerBound The lower bound of the value
60 * @return The value between 0 to 1
61 */
62 private double normalize(int value, int upperBound, int lowerBound) {
63 return (double)(value - lowerBound) / (double)(upperBound - lowerBound);
64 }
65
66 /**
67 * @param issue The issue to convert
68 * @param bid The bid of the issue
69 * @return The converted integer
70 */
71 private double convertInteger(IssueInteger issue, Bid bid) {
72 ValueInteger valueInteger = (ValueInteger) bid.getValue(issue.getNumber());
73 return this.normalize(valueInteger.getValue(), issue.getUpperBound(),
74 issue.getLowerBound());
75 }
76
77 /**
78 * @param issueDiscrete The issue to convert
79 * @param bid The bid of the issue
80 * @return The converted discrete
81 */
82 private Vector convertDiscrete(IssueDiscrete issueDiscrete, Bid bid) {
83 Vector vector = new Vector();
84 for (ValueDiscrete valueDiscrete : issueDiscrete.getValues()) {
85 if (bid.getValue(issueDiscrete.getNumber()).equals(valueDiscrete)) {
86 vector.add(1.0);
87 }
88 else {
89 vector.add(0.0);
90 }
91 }
92 return vector;
93 }
94}
Note: See TracBrowser for help on using the repository browser.