GithubHelp home page GithubHelp logo

inf4230-projet's Introduction

Hello Fellow < Developers />!👋

Hi! My name is Pierre-Olivier Blouin. Thank You for taking the time to view my GitHub Profile 😄
  • 👨‍💻 On the professional side, I'm currently working with new technologies, mainly Kotlin and Temporal, to build an automated pipeline to process corporate actions.

  • 🌱 On the personal side, I’m currently learning to be a dad so less time to work on projects at this time.

  • 💬 Talk to me about home automation, MTG, video games (big SNES fan) and birbs.

Skills

Connect with me 🤝

My GitHub Stats 📊

poblouin's GitHub stats

My Top Languages 💻

poblouin's top languages

Some Programming Humor for you 😆

Jokes Card

inf4230-projet's People

Contributors

poulette avatar ricpigeon avatar samlmbrt avatar

Watchers

 avatar  avatar

inf4230-projet's Issues

hillClimbing

Losque le hill climbing dépasse le nombre d'itération maximale (et return undefined),
l'éxécution tente d'ajouter le temps d'éxécution à undefined. Il faudrait faire un test dans ce
bout de code

Liste des contraintes

J'ai ajouté dans les commentaires en entête une liste des contraintes implémentées en ce moment. Quand vous ajoutez une contrainte / heuristique, veuillez l'inscrire dans les commentaires comme ca on a pas besoin de tout scroller et analyser le code pour savoir ce qui est implémenté ou non!

backtracking dans le search

comme vous le savez sans doute, il y a des fucks dans le backtracking de l'algo disponible. j'ai une version qui marche ici mais je vais la tester encore un peu avant de la pusher. ça devrait être sur le repo demain avant le cours!

Clean code

Ce soir quand je vais revenir je vais commencer à cleaner le code back-end + générateur. Enlever les commentaires non pertinent pour la remise et autre.

Il restera juste l'algo naif à rajouter et plugger le front et back end

Demandes spéciales pour l'interface!

Premièrement, fucking good job pour l'interface! C'est super clean! :)

J'aurais par contre 2 petites demandes spéciales, si tu veux bien évidemment! Je pense pas que ça serait compliqué mais ça pourrait ajouter pas mal au niveau de la compréhension!

1 - Est-ce qu'il serait possible de mettre les profs dans l'ordre contraire? (genre directeur, prof et chargé de cours?) Je pense que ça aiderait à la compréhension de l'utilisateur quant au fait que le directeur choisi en premier etc. Le résultat généré va être plus facile à comprendre!

2 - Est-ce qu'il serait possible de ne pas pouvoir augmenter le nombre de cours désirées plus que ce que le prof a dans ses cours désirées? Pour l'instant, un prof peut avoir une liste de cours désirés vide mais on peut quand même augmenter dynamiquement (dans la page).

le modèle de données JSON

Le modèle de données (dans /data/*.json) ne fit pas vraiment avec notre concept CSP. À moins que je vois pas la raison qui nécessite que ça soit fait comme ça, je pense qu'il serait mieux que nos JSON soient selon la même structure que nos CSP.

ex: probleme1.json (qui correspond à un problème à résoudre)
{
"professeurs": [
{
"id": "prof1",
"nom": "Harish Gunnarr",
"coursDesires": ["inf1120-00", "inf3105-10", "inf4230-00", "inf5000-22", "inf2120-00"],
"niveau": "CHARGE_DE_COURS",
"coursSessionDerniere": [],
"mauvaiseEvaluation" : ["inf1120-00"],
"nombreCoursDesires": 2,
"nombreCoursAssignes": 0
}, ...],
"coursDisponibles": [
{
"id": "inf1120-00",
"sigle": "INF1120",
"jour": "lundi",
"periode": "AM"
}, ...]
};

Si on garde ça comme ça, ça va être compliqué de loader nos problèmes. Il va falloir faire un mapping de nos 'profs' avec des profs dans ce json et même chose avec les cours.

De plus, si on utilise la méthode de 1 CSP par fichier json, ça va être plus facile de générer des CSP immenses pour tester nos algos

AC-3

Je me questionne sur un truc...

La façon que l'AC-3 est supposé de fonctionner, c'est qu'il scan un objet 'assignment' et qu'il enlève les trucs non-consistents. Maintenant, on est rendu avec plusieurs objets 'assignment' pour le même problème. Est-ce que vous (ou plutôt Marc parce que c'est toi qui travaille là dessus!) avez une idée de comment faire marcher ça?

AC3

J'essai de gosser sur un AC3... je vous laisse savoir comment ca va

validité de la contrainte de si un prof a donné un cours, il a la priorité

est-ce que vous trouver que c'est bien d'avoir cette contrainte?
en autres mots, si quelqu'un donne un cours, il va toujours avoir la priorité?

ça serait peut-être bien d'avoir ça si après genre x fois, il perd son privilège
mais sinon, c'est irréaliste! genre si quelqu'un donne un cours une fois, il va
toujours pouvoir le donner, peut importe ce qu'il se passe! je me demande
comment on va faire pour pouvoir dire ça durant la présentation sans que ça
sonne comme si c'était un feature non fini ou un truc qu'on a pas le choix
d'avoir sans quoi notre truc marchera pas!

prioriteCoursDerniereSession empêcherait des résultats

Je ne suis pas sur, mais j'ai l'impression que le fait de retirer des choix à cause des cours passé enlèverait possiblement le fait de résoudre un problème. En faisant quelques petits test parfois le programme devrait être contraint à ne pas retirer de la liste un cours, sinon il n'aurait plus de possibilité de cours qu'il désire et l'autre professeur avait quand même dans sa liste des cours restant désiré, quoi que peut-être que la priorité ferait en sorte que le professeur n'a juste pas accès au cours et donc qu'il ne pourrait n'y avoir de cours assigné... c'est une question je me pose

Changments!

J'ai regossé pas mal là dessus ce soir et il y a du nouveau:

  • J'ai changé la façon dont on va créer nos objets de type CSP. En fait, tous les cours et profs sont déclarés explicitement/directement dans l'objet CSP. Le but de ça est que éventuellement, on va pouvoir loader nos problèmes dans des fichiers JSON. 1 fichier JSON = 1 problème.
  • J'me suis aussi arrangé pour qu'un objet 'assignment' se génère tout seul donc on a plus besoin de s'en occupé.
  • J'ai rajouter une nouvelle façon d'aller chercher des profs/cours selon leur id (fonction getProfesseurById et getCoursById). D'ailleurs, à cause de la nouvelle structure des objets, j'ai modifié quelques parties du code pour que ça marche.
  • J'ai rajouté une contrainte qui check si la plage horaire du cours fit avec l'horaire du prof (s'il n'y a pas un cours déjà assigné à cette plate). Évidemment, ça sert à rien pour l'instant car chaque prof a seulement un cours.

J'ai essayé de commenter le plus possible pour que ce soit clair! Il ne devrait plus y avoir de changements majeurs sur la façon que ça fonctionne alors si ça vous tente d'ajouter du stock, c'est le temps! Si vous avez des questions, faites moi signe!

Source tree

Où est-ce qu'on doit mettre le code backend dans le source tree? Est-ce qu'il y a des dépendences particulières avec Angular?

Bug mauvaiseEvaluation()

TODO : Comme prioriteCoursDerniereSession() Il ne faut pas utiliser les groupes cours pour comparer, seulement les sigles.

Dans le champ mauvaise évaluation on a ceci :

{
id: "prof1",
nom: "Harish Gunnarr",
coursDesires: ["inf1120-00", "inf3105-10", "inf4230-00", "inf5000-22", "inf2120-00"],
niveau: CHARGE_DE_COURS,
coursSessionDerniere: [],
mauvaiseEvaluation : ["inf1120-00"],
nombreCoursDesires: 2,
nombreCoursAssignes: 0
}

On devrait avoir le sigle : mauvaiseEvaluation : ["INF1120"]

J'ai corrigé ce même problème dans la fonction prioriteCoursDerniereSession(), mais il va rester ca à changer d'ici la remise, c'est assez mineur pour le moment.

Changements!

Salut!

J'ai passé l'avant-midi sur le projet et je viens de faire un commit qui est assez gros alors ça vaut la peine de vous dire qu'est ce qui a de nouveau!

J'ai implémenté le AC3 et tout semble bien fonctionner avec les tests que j'ai fait. Cependant, ça se peut que quelque chose fuck à un moment donné (je vais retester avant la remise).

J'ai enlevé l'algo hill climbing parce que c'était de l'osti de marde et ça marchait pas! ;) À la place, je vais faire (demain) un algo naïf vraiment poche pour qu'on puisse comparer avec le backtracking search.

J'ai aussi changé la façon qu'on appelle le solver. Avant, il fallait qu'on appelle backtracking search pour chacun des profs et chargés de cours alors que maintenant, on l'appelle une fois et on a pas besoin de spécifier pour qui on fait la recherche. (D'ailleurs, j'ai brisé le lien entre le frontend et backend à cause de ça :P)

J'ai aussi pensé à quelque chose pour faire les appels du solver depuis le frontend.

On pourrait faire le call genre:
search(csp, { algo: "naif" });
search(csp, { algo: "backtracking", forward: true, ac3: true };

... selon les paramètres qu'on passe à la recherche. Je vais y repenser par contre car je sais même pas si je sais pas qu'est ce que je vais rajouter comme option.

Bon, j'ai fini mon roman, bonne journée!

Yo!

Salut! Juste pour vous dire que je suis en train de travailler sur d'autres algos pour résoudre le problème (simulated annealing pis recherche locale de base pour comparaison). Si je commit rien, c'est pas parce que je travaille pu mais plutôt parce que c'est pas mal plus fucké que je pensais à faire! ;)

Générateur de données **HARDCORE MODE**

Je vais push dans pas long, mais j'ai fait un générateur de donnée difficile soit generateur_hard,js et template_hard.hbs.

Pour le moment les résultats sont:

10 cours et 10 profs : 1.8 secondes
11 cours et 11 profs : 9 secondes
12 cours et 12 profs : 50.6 secondes
13 cours et 13 profs : 5 minutes 15 secondes
14 cours et 14 profs : Toujours en cours, mais devrait prendre environ 30 minutes
15 cours et 15 profs : Ca doit faire 1 heure que le test roule, selon mes calculs ca va prendre environ 3 heures 30 minutes, je vais le laisser rouler et donner le résultat quand je vais revenir du travail.

Pour tester il faut mettre le bon nom de fichier dans csp.js
csp = require('./generateur/generateur_hard.js').csp;

Pour modifier le nombre de cours et profs il faut modifier :
Ligne 10 dans générateur_hard.js -> var index = nb_cours;
Ligne 3 et 17 dans template_hard.hbs -> mettre le nombre de cours et profs.

Donc si vous voulez tester avec 10 vours et profs vous mettez 10 aux 3 endroits.

Le problème généré n'est pas aléatoire, il s'agit toujours du même problème car on prends toujours les même cours. Seuls les noms des profs vont changer.

P.S. Je test back-end seulement, ce ne sera probablement pas fonctionnel côté front-end

N.B. Un processeur i7-930 a été maltraité durant ces tests, surtout pour le tests de 15 cours et 15 profs lol.

Attribuer les cours selon un 1er tour, 2e tour, 3e tour etc..

D'ici la fin de la journée je vais travailler sur l'algo pour pouvoir attribuer les cours selon des tours car en ce moment on prend le 1er prof et c'est lui qui se retrouve avec tous ses choix en premier, ensuite le 2e..... et le dernier se retrouve avec le reste.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.