Ignore:
Timestamp:
09/22/20 08:52:04 (4 years ago)
Author:
bart
Message:

Version 1.5.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java

    r10 r21  
    55import java.util.Arrays;
    66import java.util.HashSet;
     7import java.util.List;
    78import java.util.Random;
    89import java.util.logging.Level;
     10import java.util.stream.Collectors;
    911
    1012import geniusweb.actions.Accept;
     
    1214import geniusweb.actions.Offer;
    1315import geniusweb.actions.PartyId;
     16import geniusweb.actions.Vote;
     17import geniusweb.actions.Votes;
    1418import geniusweb.bidspace.AllPartialBidsList;
     19import geniusweb.inform.ActionDone;
     20import geniusweb.inform.Finished;
     21import geniusweb.inform.Inform;
     22import geniusweb.inform.OptIn;
     23import geniusweb.inform.Settings;
     24import geniusweb.inform.Voting;
     25import geniusweb.inform.YourTurn;
    1526import geniusweb.issuevalue.Bid;
    1627import geniusweb.party.Capabilities;
    1728import geniusweb.party.DefaultParty;
    18 import geniusweb.party.inform.ActionDone;
    19 import geniusweb.party.inform.Finished;
    20 import geniusweb.party.inform.Inform;
    21 import geniusweb.party.inform.Settings;
    22 import geniusweb.party.inform.YourTurn;
    2329import geniusweb.profile.PartialOrdering;
    2430import geniusweb.profile.Profile;
     
    3339 * A simple party that places random bids and accepts when it receives an offer
    3440 * with sufficient utility.
     41 * <h2>voting</h2> If the party receives a parameter "minPower", it will
     42 * {@link Vote} using that minPower instead of the default value 2 if it
     43 * receives a {@link Voting} request.
    3544 */
    3645public class RandomParty extends DefaultParty {
     
    4150        protected ProfileInterface profileint;
    4251        private Progress progress;
     52        private Settings settings;
     53        private Votes lastvotes;
    4354
    4455        public RandomParty() {
     
    5869                                this.me = settings.getID();
    5970                                this.progress = settings.getProgress();
     71                                this.settings = settings;
    6072                        } else if (info instanceof ActionDone) {
    6173                                Action otheract = ((ActionDone) info).getAction();
     
    6476                                }
    6577                        } else if (info instanceof YourTurn) {
    66                                 myTurn();
    67                                 if (progress instanceof ProgressRounds) {
    68                                         progress = ((ProgressRounds) progress).advance();
    69                                 }
     78                                makeOffer();
     79                                nextRound();
    7080                        } else if (info instanceof Finished) {
    7181                                getReporter().log(Level.INFO, "Final ourcome:" + info);
     82                        } else if (info instanceof Voting) {
     83                                lastvotes = vote((Voting) info);
     84                                getConnection().send(lastvotes);
     85                                nextRound();
     86                        } else if (info instanceof OptIn) {
     87                                // just repeat our last vote.
     88                                getConnection().send(lastvotes);
     89                                nextRound();
    7290                        }
    7391                } catch (Exception e) {
     
    7694        }
    7795
     96        private void nextRound() {
     97                if (progress instanceof ProgressRounds) {
     98                        progress = ((ProgressRounds) progress).advance();
     99                }
     100
     101        }
     102
    78103        @Override
    79104        public Capabilities getCapabilities() {
    80                 return new Capabilities(new HashSet<>(Arrays.asList("SAOP")));
     105                return new Capabilities(
     106                                new HashSet<>(Arrays.asList("SAOP", "AMOP", "MOPAC")));
    81107        }
    82108
     
    86112        }
    87113
    88         private void myTurn() throws IOException {
     114        /**
     115         * send our next offer
     116         */
     117        private void makeOffer() throws IOException {
    89118                Action action;
    90                 if (isGood(lastReceivedBid)) {
     119                String protocol = settings.getProtocol().getURI().getPath();
     120                if ((protocol.equals("SAOP") || protocol.equals("SHAOP"))
     121                                && isGood(lastReceivedBid)) {
    91122                        action = new Accept(me, lastReceivedBid);
    92123                } else {
     
    105136        }
    106137
    107         private boolean isGood(Bid bid) throws IOException {
     138        /**
     139         * @param bid the bid to check
     140         * @return true iff bid is good for us.
     141         */
     142        private boolean isGood(Bid bid) {
    108143                if (bid == null)
    109144                        return false;
    110                 Profile profile = profileint.getProfile();
    111                 if (profile instanceof UtilitySpace) {
     145                Profile profile;
     146                try {
     147                        profile = profileint.getProfile();
     148                } catch (IOException e) {
     149                        throw new IllegalStateException(e);
     150                }
     151                if (profile instanceof UtilitySpace)
    112152                        return ((UtilitySpace) profile).getUtility(bid).doubleValue() > 0.6;
    113                 }
    114153                if (profile instanceof PartialOrdering) {
    115154                        return ((PartialOrdering) profile).isPreferredOrEqual(bid,
    116155                                        profile.getReservationBid());
    117156                }
    118                 throw new IllegalArgumentException(
    119                                 "Can not handle profile type " + profile.getClass());
     157                return false;
     158        }
     159
     160        /**
     161         * @param voting the {@link Voting} object containing the options
     162         *
     163         * @return our next Votes.
     164         */
     165        private Votes vote(Voting voting) throws IOException {
     166                Object val = settings.getParameters().get("minPowwer");
     167                Integer n = (val instanceof Integer) ? (Integer) val : 2;
     168                for (Bid bid : voting.getBids()) {
     169                        System.out.println("Bid " + bid + "="
     170                                        + ((UtilitySpace) profileint.getProfile()).getUtility(bid));
     171                }
     172                List<Vote> votes = voting.getBids().stream().distinct()
     173                                .filter(bid -> isGood(bid)).map(bid -> new Vote(me, bid, n))
     174                                .collect(Collectors.toList());
     175                return new Votes(me, votes);
    120176        }
    121177
Note: See TracChangeset for help on using the changeset viewer.