[1] | 1 | package agents.ai2014.group2;
|
---|
| 2 |
|
---|
| 3 | import java.util.ArrayList;
|
---|
| 4 | import java.util.LinkedList;
|
---|
| 5 | import java.util.Map.Entry;
|
---|
| 6 | import java.util.Set;
|
---|
| 7 |
|
---|
| 8 | class G2ParetoFinder
|
---|
| 9 | {
|
---|
| 10 | ArrayList<G2IssueSubSet> issueSubSets;
|
---|
| 11 | G2ParetoFinder(G2UtilitySpace ourUtilitySpace, ArrayList<G2UtilitySpace> OtherUtilitySpaces)
|
---|
| 12 | {
|
---|
| 13 | issueSubSets = new ArrayList<G2IssueSubSet>();
|
---|
| 14 | Set<Entry<String, G2Issue>> issues = ourUtilitySpace.getIssues();
|
---|
| 15 | for(Entry<String, G2Issue> issueInfo: issues)
|
---|
| 16 | {
|
---|
| 17 | String IssueName = issueInfo.getKey();
|
---|
| 18 | G2Issue issue = issueInfo.getValue();
|
---|
| 19 | LinkedList<G2SubBid> subBids = new LinkedList<G2SubBid>();
|
---|
| 20 |
|
---|
| 21 | Set<String> optionNames = issue.getOptionNames();
|
---|
| 22 | for(String optionName: optionNames)
|
---|
| 23 | {
|
---|
| 24 | ArrayList<Double> OtherUtilities = new ArrayList<Double>(OtherUtilitySpaces.size());
|
---|
| 25 | for(G2UtilitySpace utilitySpace: OtherUtilitySpaces)
|
---|
| 26 | {
|
---|
| 27 | OtherUtilities.add(utilitySpace.calculateOptionUtility(IssueName, optionName));
|
---|
| 28 | }
|
---|
| 29 | double ourUtility = ourUtilitySpace.calculateOptionUtility(IssueName, optionName);
|
---|
| 30 | subBids.add(new G2SubBid(optionName, ourUtility, OtherUtilities));
|
---|
| 31 | }
|
---|
| 32 | issueSubSets.add(new G2IssueSubSet(IssueName, subBids));
|
---|
| 33 | }
|
---|
| 34 | }
|
---|
| 35 |
|
---|
| 36 | private void trimMerge() {
|
---|
| 37 | for(G2IssueSubSet subSet: issueSubSets)
|
---|
| 38 | {
|
---|
| 39 | subSet.trimSubBids();
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 | ArrayList<G2IssueSubSet> newIssueSubSets = new ArrayList<G2IssueSubSet>();
|
---|
| 43 | int i=1;
|
---|
| 44 | while(i<issueSubSets.size())
|
---|
| 45 | {
|
---|
| 46 | newIssueSubSets.add(new G2IssueSubSet(issueSubSets.get(i-1), issueSubSets.get(i)));
|
---|
| 47 | i+=2;
|
---|
| 48 | }
|
---|
| 49 | if(i==issueSubSets.size())
|
---|
| 50 | {
|
---|
| 51 | newIssueSubSets.add(issueSubSets.get(i-1));
|
---|
| 52 | }
|
---|
| 53 | issueSubSets = newIssueSubSets;
|
---|
| 54 | }
|
---|
| 55 |
|
---|
| 56 | ArrayList<G2Bid> findParetoOptimalBids() {
|
---|
| 57 | while (issueSubSets.size()>1) {
|
---|
| 58 | trimMerge();
|
---|
| 59 | }
|
---|
| 60 | issueSubSets.get(0).trimSubBids();
|
---|
| 61 |
|
---|
| 62 | return issueSubSets.get(0).generateBids();
|
---|
| 63 | }
|
---|
| 64 | } |
---|