2009-02-20 9 views
2

Je dois créer un programme qui planifie en fonction de certaines règles. Je ne sais pas comment l'expliquer, alors laissez-moi vous donner un exemple ..Comment programmer un programme

Vous avez cinq personnes A, B, C, D, E. Et vous avez un autre groupe de personnes S1 S2 S3 S4 S5 S6 S7.

Si ABCD et E sont disponibles toutes les heures de 9 à 5 et S1 S2 S3 S4 S5 S6 et S7 ont une liste de 3 personnes qu'ils veulent voir de {A, B, C, D, E}

C'est mon problème et je ne sais pas par où commencer ...

Merci pour votre aide!

+0

Comment êtes-vous censé résoudre le problème, en utilisant quelles techniques? Je suppose que c'est un cours d'IA. Avez-vous étudié les algorithmes de recherche, les heuristiques, peut-être les algorithmes génétiques et autres? Fournir plus de détails, et aussi une tentative de résoudre. –

Répondre

2

est ici une approche:

Commencez par S1, lui attribuer les trois personnes qu'il veut à 9 heures, puis aller à S2 et essayer de planifier sa réunion à 9 h. Continuez jusqu'à ce que vous ayez un conflit, puis déplacez cette réunion à 10h. Retour à 9h pour le prochain. S'il y a un conflit à 10 également, passez à 11, etc.

Une fois que le programme essaie de planifier une réunion après les heures, vous saurez que vous avez atteint un cas où toutes les réunions ne sont pas possibles dans un seule journée.

+0

sauf si vous voulez la meilleure allocation possible, cela semble la meilleure option. –

+0

La question ne donne pas assez d'informations pour mesurer la meilleure allocation de toute façon. – acrosman

1

Il y a pas mal de choses à dire à propos de scheduling algorithms, alors pour votre propre plaisir, vous voudrez peut-être ouvrir votre texte (ou du moins faire des recherches wiki) et avoir une idée des techniques les plus courantes.

Personnellement, je commencerais par considérer les fonctions dont vous avez besoin pour créer cette planification.

Par exemple, vous avez besoin d'une fonction le long des lignes def testAppointment(meetingSubject, meetingTime): qui vérifie si un rendez-vous donné est valide ou non.

Vous pouvez également vouloir une fonction def listAvailableTimes(meetingSubject)): qui renvoie un list chaque fois qu'un sujet de réunion particulier est disponible.

Voyez-vous où je vais avec ça? Construire les fonctions qui vous donnent les informations nécessaires pour résoudre le problème, puis allez sur votre "boucle principale", pour ainsi dire.

2

Voici un code python qui fera l'affaire. Vous voudrez mettre à jour VISITOR_PEOPLE. Et si certaines personnes planifient avant les autres, vous devez réorganiser VISITOR_IDS.

Modifier: J'ai ajouté un peu plus de code pour tenir compte du fait que les gens ne peuvent pas être dans un endroit différent en même temps. Vous pourriez vouloir rendre cela plus efficace (c'est-à-dire ne pas essayer de planifier une heure qui ne fonctionnera pas). Je vais vous laisser comprendre cependant;)

import sys 

HOURS = ['9:00AM', '10:00AM', '11:00AM', '12:00PM', '1:00PM', '2:00PM', '3:00PM', '4:00PM'] 
PEOPLE_IDS = ['A', 'B', 'C', 'D', 'E'] 
VISITOR_IDS = ['S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7'] 
VISITOR_PEOPLE = {'S1': ['A', 'B', 'C'], 
        'S2': ['A', 'D', 'E'], 
        'S3': ['B', 'E', 'D'], 
        'S4': ['D', 'E', 'A'], 
        'S5': ['C', 'D', 'E'], 
        'S6': ['A', 'D', 'C'], 
        'S7': ['B', 'C', 'D'] 
        } 

def main(): 
    people = {} 
    for id in PEOPLE_IDS: 
     people[id] = Person(id) 
    visitors = {} 
    for id in VISITOR_IDS: 
     visitors[id] = Visitor(id, VISITOR_PEOPLE[id], people) 
    for v in visitors.values(): 
     v.printSchedule() 

class Person: 
    def __init__(self, id): 
     self.id = id 
     self.schedule = [False]*8 # False = free, True = busy 
    def scheduleTime(self): 
     # schedules next available hour and returns that hour 
     for i in range(len(self.schedule)): 
      if not self.schedule[i]: 
       self.schedule[i] = True 
       return HOURS[i] 
     return 'unavailable' 
    def unscheduleTime(self, index): 
     self.schedule[index] = False 

class Visitor: 
    def __init__(self, id, people_requests, people): 
     self.id = id 
     self.schedule = {} # {person_id: hour} 
     for p in people_requests: 
      bad_times = set() # times that Visitor is busy 
      time = people[p].scheduleTime() 
      while time in self.schedule.values(): # keep scheduling a time until you get one that works for both the Visitor and Person 
       bad_times.add(time) 
       time = people[p].scheduleTime() 
      self.schedule[p] = time 
      for t in bad_times: # unschedule bad_times from Person 
       people[p].unscheduleTime(HOURS.index(t)) 
    def printSchedule(self): 
     print 'Schedule for %s [Person (time)]:' % self.id 
     for p,t in self.schedule.items(): 
      print ' %s (%s)' % (p,t) 

if __name__ == '__main__': 
    sys.exit(main()) 
Questions connexes