source: src/main/java/agents/anac/y2019/authenticagent/biddingstrategy/IQSonBiddingStrategy.java@ 203

Last change on this file since 203 was 201, checked in by Katsuhide Fujita, 6 years ago

Add ANAC 2019 agents (2)

  • Property svn:executable set to *
File size: 3.8 KB
Line 
1package agents.anac.y2019.authenticagent.biddingstrategy;
2
3import authenticagent.biddingstrategy.services.PTimeDependentService;
4import authenticagent.biddingstrategy.services.WooldridgeTimeDependentService;
5import authenticagent.serviceclasses.GenerateRankByHistoryService;
6import authenticagent.serviceclasses.SafeBidUtilityService;
7import genius.core.Bid;
8import genius.core.timeline.TimeLineInfo;
9import genius.core.utility.UtilitySpace;
10
11public class IQSonBiddingStrategy extends AbstractBiddingStrategy {
12
13 private double[] weightsIfHelpingUtilIsLessThanOrEqToOne;
14 private double[] weightsIfHelpingUtilIsMoreThanOne;
15 private WooldridgeTimeDependentService wooldridgeTimeDependentService;
16 private PTimeDependentService pTimeDependentService;
17
18 public IQSonBiddingStrategy(UtilitySpace us, TimeLineInfo ti) {
19 super(us, ti);
20 wooldridgeTimeDependentService = new WooldridgeTimeDependentService(utilitySpace, timeLineInfo);
21 pTimeDependentService = new PTimeDependentService(utilitySpace, timeLineInfo);
22 }
23
24 private double averageOfUtilities(){
25 Bid pTBid = pTimeDependentService.generateBid();
26 double pTUtility = SafeBidUtilityService.getUtility(pTBid);
27 double wooldridgeUtilityForABid = wooldridgeTimeDependentService.generateUtilityForABid();
28 double utilityByHistory = GenerateRankByHistoryService.generateUtilityForBidding();
29 return getAverageByCheckingPTUtility(pTUtility, wooldridgeUtilityForABid, utilityByHistory);
30 }
31
32 private double getAverageByCheckingPTUtility(double pTUtility, double wooldridgeUtilityForABid, double utilityByHistory) {
33 double[] values;
34 if(pTUtility < 1 || pTUtility > SafeBidUtilityService.getNumberOfPossibleBids()) {
35 values = new double[]{wooldridgeUtilityForABid, utilityByHistory};
36 return average(values, weightsIfHelpingUtilIsMoreThanOne);
37 }else {
38 values = new double[]{wooldridgeUtilityForABid, utilityByHistory, pTUtility};
39 return average(values, weightsIfHelpingUtilIsLessThanOrEqToOne);
40 }
41 }
42
43 @Override
44 public Bid getBid(){
45 if(weightsIfHelpingUtilIsLessThanOrEqToOne == null) // avoiding a bug in the framework -> utSpace and UModel are null initially
46 {
47 determineWeights();
48 }
49 double averageOfUtilities = averageOfUtilities();
50 return SafeBidUtilityService.getBidWithUtility(averageOfUtilities);
51 }
52
53 private double average(double[]values, double[]weights){
54 double average = 0;
55 double sumOfWeights = 0;
56 for(int i = 0; i < values.length; i++){
57 average += values[i] * weights[i];
58 sumOfWeights += weights[i];
59 }
60 return average / sumOfWeights;
61 }
62
63 private void determineWeights() {
64 double numberOfPossibleBids = SafeBidUtilityService.getNumberOfPossibleBids();
65 if(numberOfPossibleBids <= 1000){
66 weightsIfHelpingUtilIsLessThanOrEqToOne = new double[]{0.75, 0.05, 0.2};
67 weightsIfHelpingUtilIsMoreThanOne = new double[]{0.75, 0.25};
68 }else if(numberOfPossibleBids > 1000 && numberOfPossibleBids <= 2000){
69 weightsIfHelpingUtilIsLessThanOrEqToOne = new double[]{0.85, 0.05, 0.1};
70 weightsIfHelpingUtilIsMoreThanOne = new double[]{0.85, 0.15};
71 } else if(numberOfPossibleBids > 2000 && numberOfPossibleBids <= 100000) {
72 wooldridgeTimeDependentService.changeMinUtility(0.3);
73 weightsIfHelpingUtilIsLessThanOrEqToOne = new double[]{0.7, 0.05, 0.25};
74 weightsIfHelpingUtilIsMoreThanOne = new double[]{0.7, 0.3};
75 } else {
76 weightsIfHelpingUtilIsLessThanOrEqToOne = new double[]{0.85, 0.05, 0.1};
77 weightsIfHelpingUtilIsMoreThanOne = new double[]{0.85, 0.15};
78 }
79 }
80
81}
Note: See TracBrowser for help on using the repository browser.