Ignore:
Timestamp:
10/08/20 10:17:25 (4 years ago)
Author:
bart
Message:

MOPAC support for timedependentparty, boulware, conceder, hardliner, linear

Location:
exampleparties/randomparty/src
Files:
2 edited

Legend:

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

    r24 r25  
    6363        private Settings settings;
    6464        private Votes lastvotes;
     65        private String protocol;
    6566
    6667        public RandomParty() {
     
    8182                                this.progress = settings.getProgress();
    8283                                this.settings = settings;
     84                                this.protocol = settings.getProtocol().getURI().getPath();
     85
    8386                        } else if (info instanceof ActionDone) {
    8487                                Action otheract = ((ActionDone) info).getAction();
     
    8891                        } else if (info instanceof YourTurn) {
    8992                                makeOffer();
    90                                 nextRound();
    9193                        } else if (info instanceof Finished) {
    9294                                getReporter().log(Level.INFO, "Final ourcome:" + info);
     
    9496                                lastvotes = vote((Voting) info);
    9597                                getConnection().send(lastvotes);
    96                                 nextRound();
    9798                        } else if (info instanceof OptIn) {
    9899                                // just repeat our last vote.
    99100                                getConnection().send(lastvotes);
    100                                 nextRound();
    101101                        }
    102102                } catch (Exception e) {
    103103                        throw new RuntimeException("Failed to handle info", e);
    104104                }
    105         }
    106 
    107         private void nextRound() {
    108                 if (progress instanceof ProgressRounds) {
    109                         progress = ((ProgressRounds) progress).advance();
    110                 }
    111 
     105                updateRound(info);
    112106        }
    113107
     
    125119
    126120        /**
     121         * Update {@link #progress}
     122         *
     123         * @param info the received info. Used to determine if this is the last info
     124         *             of the round
     125         */
     126        private void updateRound(Inform info) {
     127                if (protocol == null)
     128                        return;
     129                switch (protocol) {
     130                case "SAOP":
     131                case "SHAOP":
     132                        if (!(info instanceof YourTurn))
     133                                return;
     134                        break;
     135                case "MOPAC":
     136                        if (!(info instanceof OptIn))
     137                                return;
     138                        break;
     139                default:
     140                        return;
     141                }
     142                // if we get here, round must be increased.
     143                if (progress instanceof ProgressRounds) {
     144                        progress = ((ProgressRounds) progress).advance();
     145                }
     146
     147        }
     148
     149        /**
    127150         * send our next offer
    128151         */
    129152        private void makeOffer() throws IOException {
    130153                Action action;
    131                 String protocol = settings.getProtocol().getURI().getPath();
    132154                if ((protocol.equals("SAOP") || protocol.equals("SHAOP"))
    133155                                && isGood(lastReceivedBid)) {
  • exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java

    r24 r25  
    77import static org.mockito.Matchers.eq;
    88import static org.mockito.Mockito.mock;
     9import static org.mockito.Mockito.times;
    910import static org.mockito.Mockito.verify;
    1011import static org.mockito.Mockito.when;
     
    4243import geniusweb.inform.Finished;
    4344import geniusweb.inform.Inform;
     45import geniusweb.inform.OptIn;
    4446import geniusweb.inform.Settings;
    4547import geniusweb.inform.Voting;
     
    6870        private final TestConnection connection = new TestConnection();
    6971        private final ProtocolRef protocol = new ProtocolRef(SAOP);
     72        private final ProtocolRef mopacProtocol = new ProtocolRef("MOPAC");
    7073        private final ProgressRounds progress = mock(ProgressRounds.class);
    71         private Settings settings;
     74        private Settings settings, mopacSettings;
    7275        private LinearAdditive profile;
    7376        private final Parameters parameters = new Parameters();
     
    8083                                new ProfileRef(new URI("file:" + PROFILE)), protocol, progress,
    8184                                parameters);
     85                mopacSettings = new Settings(PARTY1,
     86                                new ProfileRef(new URI("file:" + PROFILE)), mopacProtocol,
     87                                progress, parameters);
    8288
    8389                String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)),
     
    174180
    175181        @Test
    176         public void testAgentsUpdatesProgress() {
     182        public void testAgentsUpdatesSAOPProgress() {
    177183                party.connect(connection);
    178184                party.notifyChange(settings);
     
    180186                party.notifyChange(new YourTurn());
    181187                verify(progress).advance();
     188        }
     189
     190        @Test
     191        public void testAgentsUpdatesMOPACProgress() {
     192                party.connect(connection);
     193                party.notifyChange(mopacSettings);
     194                // in mopac, progress happens only after optin phase
     195                party.notifyChange(new YourTurn());
     196                verify(progress, times(0)).advance();
     197                party.notifyChange(
     198                                new Voting(Collections.emptyList(), Collections.emptyMap()));
     199                verify(progress, times(0)).advance();
     200                party.notifyChange(new OptIn(Collections.emptyList()));
     201                verify(progress, times(1)).advance();
    182202        }
    183203
     
    199219
    200220        @Test
    201         public void testVoting() {
    202                 party.connect(connection);
    203                 party.notifyChange(settings);
     221        public void testVoting() throws URISyntaxException {
     222                party.connect(connection);
     223                party.notifyChange(mopacSettings);
    204224
    205225                Bid bid = findGoodBid();
Note: See TracChangeset for help on using the changeset viewer.