Skip to content

Cant Stop Tunable Parameters #326

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 69 additions & 17 deletions src/main/java/games/cantstop/CantStopParameters.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package games.cantstop;

import core.AbstractParameters;
import core.Game;
import evaluation.optimisation.TunableParameters;
import games.GameType;

public class CantStopParameters extends AbstractParameters {
import java.util.Arrays;

public class CantStopParameters extends TunableParameters {

/*
This could have been implemented as an array, but this more verbose set up makes it easier for
Expand All @@ -14,22 +19,64 @@ public class CantStopParameters extends AbstractParameters {
- Moving onto an occupied space instead means you jump to the next unoccupied one
*/

public final int TWO_MAX = 2;
public final int THREE_MAX = 4;
public final int FOUR_MAX = 6;
public final int FIVE_MAX = 8;
public final int SIX_MAX = 10;
public final int SEVEN_MAX = 12;
public final int EIGHT_MAX = 10;
public final int NINE_MAX = 8;
public final int TEN_MAX = 6;
public final int ELEVEN_MAX = 4;
public final int TWELVE_MAX = 2;

public final int DICE_NUMBER = 4; // If you change this, then you'll need to also update code in ForwardModel._computeAvailableActions()
public final int DICE_SIDES = 6;
public final int COLUMNS_TO_WIN = 3;
public final int MARKERS = 3; // number of temporary markers
public int TWO_MAX = 2;
public int THREE_MAX = 4;
public int FOUR_MAX = 6;
public int FIVE_MAX = 8;
public int SIX_MAX = 10;
public int SEVEN_MAX = 12;
public int EIGHT_MAX = 10;
public int NINE_MAX = 8;
public int TEN_MAX = 6;
public int ELEVEN_MAX = 4;
public int TWELVE_MAX = 2;

public int DICE_NUMBER = 4; // If you change this, then you'll need to also update code in ForwardModel._computeAvailableActions()
public int DICE_SIDES = 6;
public int COLUMNS_TO_WIN = 3;
public int MARKERS = 3; // number of temporary markers

public CantStopParameters() {
// Column sizes
addTunableParameter("TWO_MAX", 2, Arrays.asList(1,2,3,4,5));
addTunableParameter("THREE_MAX", 4, Arrays.asList(2,3,4,5,6));
addTunableParameter("FOUR_MAX", 6, Arrays.asList(4,5,6,7,8));
addTunableParameter("FIVE_MAX", 8, Arrays.asList(6,7,8,9,10));
addTunableParameter("SIX_MAX", 10, Arrays.asList(8,9,10,11,12));
addTunableParameter("SEVEN_MAX", 12, Arrays.asList(10,11,12,13,14));
addTunableParameter("EIGHT_MAX", 10, Arrays.asList(8,9,10,11,12));
addTunableParameter("NINE_MAX", 8, Arrays.asList(6,7,8,9,10));
addTunableParameter("TEN_MAX", 6, Arrays.asList(4,5,6,7,8));
addTunableParameter("ELEVEN_MAX", 4, Arrays.asList(2,3,4,5,6));
addTunableParameter("TWELVE_MAX", 2, Arrays.asList(1,2,3,4,5));

addTunableParameter("DICE_NUMBER", 4);
addTunableParameter("DICE_SIDES", 6);
addTunableParameter("COLUMNS_TO_WIN", 3, Arrays.asList(2, 3, 4, 5, 6));
addTunableParameter("MARKERS", 3, Arrays.asList(2, 3, 4, 5, 6));

}

@Override
public void _reset() {
// Column sizes
TWO_MAX = (int) getParameterValue("TWO_MAX");
THREE_MAX = (int) getParameterValue("THREE_MAX");
FOUR_MAX = (int) getParameterValue("FOUR_MAX");
FIVE_MAX = (int) getParameterValue("FIVE_MAX");
SIX_MAX = (int) getParameterValue("SIX_MAX");
SEVEN_MAX = (int) getParameterValue("SEVEN_MAX");
EIGHT_MAX = (int) getParameterValue("EIGHT_MAX");
NINE_MAX = (int) getParameterValue("NINE_MAX");
TEN_MAX = (int) getParameterValue("TEN_MAX");
ELEVEN_MAX = (int) getParameterValue("ELEVEN_MAX");
TWELVE_MAX = (int) getParameterValue("TWELVE_MAX");

DICE_NUMBER = (int) getParameterValue("DICE_NUMBER");
DICE_SIDES = (int) getParameterValue("DICE_SIDES");
COLUMNS_TO_WIN = (int) getParameterValue("COLUMNS_TO_WIN");
MARKERS = (int) getParameterValue("MARKERS");
}

public int maxValue(int number) {
switch (number) {
Expand Down Expand Up @@ -69,4 +116,9 @@ protected AbstractParameters _copy() {
protected boolean _equals(Object o) {
return o instanceof CantStopParameters;
}

@Override
public Object instantiate() {
return new Game(GameType.CantStop, new CantStopForwardModel(), new CantStopGameState(this, GameType.CantStop.getMinPlayers()));
}
}
72 changes: 72 additions & 0 deletions src/main/java/games/cantstop/metrics/CantStopMetrics.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package games.cantstop.metrics;

import core.interfaces.IGameEvent;
import evaluation.listeners.MetricsGameListener;
import evaluation.metrics.AbstractMetric;
import evaluation.metrics.Event;
import evaluation.metrics.IMetricsCollection;
import games.cantstop.CantStopGameState;
import games.cantstop.CantStopParameters;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class CantStopMetrics implements IMetricsCollection {

public static class ChosenParams extends AbstractMetric {

@Override
protected boolean _run(MetricsGameListener listener, Event e, Map<String, Object> records) {

CantStopGameState state = (CantStopGameState) e.state;
CantStopParameters params = (CantStopParameters) state.getGameParameters();

records.put("TWO_MAX", params.TWO_MAX);
records.put("THREE_MAX", params.THREE_MAX);
records.put("FOUR_MAX", params.FOUR_MAX);
records.put("FIVE_MAX", params.FIVE_MAX);
records.put("SIX_MAX", params.SIX_MAX);
records.put("SEVEN_MAX", params.SEVEN_MAX);
records.put("EIGHT_MAX", params.EIGHT_MAX);
records.put("NINE_MAX", params.NINE_MAX);
records.put("TEN_MAX", params.TEN_MAX);
records.put("ELEVEN_MAX", params.ELEVEN_MAX);
records.put("TWELVE_MAX", params.TWELVE_MAX);

records.put("DICE_NUMBER", params.DICE_NUMBER);
records.put("DICE_SIDES", params.DICE_SIDES);
records.put("COLUMNS_TO_WIN", params.COLUMNS_TO_WIN);
records.put("MARKERS", params.MARKERS);
return true;
}

@Override
public Set<IGameEvent> getDefaultEventTypes() {
return Collections.singleton(Event.GameEvent.ABOUT_TO_START);
}

@Override
public Map<String, Class<?>> getColumns(int nPlayersPerGame, Set<String> playerNames) {
Map<String, Class<?>> columns = new HashMap<>();
columns.put("TWO_MAX", Integer.class);
columns.put("THREE_MAX", Integer.class);
columns.put("FOUR_MAX", Integer.class);
columns.put("FIVE_MAX", Integer.class);
columns.put("SIX_MAX", Integer.class);
columns.put("SEVEN_MAX", Integer.class);
columns.put("EIGHT_MAX", Integer.class);
columns.put("NINE_MAX", Integer.class);
columns.put("TEN_MAX", Integer.class);
columns.put("ELEVEN_MAX", Integer.class);
columns.put("TWELVE_MAX", Integer.class);

columns.put("DICE_NUMBER", Integer.class);
columns.put("DICE_SIDES", Integer.class);
columns.put("COLUMNS_TO_WIN", Integer.class);
columns.put("MARKERS", Integer.class);
return columns;
}
}
}
Loading