GithubHelp home page GithubHelp logo

feup-iart-timetabling's Introduction

Hi, I'm Fábio 🤘

Interests:

  • performance enginering
    • code parallelisation
    • software tunning
    • programming for heterogeneous platforms (CPUs, GPUs, <insert other accelerators>)
  • compilers
    • mainly optimisations
    • automating challenging tasks, e.g., automatic parallelisation
  • micro-architectures

Learning:

  • FPGAs for efficient computing
  • LLVM Infrastructure

Languages and Tools:

C C++ OpenMP NVIDIA Cuda javascript python

Vue.js React Django Node.js PostgresSQL Docker

Stats:

 fabiodrg

Connect with me:

_fabiodrg_ fabio-gaspar

feup-iart-timetabling's People

Contributors

dannyps avatar fabiodrg avatar g-pereira avatar

Watchers

 avatar  avatar

feup-iart-timetabling's Issues

Use a more greedy approach for generating random initial states

As of now, get_random_initial_state is too much random, which is making it harder to implement local search. Not only it needs to find the sweet spot in the timetable for a given event, but also has to attempt to switch rooms, i.e., there's no guarantee that the picked room for an event has the required capacity and features.

It makes it very hard for the hill climbing work unless some greedy heuristic is applied, and we don't have hill climbing anymore.

So, here's a new approach:

  1. Go through all existing events, available in the Instance object
  2. Pick the room that has just enough capacity. It would be nice to have rooms sorted by capacity. We pick a room such that min(room.size - event.attendees.size).
  3. Starting at the picked room, check if the room has all the required features. If not, go to the next room which probably has a higher capacity but mets the required features.
  4. Pick a random timeslot and insert the room there, unless there's an event already using the same room.

This is a more greedy approach to generate the initial state, instead of being as random as possible but makes it easier to implement the hill climbing searches. It should reduce a lot of overhead too when generating neighbor states.

However, step 3 is not perfect. What if a given event A picks the room 1 because has just enough capacity and all features and extra features it doesn't need, and then the event B picks the room 2, which it's also suitable for event A, but lacks a feature for event B? It would be great for these events to switch rooms. If this is tackled on the generation of the initial state, the hill climbing just needs to exchange pairs (room, event) to different spots.

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.