I. Introduction
The Knapsack Problem is composed of items, each with its associated weight and profit. The objective is to select a subset of the items that maximizes the profit and that at the same time fits the knapsack. The name of the problem is derived from the situation in which a mountain climber should select a number of items to be included in his knapsack and that he might use during his trip. The difficulty here is that the climber should select items with more profit but in the same time should not exceed the capacity of the knapsack. Scientists have shown interest in this problem because it represents different practical real life situations. In fact, these items could represent n computed data files that need to be stored and we know that there is only W bytes storage available. Therefore the objective is to choose a subset of the files such that the total size does not exceed weight and the stored files' total computing time is maximized. However, the family of Knapsack problems is rich and there are many knapsack variations. In the simple 0–1 Knapsack version, each item can only be picked once. When items should be selected from disjoint sets, then we are encountered with the multiple choice knapsack problems. Another type of knapsack is when there are many knapsacks that can be filled simultaneously.