## 4 Experimental Study
### Problem Statement  
One of the conclusions of the analysis of the taxonomies is that the problems were mainly focused on two objectives: from the energy point of view, energy consumption was a priority, and from the operational point of view, makespan was key. Therefore, we propose to solve a bi-objective problem that tries to find the optimal solution for these two objectives. Makespan is the total time needed to achieve the production needs, so it can be calculated as the elapsed time between the beginning and the end of the production process. Energy can be considered as the energy consumption of the machines that are needed to achieve the production plan. In this case, we took into account the times and consumption of the machines, the times and consumption of starting and stopping the machines, and their speed. Makespan is expressed in units of time and energy in units of energy.  
We generated a number of JSP instances based on existing ones [17], but they were enriched with information related to energy. The data defining a given JSP instance were stored in a file with the following format (the numbers are example values):  
5 3
0 19 9 33...
9 11 10 22......  
The first row indicates the number of jobs and the number of machines (5 and 3 in the example), and the next ones contain pairs including the machine and time needed to execute that part of the job. In this case, for example, the first job runs on 0 machines during 19 units of time. As mentioned above, we enriched these data with extra information about energy, taking into account time stops, idle times, and machine velocities. To this end, new fields associated with energy were included:  
* Energy consumption per time unit:
* _machineWorkingEnergy_: Total energy consumption by unit time while a machine is working;
* _machineEnergy_: Total energy consumption by time unit while a machine is in the idle state;
* _machineWorkingToStopEnergy_: Total energy consumption by time unit while a machine stops from working;
* _machineWorkingToIdleEnergy_: Total energy consumption by time unit while a machine changes from working to the idle state;
* Machine velocity variables:
* _numberOfvelocities_: Array of the velocities that a machine can have;
* Velocity energy penalization:
* _velocityPenalty_: Energy consumption penalization by different velocities;
* Unit time variables:
* _machineTimeToldle_: Units of time that a machine needs to change from the idle state to start or from start to idle;
* _machineTimeToStop_: Units of time that a machine needs to change from the working state to stop or vice versa.  
With these new variables, we can define how much energy and time will be consumed by a machine for a given job that runs in x number of time units. It is worth noting that the user can configure different machine speeds and machine waiting times, allowing making decisions such as leaving a machine in the idle state until the next operation or turning it off and starting it again, depending on the energy consumption.  
With all the considerations described above, we used these JSP instances:  
* _la04_[98], 5 machines and 10 jobs;
* _la10_[98], 5 machines and 15 jobs;
* _ft06_[99], 6 machines and 6 jobs;* _orb01_[98], 10 machines and 10 jobs;
* _abz5_[100], 10 machines and 10 jobs;
* _swv20_[101], 10 machines and 50 jobs;
* _ta12_[102], 15 machines and 20 jobs;
* _dmu11_[103], 15 machines and 30 jobs;
* _yn03_[104], 20 machines and 20 jobs;
* _dmu40_[103], 20 machines and 50 jobs;
* _ta77_[17], 20 machines and 100 jobs.  
The criterion to select these problem instances was to cover at least one dataset of each publications that has appeared in the analyzed literature, but trying to choose a sufficient variety of instances, regarding the number of machines and the number of jobs, with the gradual increase in the complexity of the problem, from lower to higher.