I'm looking for some advice for an optimization problem regarding scheduling jobs in a datacenter.
So I have a list of jobs and each job has a required time for finishing and a number of cores it has to run on, e.g. job 1 needs 10 seconds and has to run on 4 cores.
The task is now to schedule all jobs on n servers where each server has 8 cores and I have to optimize it such that the time until all jobs are finished is minimal.
I also have an energy component, meaning the fictional data center has some photovoltaic support and for each minute we get some sort of energy input, which we need to run our servers. The more cores a server is currently using, the more energy it needs. If the generate more energy then required we can store the rest in a battery and if we need more than it produces and the battery is empty, we can buy more energy from the state.
The objective is now to optimize on the one hand the required time for all jobs but also to minimize the amount of bought energy.
I first tried to solve it with Gurobi and a Linear Programming Model. It works fine for small inputs, but for larger settings it needs to long to find a solution (I cancelled after 3 hours).
So my next idea was to try to use a genetic algorithm approach. However, I am having trouble to generate a model of chromosomes representing a solution and further when doing crossovers and mutations, how to ensure that the constraints are satisfied. In the literature I mostly found genetic programming approaches to be used on unconstrained problems, but not on problems with many constraints.
Is there anything you could point me to on how to solve or approach genetic algorithms for constrained optimization problems? How do I crossover two solutions while having the offspring also fulfill the constraints?
Throwing away offsprings after a crossover / mutation, which do not satisfy the constraints, does not seem like a good approach to me.