Maximaal koppels maken adhv opgelegde criteria

Status
Niet open voor verdere reacties.

Virusbeatboxing

Gebruiker
Lid geworden
11 nov 2011
Berichten
41
Beste,

Een familielid vroeg mij om een java programma te schrijven die het volgende oplost:

In de sportvereniging wil m'n personen aan elkaar koppelen om oefensessies te houden. Afhankelijk van de niveau's, kan men de nodige koppels maken. Deze niveau bestaan uit Instructeurs, Experts, Gevorderden en Beginners.
De instructeurs mogen met iedereen samen gezet worden, doch wordt er de voorkeur gegeven om Instructeurs eerst samen te zetten met de Beginners. Als blijkt dat reeds alle Instructeurs met Beginners een koppel vormen én er blijven nog Beginners over, dan kan een Expert ook samen gezet worden met een Beginner mits deze Beginner reeds 15 wedstrijden heeft gespeeld.

Uiteraard, voor geldige koppels te kunnen maken moet de groep uit een even aantal personen bestaan. Doch is er een extra vereiste die er voor zorgt dat, indien een persoon geen persoon heeft waarmee hij een koppel kan vormen, deze kan worden samen gezet met een koppel waarin een Instructeur zit (dus koppels van 3 personen).

Om even te schetsen:

Niveau_____|_ Mag spelen met
==========================
Instructeur_ | Iedereen
Expert_____| Instructeur, Expert, Gevorderde en Beginner (mits deze >= 15 wedstrijden heeft gespeeld)
Gevorderde | Instructeur, Expert, Gevorderde
Beginner___| Instructeur, Expert (mits de beginner >= 15 wedstrijden heeft gespeeld)

Ik heb reeds de nodige code geschreven om deze soort mensen te kunnen aanmaken met elk de personen waarmee zij mogen spelen.
Het enige probleem die ik nu heb is dat ik geen flauw benul heb hoe ik optimaal koppels kan gaan maken.

Ik dacht reeds om dit op te lossen met constraint programming om allerhande criteria te schrijven hiervoor. Als dit dé manier is om mijn probleem op te lossen, hoe pak ik dit het beste aan? Momenteel heb ik deze site gevonden en reeds de API getest met een aantal sample voorbeelden zoals het Stable Marriage Problem of Knapsack Problem.

Alvast bedankt!
 
Laatst bewerkt:
Je zou elke persoon een vaardigheid variabele kunnen meegeven.
Code:
class Expert extends Persoon {

       public Expert(String naam) {
               super(naam, Niveau.EXPERT);
       }

       public boolean magSpelenMet(Persoon persoon) {
             if(persoon.getNiveau() == Niveau.BEGINNER || ... || ... || ..) {
                   return true;
             }
             return false;
      }
}

Code:
abstract class Persoon {
       
        public Persoon(String naam, Niveau niveau) {
              ....
       }

       public Niveau getNiveau() {
             return niveau;
       }

       public abstract boolean magSpelenMet(Persoon persoon);
}

Code:
public enum Niveau {
      EXPERT,
      BEGINNER,
       ...
}

Als je een hierarchie hebt (bijv. expert is beter dan gemiddeld en gemiddeld is beter dan een beginner), dan kan je ook waardes aan de enum constanten meegeven en deze gebruiken.

Code:
public enum Niveau {
     EXPERT(5),
     GEMIDDELD(4),
     BEGINNER(3)
 
     int indicatie;

     Niveau(int indicatie) {
         this.indicatie = indicatie;
     }

     public int getIndicatie() {
          return indicatie;
     }
}

Code:
public boolean magSpelenMet(Persoon p) {
        boolean magSpelen = (this.niveau.getIndicatie() >= p.getNiveau().getIndicatie()) ? true : false;
        return magSpelen;
}

Als laatste wil ik nog even opmerken dat, indien je data wilt bewaren, een database (of textfile..) moet gebruiken om de data op te slaan, anders is de data weer verdwenen als je het programma afsluit.

Ik moet snel een trein halen, maar je zou het kunnen oplossen met zo'n soort constructie.

Groeten,
newbi
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan