I have J projects, running over T weeks, each project using S amount of resources in week t (based on a pre-defined matrix). I have to allocate these projects to I clusters, where cluster capacity C_i is known. Furthermore, each project belongs to a certain subgroup G.
This appears to be a 0-1 multiple knapsack problem, right? However, there are some differences. All the projects have to be assigned to exactly 1 cluster, and once it is assigned, it cannot be moved from it. This usually results in over-packing of the knapsacks (clusters), in violation with "knapsack cannot exceed capacity" constraint, creating only unfeasible solutions. Thus, it has an impact on the objectives.
My objectives are, in order of priority:
1) Minimize the total occurrence of resource requests exceeding the cluster's capacity. In layman's terms, minimize the number of times that the clusters' capacities are violated.
2) Resource request be maximally spread across clusters.
3) Projects in the same group be maximally spread across clusters.
Now, for my questions:
Am I right to assume this is a 0-1 Multiple Knapsack Problem? Am I also right to assume it is linear? I could not find any similar case studies in the literature so far of this exact variation of the problem.
I have implemented some beginner level code that generates random solutions for project to cluster allocations, and created a Pareto-optimal front. The next step is the implementation of a simple multi-objective optimization algorithm. I am not sure how to even begin, as I have not encountered anything close to this in my literature. I am quite the beginner in Python, so even reading through library documentations for PyGMO, DEAP, or even SciPy seems too complex for me. Any suggestions?