source: src/main/java/boa/components/Top3Agent/OfferingStrat_Top3.java@ 316

Last change on this file since 316 was 232, checked in by Adel Magra, 5 years ago

Created a User class that implements an elicit functionality.

Created a Top_3 Agent with the BOA framework to showcase this functionality.

File size: 1.7 KB
Line 
1package boa.components.Top3Agent;
2
3
4import java.util.List;
5import java.util.Random;
6
7import genius.core.Bid;
8import genius.core.bidding.BidDetails;
9import genius.core.boaframework.OfferingStrategy;
10import genius.core.uncertainty.UserModel;
11
12/**
13 * Offering Strategy of Top 3 Agent which
14 * UNDER UNCERTAINTY: Offers one of the 3 best bids in the user model at random.
15 * OTHERWISE: Offers the best bid in the domain.
16 * @author Adel Magra
17*/
18
19public class OfferingStrat_Top3 extends OfferingStrategy{
20
21 public BidDetails determineOpeningBid(){
22 return determineNextBid();
23 }
24
25 /**
26 * Finds the best three bid and offers one at random. If it doesn't find them, it offers a random bid.
27 * @return the next bid to offer
28 */
29 public BidDetails determineNextBid() {
30
31 /**
32 * Uncertainty case
33 */
34 UserModel userModel = negotiationSession.getUserModel();
35 if (userModel != null) {
36 List<Bid> bidOrder = userModel.getBidRanking().getBidOrder();
37
38 //In case ranking <= 3, the min bid is in top 3 and we clearly don't want to offer it.
39 //So we just offer the best bid.
40 if(bidOrder.size()<=3)
41 return new BidDetails(userModel.getBidRanking().getMaximalBid(),userModel.getBidRanking().getHighUtility());
42
43 Bid[] best3 = {bidOrder.get(bidOrder.size()-1),bidOrder.get(bidOrder.size()-2),bidOrder.get(bidOrder.size()-3)};
44 Random generator = new Random();
45 int randomIndex = generator.nextInt(best3.length);
46 double scaleFactor = (bidOrder.size()-randomIndex)/bidOrder.size();
47 return new BidDetails(best3[randomIndex],userModel.getBidRanking().getHighUtility()*scaleFactor);
48 }
49
50 /**
51 * Normal utility case.
52 */
53 return negotiationSession.getMaxBidinDomain();
54 }
55
56 public String getName() {
57 return "O_S Top3";
58 }
59
60
61
62}
Note: See TracBrowser for help on using the repository browser.