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

Version 1.5.

Location:
exampleparties/randomparty/src
Files:
2 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
  • exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java

    r10 r21  
    1616import java.nio.file.Files;
    1717import java.nio.file.Paths;
     18import java.util.Arrays;
     19import java.util.Collections;
    1820import java.util.LinkedList;
    1921import java.util.List;
     
    3234import geniusweb.actions.Offer;
    3335import geniusweb.actions.PartyId;
     36import geniusweb.actions.Votes;
    3437import geniusweb.bidspace.AllBidsList;
    3538import geniusweb.connection.ConnectionEnd;
     39import geniusweb.inform.ActionDone;
     40import geniusweb.inform.Finished;
     41import geniusweb.inform.Inform;
     42import geniusweb.inform.Settings;
     43import geniusweb.inform.Voting;
     44import geniusweb.inform.YourTurn;
    3645import geniusweb.issuevalue.Bid;
    3746import geniusweb.party.Capabilities;
    38 import geniusweb.party.inform.ActionDone;
    39 import geniusweb.party.inform.Finished;
    40 import geniusweb.party.inform.Inform;
    41 import geniusweb.party.inform.Settings;
    42 import geniusweb.party.inform.YourTurn;
    4347import geniusweb.profile.Profile;
    4448import geniusweb.profile.utilityspace.LinearAdditive;
     
    5357public class RandomPartyTest {
    5458
     59        private static final PartyId PARTY1 = new PartyId("party1");
    5560        private static final String SAOP = "SAOP";
    5661        private static final PartyId otherparty = new PartyId("other");
     
    6065        private RandomParty party;
    6166        private final TestConnection connection = new TestConnection();
    62         private final ProtocolRef protocol = mock(ProtocolRef.class);
     67        private final ProtocolRef protocol = new ProtocolRef(SAOP);
    6368        private final ProgressRounds progress = mock(ProgressRounds.class);
    6469        private Settings settings;
     
    7075                        IOException, URISyntaxException {
    7176                party = new RandomParty();
    72                 settings = new Settings(new PartyId("party1"),
     77                settings = new Settings(PARTY1,
    7378                                new ProfileRef(new URI("file:" + PROFILE)), protocol, progress,
    7479                                parameters);
     
    189194        }
    190195
     196        @Test
     197        public void testVoting() {
     198                party.connect(connection);
     199                party.notifyChange(settings);
     200
     201                Bid bid = findGoodBid();
     202                party.notifyChange(new Voting(Arrays.asList(bid),
     203                                Collections.singletonMap(PARTY1, 1)));
     204                assertEquals(1, connection.getActions().size());
     205                Action action = connection.getActions().get(0);
     206                assertTrue(action instanceof Votes);
     207                assertEquals(1, ((Votes) action).getVotes().size());
     208                assertEquals(bid, ((Votes) action).getVotes().get(0).getBid());
     209        }
     210
    191211}
    192212
Note: See TracChangeset for help on using the changeset viewer.