Advertisement
Guest User

Untitled

a guest
Apr 21st, 2016
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.41 KB | None | 0 0
  1. public abstract class SolverConstraint {
  2.     protected Solver solver;
  3.     protected IntVar[][][][] x;
  4.     protected IntVar[][][][] g;
  5.     protected List<Constraint> constraints;
  6.    
  7.     protected abstract void build();
  8.  
  9.     public void post() {
  10.         if (constraints == null)
  11.             throw new IllegalStateException("The constraints have not beein initialized yet.");
  12.        
  13.         solver.post(constraints.toArray(new Constraint[constraints.size()]));
  14.     }
  15. }
  16.  
  17. public abstract class TournamentConstraint extends SolverConstraint {
  18.     protected Tournament tournament;
  19.  
  20.     public TournamentConstraint(Tournament t) {
  21.         tournament = t;
  22.        
  23.         TournamentSolver tournamentSolver = t.getSolver();
  24.         solver = tournamentSolver.getSolver();
  25.         x = tournamentSolver.getMatchesModel();
  26.         g = tournamentSolver.getMatchesBeginningsModel();
  27.     }
  28.  
  29. }
  30.  
  31. public abstract class EventConstraint extends SolverConstraint {
  32.     protected Event event;
  33.     protected int eventIndex;
  34.  
  35.     public EventConstraint(Event e, Tournament t) {
  36.         event = e;
  37.         eventIndex = t.getEvents().indexOf(e);
  38.        
  39.         TournamentSolver tournamentSolver = t.getSolver();
  40.         solver = tournamentSolver.getSolver();
  41.         x = tournamentSolver.getMatchesModel();
  42.         g = tournamentSolver.getMatchesBeginningsModel();
  43.     }
  44. }
  45.  
  46. public class ConstraintBuilder {
  47.     private Tournament tournament;
  48.    
  49.     public ConstraintBuilder(Tournament t) {
  50.         tournament = t;
  51.     }
  52.    
  53.     public SolverConstraint matchesPerPlayerConstraint(Event e) {
  54.         return new MatchesPerPlayerConstraint(e, tournament);
  55.     }
  56. }
  57.  
  58. // We will have one of this kind of class for each constraint (rule) we want to define over the model (game)
  59. public class MatchesPerPlayerConstraint extends EventConstraint {
  60.  
  61.     public MatchesPerPlayerConstraint(Event e, Tournament t) {
  62.         super(e, t);
  63.         build();
  64.     }
  65.  
  66.     protected void build() {
  67.         constraints = new ArrayList<Constraint>();
  68.        
  69.         // Que cada jugador juegue nMatchesPerPlayer partidos
  70.         int playerNumberOfTimeslots = event.getMatchesPerPlayer() * event.getMatchDuration();
  71.  
  72.         for (int p = 0; p < event.getPlayers().size(); p++) {
  73.             constraints.add(IntConstraintFactory.sum(ArrayUtils.flatten(g[eventIndex][p]), VariableFactory.fixed(event.getMatchesPerPlayer() , solver)));  
  74.             constraints.add(IntConstraintFactory.sum(ArrayUtils.flatten(x[eventIndex][p]), VariableFactory.fixed(playerNumberOfTimeslots, solver)));
  75.         }
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement