Problem statement
I'm given a set of events $E$, and $\forall e \in E$ also:
- a set of plausible dates on which the event can happen $D_e$
- importance (weight) $w_e$
- ideal preparation time duration $i_e$
I define preparation time for an event to be the number of days between that event and the previous event. I'd like to schedule the events so that:
- on each day, there is at maximum one event scheduled
- each event $e$ is scheduled on some day, and that day has to be in $D_e$
- the preparation time of each event should be in some way proportional to its importance (the best case is for each event to have at least $i_e$ preparation time)
Solution details
I chose this topic as my semestral project for a Java class, so I'd like to implement the solution with the help of some Java library. I don't mind getting pointers for solutions in other languages as well, along the lines of "I'd use X normally, but given your situation, use the java bindings for Y".
I thought about using an optimizing SAT solver, but maybe there's some other, better way. If I'm not mistaken, I'll have to "translate" my abstract constraints into linear (in)equations, in order to be able to use a SAT solver. I can "linearize" the first and second constraint, but I'm not sure how to formulate the objective function that's to be maximized according to the third point.
The questions
- Would you solve this with a SAT solver, or in some other way?
- How would you formulate the objective function, most importantly the preparation time of event $e$, in such a way that it could be used in the SAT solver (or the alternative method of your choosing)?
Bonus question: Which Java library should I use to implement the [method you recommended in the first answer]?
Please note that I'm a total OR newbie, not educated about linear programming, constrained optimization, and such matters. If anything is unclear, ask in the comments and I'll try my best to clarify it.