1 votes

Inscription des étudiants aux cours

Je suis en train de créer un site web pour un projet parallèle à l'école où les étudiants entrent les cours qu'ils doivent prendre, les jours où ils veulent ou ne veulent pas de cours, et quand ils ne peuvent pas avoir ou ne veulent pas de cours. Les bases sont les suivantes : il y a des classes, et chaque classe a plusieurs sections à différents moments avec différents professeurs parmi lesquels un étudiant peut choisir. Avec les classes de première année, il peut y avoir plus de 30 sections différentes pour chaque classe. J'ai les classes et les sections dans une base de données mysql et j'ai codé en php.

Pour l'instant, il fonctionne mais je veux qu'il soit plus rapide. J'ai lu des articles sur d'autres problèmes de programmation, mais je cherche des informations spécifiques à ce que je fais. Il ne s'agit pas de créer des planifications à partir de rien. Il s'agit de créer des horaires à partir des sections disponibles et de les classer en fonction des entrées des étudiants. Actuellement, pour quelques sections possibles, il fonctionne rapidement. Mais lorsque le nombre d'emplois du temps possibles atteint environ 300 000, il faut environ 30 secondes pour tout comparer et classer. Je l'ai amélioré en changeant la façon dont les horaires sont générés, mais je veux aller plus vite. Je suis passé de la génération par force brute à l'utilisation d'une méthode basée sur les arbres.

Je ne demande pas une aide aux devoirs ou que quelqu'un fasse ça pour moi. Je veux simplement qu'on m'oriente dans la bonne direction en me proposant des problèmes et des algorithmes déjà existants sur lesquels je peux m'instruire.

1voto

AVB Points 2924

Rappelez-vous le puzzle des huit reines ? J'espère bien que c'est le cas, sinon, allez d'abord résoudre ce problème, puis revenez à votre tâche de planification.

Vous êtes déjà passé de la force brute à une structure arborescente. Il est maintenant temps de branchés et liés . Quel que soit le sens que vous donnez à "bons horaires", 170000 est trop - vous ne taillez pas assez votre arbre. Je ne pense pas qu'il puisse y avoir plus de 20 à 50 bons emplois du temps pour chaque étudiant, à moins qu'ils ne suivent que très peu de cours et soient extrêmement flexibles.

1voto

Geoffrey De Smet Points 6032

Essayez des métaheuristiques telles que la recherche tabou ou le recuit simulé. La force brute et le branch and bound ne sont pas assez évolutifs.

Jetez un coup d'œil à mon exemple de cours dans le planificateur de drools, tel que défini par ITC2007. C'est probablement une forme avancée de votre cas d'utilisation (sans compter gui/db).

-1voto

Ravi Gupta Points 1149

Jetez un coup d'œil à este . Ce n'est peut-être pas exactement ce que vous voulez, mais vous pouvez obtenir quelques idées de conception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X