5

I'm working on a Java application which should allow users to optimize their daily schedule. For that, I need a framework that helps calculate optimal times for "tasks" taking note of:

  1. Required resources and resource usage limits
  2. Dependencies between tasks (can do with only F->S relations though)
  3. Earliest and latest start-finish times, slack times
  4. Baseline vs. actual times - allowing to report actual start and finish times, updating the rest of the tasks accordingly

Some clarifications: I am not looking for neither a framework to draw these gantts, nor a framework that deals with one specific problem domain (such as classrooms), and definitely not a framework that deals with thread scheduling.

Thanks!

Aviad Ben Dov
  • 6,351
  • 2
  • 34
  • 45
  • If you found such a framework, what would be left for you to do? Sounds like you're writing a task-optimization application and you're looking to leverage a task-optimization framework. Thats not really how these things work... You just might have to write some code. – romacafe Sep 09 '10 at 17:59
  • @romacafe: Sometimes the nice thing is the packing, not the engine. Why don't we re-write a 3D renderer for every FPS too? – Aviad Ben Dov Sep 09 '10 at 18:59
  • @Erick: Yeah, the question is if there is such a framework, and if there is - what is it? :) – Aviad Ben Dov Sep 09 '10 at 18:59
  • This may seem a little out-in-left-field, but I suggest that you read about the linux I/O schedulers, including CFQ et al. I realize that a person and their day are quite different from an I/O resource, but some similarities can be drawn, and you might glean some algorithm ideas. – Reinderien Sep 16 '10 at 07:07
  • i think you need to write a profiler. – Dead Programmer Sep 17 '10 at 06:19
  • Roughly how many tasks per day would you like to be able to handle? – aioobe Sep 18 '10 at 21:16

3 Answers3

5

I don't think there is a framework that will suit your needs out of the box. I know you said you're not looking for a job/thread scheduler, but I think your best bet is probably to roll your own optimization/prioritization code around a "dumb" job/thread scheduling framework like Quartz (or whatever you have in place). If you go with Quartz, the API can probably provide you with some information useful for items 3 and 4 of your optimization criteria. Additionally, Quartz has a job "priority" concept, so once you've computed the optimized priority, it should make scheduling the execution easy.

If you do find a framework that does what you ask, please post back here -- I'm sure there are others who could use something similar.

Justin Garrick
  • 14,767
  • 7
  • 41
  • 66
  • I know about these scheduling frameworks; I was looking for a way that allows me to skip looking into their code and figuring out which bits and bolts I need... But if I'll have to, that's what I'll do. – Aviad Ben Dov Sep 17 '10 at 08:47
0

You could check for a project management software. It seems you need it written in java with the ability to modify the code. It really narrows down the list but I made a quick scan and I see at least 2 of them which could help (Endeavour and Project.net).

Damien
  • 2,254
  • 1
  • 22
  • 30
0

Perhaps what you need is something like evolutionary/genetic algorithm to generate an optimized schedule?

If yes, you may have a look at this Watchmaker Framework: http://watchmaker.uncommons.org/

With evolutionary/genetic algorithm, it randomly generate a pool of schedule. Your main focus will be defining the scoring criteria to evaluate each schedule generated. Then let it(the schedules generated) evolve from generation to generation until it is optimum enough for you.

ThiamTeck
  • 385
  • 1
  • 9