<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article  PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article"><front><journal-meta><journal-id journal-id-type="publisher-id">JAMP</journal-id><journal-title-group><journal-title>Journal of Applied Mathematics and Physics</journal-title></journal-title-group><issn pub-type="epub">2327-4352</issn><publisher><publisher-name>Scientific Research Publishing</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.4236/jamp.2019.711176</article-id><article-id pub-id-type="publisher-id">JAMP-96189</article-id><article-categories><subj-group subj-group-type="heading"><subject>Articles</subject></subj-group><subj-group subj-group-type="Discipline-v2"><subject>Physics&amp;Mathematics</subject></subj-group></article-categories><title-group><article-title>
 
 
  A Simulated Annealing Algorithm for Scheduling Problems
 
</article-title></title-group><contrib-group><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Crescenzio</surname><given-names>Gallo</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Vito</surname><given-names>Capozzi</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref></contrib></contrib-group><aff id="aff1"><addr-line>Department of Clinical and Experimental Medicine, University of Foggia, Foggia, Italy</addr-line></aff><pub-date pub-type="epub"><day>04</day><month>11</month><year>2019</year></pub-date><volume>07</volume><issue>11</issue><fpage>2579</fpage><lpage>2594</lpage><history><date date-type="received"><day>17,</day>	<month>September</month>	<year>2019</year></date><date date-type="rev-recd"><day>2,</day>	<month>November</month>	<year>2019</year>	</date><date date-type="accepted"><day>5,</day>	<month>November</month>	<year>2019</year></date></history><permissions><copyright-statement>&#169; Copyright  2014 by authors and Scientific Research Publishing Inc. </copyright-statement><copyright-year>2014</copyright-year><license><license-p>This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/</license-p></license></permissions><abstract><p>
 
 
  An algorithm using the heuristic technique of Simulated Annealing to solve a scheduling problem is presented, focusing on the scheduling issues. The approximated method is examined together with its key parameters (freezing, tempering, cooling, number of contours to be explored), and the choices made in identifying these parameters are illustrated to generate a good algorithm that efficiently solves the scheduling problem.
 
</p></abstract><kwd-group><kwd>Scheduling</kwd><kwd> Simulated Annealing</kwd><kwd> Discrete Optimization Algorithm</kwd></kwd-group></article-meta></front><body><sec id="s1"><title>1. Introduction</title><p>In general terms, an operation is defined as an elementary activity whose realization requires a machine, that is, an instrument capable of performing operations. For example, a production process is composed of operations that require the use of resources (machines, manpower).</p><p>There are three main problems to be considered:</p><p>1) Loading: to allocate the operations to the available resources;</p><p>2) Sequencing: to determine the sequence according to which the operations are to be performed;</p><p>3) Scheduling: to define the planning of each operation; that is, to identify its instants of beginning and completion.</p><p>The term “scheduling” can be used to indicate the timing according to which the operations must be carried out and the process that leads to the identification of this timing. Scheduling problems [<xref ref-type="bibr" rid="scirp.96189-ref1">1</xref>] therefore concern the use over time of limited resources for which there is a demand.</p><p>A machine can be: dedicated (if it can only perform certain operations), or parallel (if it can perform all the operations indifferently). In the case of parallel machines we speak of machines: identical, if they process the operations with the same speed; uniform, if the speed of the machines is different but constant and independent of the operations; uncorrelated, if the speed depends on the operations to be carried out.</p><p>The state of the art of the job scheduling problem is illustrated in [<xref ref-type="bibr" rid="scirp.96189-ref2">2</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref3">3</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref4">4</xref>].</p><sec id="s1_1"><title>1.1. Definitions</title><p>We can define the following entities in a scheduling problem:</p><p>Processing time p i j : Time needed by machine i to perform operation j;</p><p>Weight or priority w j : Represents a priority level of operation j;</p><p>Release time r j : Time from which operation j can be processed;</p><p>Start time s j : Time at which operation j is started ( s j ≥ r j );</p><p>Completion time C j : Time when operation j ends;</p><p>Expiry time (due date) d j : The interval within which operation j should be completed;</p><p>Deadline e j : The latest time by which operation j should be completed;</p><p>Flow time F j = C j − r j : Difference between the completion time and the release time; it is the turnaround time of the operation j;</p><p>Lateness L j = C j − d j : Difference between the completion time and the expiry time; if L j &gt; 0 the operation was completed late; if L j &lt; 0 , it was completed early;</p><p>Tardiness T j = max { L j , 0 } : Only takes into account delays with respect to completion times;</p><p>Slack (scroll) s l j = d j − r j − p j : The possible sliding for the execution of the operation.</p><p>Examples of possible operation scheduling based on the previous definitions are shown in <xref ref-type="fig" rid="fig1">Figure 1</xref>.</p></sec><sec id="s1_2"><title>1.2. Objectives of a Scheduling Problem</title><p>The objectives of a scheduling problem can be summarised as follows:</p><p>1) Maximum completion time (makespan): C max = max { C j } ;</p><p>2) Weighted sum of the completion times: ∑   w j C j ;</p><p>3) Weighted sum of flow times: ∑   w j F j ;</p><p>4) Weighted sum of the delays: ∑   w j L j ;</p><p>5) Maximum delay: L max = max { L j } ;</p><p>6) Maximum tardiness: T max = max { T j }</p><p>7) Number of delayed operations: ∑   δ ( L j ) 1</p><p>8) Weighted number of delayed operations: ∑   w j δ (Lj)</p><p>9) Weighted sum of the tardinesses: ∑   w j T j</p><p>Objective (1) is oriented towards the efficient use of machines; objectives (2-4) are user-oriented; objectives (5-9) are time-oriented. The most important objectives are the makespan ( C max ), the weighted sum of the completion times ( ∑   w j C j ) and the maximum delay ( L max ). An objective is regular if its value cannot decrease as the processing time of any operation increases.</p><p>A scheduling problem typically involves the following constraints:</p><p>&#183; Each machine cannot process more than one operation at a time;</p><p>&#183; Each operation must be processed at most by one machine at a time;</p><p>&#183; An operation can be performed in the time interval [ r j , d j ] ;</p><p>&#183; Any technological constraints must be satisfied.</p><p>Some examples of technological constraints may be:</p><p>1) Possibility to interrupt the execution of an operation and to resume it later (preemptive scheduling);</p><p>2) Constraints of precedence between operations;</p><p>3) Need to wait for setup times between the completion of one operation and the start of another on the same machine;</p><p>4) Possibility to execute groups of operations simultaneously (batch scheduling).</p></sec><sec id="s1_3"><title>1.3. Classification of Scheduling Problems</title><p>Scheduling problems can be classified on the basis of: characteristics of operations; time constraints; type of information available.</p><p>Classification according to the characteristics of the operations.</p><p>According to the characteristics of the operations you can distinguish between: one-step problems (all jobs require only one operation and, therefore, you can talk about either job or task), multi-stage problems (each job is composed of several operations among which there are precedence constraints).</p><p>One-step problems can, in turn, be distinguished, depending on the number of machines, under (see <xref ref-type="fig" rid="fig2">Figure 2</xref>): single machine problems (with only one machine), parallel machine problems (if there is more than one machine).</p><p>Classification according to time constraints.</p><p>Taking into account time constraints, you can distinguish among:</p><p>&#183; Static problems: If the operations are all available at the start of the schedule ( r j = 0 for each operation);</p><p>&#183; Dynamic problems: If operations become available in time in a way known a priori ( r j &gt; 0 known in advance);</p><p>&#183; Online problems: If operations become available over time in a way not known a priori ( r j &gt; 0 not known in advance).</p><p>Classification according to the type of information available.</p><p>Considering the type of information available, scheduling problems can be:</p><p>&#183; Deterministic, if the parameters associated with the operations (processing times, release times, deadlines) are all deterministic;</p><p>&#183; Stochastic, if any of the parameters associated with the operations (processing times, release times, deadlines) are defined in random terms.</p></sec><sec id="s1_4"><title>1.4. Classification of Solutions</title><p>A standard method for classifying a scheduling problem is Graham’s notation [<xref ref-type="bibr" rid="scirp.96189-ref5">5</xref>] where a problem is indicated by specifying three types of information: information on machines and phases; information related to the presence of constraints; optimization criterion.</p><p>A solution to a scheduling problem can be (see <xref ref-type="fig" rid="fig3">Figure 3</xref>): without delay (if it never happens that a machine, even though it can perform an operation, remains inactive); active (if, in order to anticipate the completion of any operation, there is a delay in the completion of other operations); inactive (if not active).</p><p>A solution without delay is also active. An active solution may be delayed. The optimal solution to a scheduling problem is an active solution but not necessarily without delay.</p></sec><sec id="s1_5"><title>1.5. Solution Methods</title><p>Like all optimization problems, a scheduling problem can be solved with exact or heuristic methods depending on its complexity [<xref ref-type="bibr" rid="scirp.96189-ref6">6</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref7">7</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref8">8</xref>].</p><p>A widely used construction method for solving scheduling problems is the “dispatching rules” method. It is a construction method that, in the initialisation phase, orders operations on the basis of rules or priority indexes, and then builds the solution by assigning them, in this order, to the available machines.</p><p>Priority rules are static if the value of the index does not depend on the start time of the operation, otherwise dynamic. For some problems, when the priority rule is properly chosen, the method obtains the best solution. The most commonly used static priority rules are:</p><p>FCFS (First Come First Served): Increasing release time;</p><p>WSPT (Weighted Shortest Processing Time): Decreasing ratio w j / p j or, if w j = 1   ∀ j , increasing processing time;</p><p>LPT (Longest Processing Time): Decreasing processing time;</p><p>EDD (Earliest Due Date): Increasing expiry time;</p><p>MST (Minimum Slack Time): Increasing value of slack s l j = d j − r j − p j (dynamic).</p><p>CR (Critical Ratio) ( d j − r j ) / p j : Increasing value of the ratio ( d j − r j ) / p j (dynamic).</p><p>The following section illustrates the scheduling problem applied to a typical CPU processing environment; then the Simulated Annealing technique is presented, followed by two mathematical models formalising the scheduling problem in terms of objective function and related constraints. The final sections deal with the algorithm derived from the application of SA to the CPU scheduling problem, the related computational tests and conclusions.</p></sec></sec><sec id="s2"><title>2. The Scheduling Problem in the Processing Environment</title><p>With reference to the management of the Central Processing Unit, it is fundamental to have an algorithm that specifies the sequence according to which the processing service is assigned to a specific job. This algorithm is called scheduler and implements some computing methodologies which can be very time-consuming [<xref ref-type="bibr" rid="scirp.96189-ref9">9</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref10">10</xref>]. For example, it may be more expensive to run the scheduler job than the entire sequence to process.</p><p>It is therefore important to indicate a “cost” function with which the weight of each possible sequence can be measured: based on this, it is necessary to find a sequence order that allows the minimisation of the cost function. It is therefore clear that scheduling issues are intimately linked to decisions about what needs to be done and how it needs to be done.</p><p>Given a problem, we will say that we can extract the sequence requests associated with this problem when the following assumptions are met:</p><p>1) The jobs to be executed are fully known, and may not be announced to the scheduling process simultaneously but sequentially over time;</p><p>2) The resources that can be used in the execution of the work are fully specified;</p><p>3) The sequence of core tasks required to perform each of the jobs is known.</p><p>The scheduling problem can be solved in several ways [<xref ref-type="bibr" rid="scirp.96189-ref11">11</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref12">12</xref>]. A first way is to enumerate all the possible sequences, calculating the value of the objective function, to choose the sequence which corresponds to the lowest value of the objective function. For example if we have 10 jobs on 4 machines, we have to calculate the value of the objective function for each of the 10! possible permutations. This method then becomes not available for medium and large scheduling problems.</p><p>Other classic methods that solve the problem exactly consist of algorithms for branch-and-bound [<xref ref-type="bibr" rid="scirp.96189-ref13">13</xref>], truncated branch-and-bound [<xref ref-type="bibr" rid="scirp.96189-ref14">14</xref>], dynamic programming [<xref ref-type="bibr" rid="scirp.96189-ref15">15</xref>]. In the following we will examine the solution approach known as Simulated Annealing, an approach which derives from the controlled lowering of temperature in physical systems.</p></sec><sec id="s3"><title>3. Simulated Annealing</title><p>Simulated annealing (SA) [<xref ref-type="bibr" rid="scirp.96189-ref16">16</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref17">17</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref18">18</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref19">19</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref20">20</xref>] is an approach based on statistical mechanics concepts, and it is motivated by an analogy with the behaviour of physical systems during the cooling process. This is a heuristic method for global optimization which requires no particular assumption on the objective function (e.g. convexity).</p><p>This analogy is best illustrated in terms of the physics of single crystal formation starting from a melting phase. The temperature of this “molten crystal” is then very slowly reduced until the crystal structure is formed. If cooling is carried out very quickly, undesirable phenomena occur as dislocations and polycrystalline phases. In particular, very large irregularities are enclosed in the structure of the crystal and the level of potential energy incorporated is much higher than that which would exist in a perfect single crystal.</p><p>This “quick cooling” process can be seen as similar to local optimization (<xref ref-type="table" rid="table1">Table 1</xref>). The states of the physical system correspond to the solutions of a combinatorial optimization problem; the energy of a state corresponds to the cost of a solution and the minimum energy, or fundamental state, corresponds to an optimal solution.</p><table-wrap id="table1" ><label><xref ref-type="table" rid="table1">Table 1</xref></label><caption><title> The analogy between the physical system and the discrete optimization problem</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >Physical System</th><th align="center" valign="middle" >Optimization Problem</th></tr></thead><tr><td align="center" valign="middle" >State</td><td align="center" valign="middle" >Feasible solution</td></tr><tr><td align="center" valign="middle" >Energy</td><td align="center" valign="middle" >Cost</td></tr><tr><td align="center" valign="middle" >Fundamental state</td><td align="center" valign="middle" >Optimal solution</td></tr><tr><td align="center" valign="middle" >Quick cooling</td><td align="center" valign="middle" >Local search</td></tr><tr><td align="center" valign="middle" >Accurate annealing</td><td align="center" valign="middle" >Simulated annealing</td></tr></tbody></table></table-wrap><p>When the temperature is, theoretically, at absolute zero Kelvin no state transition can lead to a higher energy state. Therefore, as in local optimization, upward movements are forbidden and the consequences of this may be undesirable.</p><p>When crystals begin to form, the risk of undesirable local states is avoided by lowering the temperature very slowly, with a process called accurate annealing. In this process the temperature drops very slowly through a series of levels, each maintained long enough to allow the search for equilibrium—at that temperature—for the crystal. As long as the temperature is larger than zero Kelvin, upward movements are always possible. By not allowing the temperature to deviate from that one compatible with the energy level of the current equilibrium, we can hope to avoid local optima until we are relatively close to the basic state.</p><p>SA is the algorithmic counterpart of this physical annealing process. Its name refers to the technique of simulation of the physical annealing process in conjunction with an annealing schedule of temperature decrease. It can be seen as an extension of the local optimization technique [<xref ref-type="bibr" rid="scirp.96189-ref21">21</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref22">22</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref23">23</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref24">24</xref>], where the initial solution is repeatedly improved by small local perturbations until none of these perturbations improves the solution. SA randomizes this procedure in such a way as to occasionally allow upward movements, i.e. perturbations that worsen the solution, and this in an attempt to reduce the probability of blocking in a locally optimal but overall poor solution.</p><p>This technique was proposed by [<xref ref-type="bibr" rid="scirp.96189-ref25">25</xref>] and used in the field of statistical physics to determine the properties of metal alloys at a given temperature. The possibility of solving combinatorial optimization problems have been demonstrated independently by [<xref ref-type="bibr" rid="scirp.96189-ref26">26</xref>] and [<xref ref-type="bibr" rid="scirp.96189-ref27">27</xref>]. Further applications have been carried out with great success, as shown in [<xref ref-type="bibr" rid="scirp.96189-ref28">28</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref29">29</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref30">30</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref31">31</xref>].</p><p>A simple scheme of simulated annealing is as follows:</p><p>1) Consider an initial solution S</p><p>2) Until you have a freeze</p><p>a) For w : = 0 up to the number of neighbors considered</p><p>i) Let S’ an unexamined neighbor of S</p><p>ii) If Cost(S’) &lt; Cost(S) then S : = S ′</p><p>else set S : = S ′ with a certain probability</p><p>b) Cool the temperature</p><p>3) Return S</p><p>From what reported above it is clear that the fundamental parameters for the SA phase are:</p><p>Freezing. This consists of establishing the criteria for stopping the algorithm.</p><p>Temperature. This is a value on which the probability of accepting upward movements depends. At each iteration this temperature is reduced by a constant rate called cooling.</p><p>Number of neighbors to explore. Each iteration considers a (fixed) number of sequences close to the one considered.</p><p>SA is widely applicable in local optimization problems. It seems to produce better solutions than other local optimization techniques, as it permits you to get out of locally excellent but globally poor solutions by allowing upward movements with a certain probability.</p></sec><sec id="s4"><title>4. Mathematical Models</title><p>In Subection 1.1, we indicated with the term completion time ( C j ) a value that</p><p>depends on the particular scheduling sequence. If a job is in position j in the sequence, its completion time is the completion time of the job at position j − 1 plus its processing time. We will denote with the term total completion time the sum of the completion times of each individual job.</p><p>The sequencing problems that we will deal with are called non preemptive: the job that is in the processing state cannot be interrupted for any reason.</p><p>For the solution of scheduling problems we describe two mathematical models [<xref ref-type="bibr" rid="scirp.96189-ref32">32</xref>] that formalise it. The first model formulates the problem of scheduling n jobs on m machines that minimises the total completion time. We indicate with</p><p>x i j k the variable that is equal to 1 if job j is the k-th job executed on the machine i, 0 otherwise. We also indicated p i j the processing time of job j on machine i.</p><p>The model is therefore as follows:</p><p>Minimize     ∑ i = 1 m ∑ j = 1 n ∑ k = 1 n     p i j x i j k     subject   to :   ∑ k = 1 n ∑ i = 1 m     x i j k = 1   ( j = 1 , ⋯ , n ) ∑ j = 1 n     x i j k ≤ 1   ( k = 1 , ⋯ , n ;   i = 1 , ⋯ , m ) x i j k ∈ { 0 , 1 }   ( i = 1 , ⋯ , m ; j , k = 1 , ⋯ , n )</p><p>where the first constraint binds the j-th job to run as k-th on the i-th machine for some i and j.</p><p>The second model concerns the scheduling of n jobs on m machines that minimizes the sum of the single completion times. By specifying with   C i j k = ∑ l = 1 k     p i j x i j l the completion time of job j scheduled as k-th on machine i, the related mathematical model is therefore:</p><p>Minimize     ∑ i = 1 m ∑ j = 1 n ∑ k = 1 n     C i j k       subject   to :   ∑ k = 1 n ∑ i = 1 m     x i j k = 1     ( j = 1 , ⋯ , n ) ∑ j = 1 n     x i j k ≤ 1     ( k = 1 , ⋯ , n ;   i = 1 , ⋯ , m ) x i j k ∈ { 0 , 1 }     ( i = 1 , ⋯ , m ;   j , k = 1 , ⋯ , n )</p></sec><sec id="s5"><title>5. The Simulated Annealing Algorithm</title><p>The problem that we are going to solve with the simulated annealing technique can be summarized as follows [<xref ref-type="bibr" rid="scirp.96189-ref33">33</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref34">34</xref>] [<xref ref-type="bibr" rid="scirp.96189-ref35">35</xref>] : To schedule a sequence of n jobs on m machines establishing that the order of the n jobs is the same on each of the m machines.</p><sec id="s5_1"><title>5.1. Basic Parameters</title><p>Basic parameters for the phase of simulated annealing are:</p><p>Initialization. Choice of an initial solution. In theory the choice of an initial solution has no effect on the quality of the final solution, i.e. the solution converges to the overall optimum independently of the initial solution [<xref ref-type="bibr" rid="scirp.96189-ref36">36</xref>]. There are, however, experimentally verified exceptions to this theory, in which it has been shown that sometimes the process of convergence to the optimal solution is more rapid if one takes as the initial solution a solution obtained by means of a good heuristic [<xref ref-type="bibr" rid="scirp.96189-ref37">37</xref>]. However, the overall computational time for an approximate solution starting from a “good” initial solution is often higher than the computational time needed to obtain an approximate solution starting from any initial solution. The reason for this approach is to be found in the peculiarity of the mechanism that generates the perturbations.</p><p>Selection of a mechanism that generates small perturbations, to pass from one configuration to another one. The perturbation pattern is a crucial element to obtain good performances. The chosen perturbation scheme consists in considering two randomly generated numbers and exchanging places for the jobs that in the scheduling queue occupy the positions relative to the random numbers chosen.</p></sec><sec id="s5_2"><title>5.2. Data Structure</title><p>The data structure chosen for the representation of the j-th job (with   0 &lt; j ≤ n − 1 ) implements the most important definitions of Subsection 1.1 as follows:</p><p>p ( i ) , ∀ 0 ≤ i ≤ m − 1</p><p>It is a vector that stores the job’s processing time on the i-th processor (machine). These data are read from the input stream.</p><p>tot<sub>p</sub></p><p>This is the total processing time of the job, obtained by summing the processing time of the job on all processors = ∑ i = 1 m     p ( i ) .</p><p>d</p><p>Job due date. This data is read from the input stream and is calculated by the generator in the following way:</p><p>d = t o t p + ( input   percentage   of   t o t p )</p><p>c</p><p>This is the completion time of the job; its value depends on the particular permutation of the scheduling queue. If the job is in the j-th position in the scheduling queue, then its completion time is given by the value of the completion time of the job that precedes it in the scheduling queue plus its own processing time.</p><p>late</p><p>This is the late work [<xref ref-type="bibr" rid="scirp.96189-ref12">12</xref>] value of the job. It is computed as follows:</p><p>&#183; If c − d ≤ 0 then l a t e = 0</p><p>&#183; If 0 &lt; c − d ≤ t o t p then l a t e = c − d</p><p>&#183; If c − d &gt; t o t p then l a t e = t o t p</p><p>Other useful information for understanding the algorithm are:</p><p>Actual order</p><p>This is the scheduling order of the jobs currently considered. The order following the reading of the data from the input stream is assumed to be 0,1,2, ⋯ , n − 1 .</p><p>Best order</p><p>It is the job scheduling order that obtains the minimum from the objective function. This minimum value is stored in the variable BOF (Best Objective Function).</p><p>Parameters chosen for the simulated annealing phase are:</p><p>Freezing criterion</p><p>A freeze occurs when the algorithm, for MAXITERATIONS times, does not perform neither a downhill nor an uphill movement.</p><p>Temperature</p><p>The initial temperature for the simulated annealing phase is set in the temperature parameter.</p><p>Cooling</p><p>At each iteration, the temperature is cooled by this parameter.</p><p>L</p><p>Number of neighbors to visit at each iteration.</p></sec><sec id="s5_3"><title>5.3. The Proposed Algorithm</title><p>The proposed algorithm consists of two nested cycles. Basically, it chooses two integer random numbers (i and j) in the range { 0,1, ⋯ , n − 1 } ; then exchanges job i and job j in the scheduling queue; finally it calculates the value of the objective function. If this value is lower than the value stored in BOF, the scheduling order is stored and the variable BOF is updated. Otherwise, if the value worsens the objective function, a probability is computed on the basis of which the worsening of the objective function is accepted.</p><p>The detailed algorithm is shown in <xref ref-type="fig" rid="fig4">Figure 4</xref>. Its strength lies in computing the value of the objective function without having to physically exchange jobs i and j.</p></sec><sec id="s5_4"><title>5.4. Application Example</title><p>Let’s take an example of how the algorithm works. Let’s suppose we have the situation represented in <xref ref-type="table" rid="table2">Table 2</xref>, and we have chosen the random indexes 2 and 4. The queue resulting by exchanging the jobs that occupy these positions in the actual order queue is shown in <xref ref-type="table" rid="table3">Table 3</xref>.</p><table-wrap id="table2" ><label><xref ref-type="table" rid="table2">Table 2</xref></label><caption><title> Initial job sequence</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >actual order</th><th align="center" valign="middle" >0</th><th align="center" valign="middle" >1</th><th align="center" valign="middle" >2</th><th align="center" valign="middle" >3</th><th align="center" valign="middle" >4</th><th align="center" valign="middle" >5</th><th align="center" valign="middle" >6</th></tr></thead><tr><td align="center" valign="middle" >Machine 0</td><td align="center" valign="middle" >10</td><td align="center" valign="middle" >40</td><td align="center" valign="middle" >80</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >50</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >70</td></tr><tr><td align="center" valign="middle" >Machine 1</td><td align="center" valign="middle" >8</td><td align="center" valign="middle" >45</td><td align="center" valign="middle" >87</td><td align="center" valign="middle" >22</td><td align="center" valign="middle" >52</td><td align="center" valign="middle" >13</td><td align="center" valign="middle" >75</td></tr><tr><td align="center" valign="middle" >Machine 2</td><td align="center" valign="middle" >12</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >85</td><td align="center" valign="middle" >20</td><td align="center" valign="middle" >50</td><td align="center" valign="middle" >18</td><td align="center" valign="middle" >48</td></tr><tr><td align="center" valign="middle" >tot<sub>p</sub></td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >115</td><td align="center" valign="middle" >252</td><td align="center" valign="middle" >72</td><td align="center" valign="middle" >152</td><td align="center" valign="middle" >46</td><td align="center" valign="middle" >193</td></tr><tr><td align="center" valign="middle" >d</td><td align="center" valign="middle" >33</td><td align="center" valign="middle" >126.5</td><td align="center" valign="middle" >277.2</td><td align="center" valign="middle" >79.2</td><td align="center" valign="middle" >167.2</td><td align="center" valign="middle" >50.6</td><td align="center" valign="middle" >212.3</td></tr><tr><td align="center" valign="middle" >c</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >145</td><td align="center" valign="middle" >397</td><td align="center" valign="middle" >469</td><td align="center" valign="middle" >621</td><td align="center" valign="middle" >667</td><td align="center" valign="middle" >860</td></tr><tr><td align="center" valign="middle" >late</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >18.5</td><td align="center" valign="middle" >119.8</td><td align="center" valign="middle" >72</td><td align="center" valign="middle" >152</td><td align="center" valign="middle" >46</td><td align="center" valign="middle" >193</td></tr><tr><td align="center" valign="middle" >best order</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >5</td><td align="center" valign="middle" >6</td></tr></tbody></table></table-wrap><table-wrap id="table3" ><label><xref ref-type="table" rid="table3">Table 3</xref></label><caption><title> Permuted job sequence</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >actual order</th><th align="center" valign="middle" >0</th><th align="center" valign="middle" >1</th><th align="center" valign="middle" >4</th><th align="center" valign="middle" >3</th><th align="center" valign="middle" >2</th><th align="center" valign="middle" >5</th><th align="center" valign="middle" >6</th></tr></thead><tr><td align="center" valign="middle" >Machine 0</td><td align="center" valign="middle" >10</td><td align="center" valign="middle" >40</td><td align="center" valign="middle" >50</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >80</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >70</td></tr><tr><td align="center" valign="middle" >Machine 1</td><td align="center" valign="middle" >8</td><td align="center" valign="middle" >45</td><td align="center" valign="middle" >52</td><td align="center" valign="middle" >22</td><td align="center" valign="middle" >87</td><td align="center" valign="middle" >13</td><td align="center" valign="middle" >75</td></tr><tr><td align="center" valign="middle" >Machine 2</td><td align="center" valign="middle" >12</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >50</td><td align="center" valign="middle" >20</td><td align="center" valign="middle" >85</td><td align="center" valign="middle" >18</td><td align="center" valign="middle" >48</td></tr><tr><td align="center" valign="middle" >tot<sub>p</sub></td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >115</td><td align="center" valign="middle" >152</td><td align="center" valign="middle" >72</td><td align="center" valign="middle" >252</td><td align="center" valign="middle" >46</td><td align="center" valign="middle" >193</td></tr><tr><td align="center" valign="middle" >d</td><td align="center" valign="middle" >33</td><td align="center" valign="middle" >126.5</td><td align="center" valign="middle" >167.2</td><td align="center" valign="middle" >79.2</td><td align="center" valign="middle" >277.2</td><td align="center" valign="middle" >50.6</td><td align="center" valign="middle" >212.3</td></tr><tr><td align="center" valign="middle" >c</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >145</td><td align="center" valign="middle" >297</td><td align="center" valign="middle" >369</td><td align="center" valign="middle" >621</td><td align="center" valign="middle" >667</td><td align="center" valign="middle" >860</td></tr><tr><td align="center" valign="middle" >late</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >18.5</td><td align="center" valign="middle" >129.8</td><td align="center" valign="middle" >72</td><td align="center" valign="middle" >252</td><td align="center" valign="middle" >46</td><td align="center" valign="middle" >193</td></tr><tr><td align="center" valign="middle" >best order</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >5</td><td align="center" valign="middle" >6</td></tr></tbody></table></table-wrap><p>In this case we have worsened the value of the objective function (the late work values for jobs 2 and 4 increased). In fact the best order queue is unchanged, but it remains evident that the completion time values:</p><p>&#183; for the first two positions (job 0 and job 1) remained unchanged (respectively 30 and 145, being their positions unaltered);</p><p>&#183; for positions 2 (now job 4) and 3 (job 3, unchanged) have been decreased by the same amount (100); this decrease is precisely equal to the difference d i f f = t o t p ( 4 ) − t o t p ( 2 ) of the initial scheme;</p><p>&#183; for the jobs at positions 4 (now job 2), 5 (job 5, unchanged) and 6 (job 6, unchanged) remained the same.</p><p>For late work values (see 5.2) we have instead:</p><p>&#183; l a t e has not changed for jobs 0 and 1 in the new scheduling queue;</p><p>&#183; for job 4 (that occupies position 2 in the new queue) we have 0 &lt; c − d = 297 − 167.2 = 129.8 ≤ t o t p = 152 ⇒ l a t e = c − d = 129.8 ;</p><p>&#183; for job 3 we have c − d = 369 − 79.2 = 289.8 &gt; t o t p = 72 ⇒ l a t e = t o t p = 72 ;</p><p>&#183; for job 2 (at position 4 in the new scheduling queue) we have c − d = 621 − 277.2 = 343.8 &gt; t o t p = 252 ⇒ l a t e = t o t p = 152 ;</p><p>&#183; for jobs 5 and 6 the late values are unchanged.</p><p>In general, if we intend to exchange job i with job j ( i &lt; j ):</p><p>&#183; the values of late work will be unchanged for jobs in positions { 0,1, ⋯ , i − 1 } ;</p><p>&#183; the following value is computed: d i f f = t o t p ( j ) − t o t p ( i ) ;</p><p>&#183; for job in position i, the new late work value is calculated by comparing the quantity: d i f f + c ( i ) − d ( j ) with the due date value of process j;</p><p>&#183; for jobs in position { i + 1, i + 2, ⋯ , j − 1 } the late work value is computed by comparing the quantity: d i f f + c ( k ) − d ( k ) with the due date value of process k, where k ∈ { i + 1, i + 2, ⋯ , j − 1 } ;</p><p>&#183; for job in position j the new late work value is computed by comparing the quantity: d i f f + c ( j ) − d ( i ) with the due date value of process i;</p><p>&#183; for jobs in position { j + 1, j + 2, ⋯ , n − 1 } the late work values are unchanged.</p><p>We can therefore compute the value of the objective function without having to build the tables for the new schedule queue, but simply by processing information that is already available without using memory quantities.</p></sec></sec><sec id="s6"><title>6. Computational Tests</title><p>Before analyzing the computational tests, let us consider the (random) generator of the numbers that form the processing time values. For each job on each machine a random integer number is generated in the range [ 0,100 ] ∩ N which represents the processing time value of the job on the processor.</p><p>The seed of the random number generator is initialized to a different number depending on the system time. The due date time is instead calculated by adding the sum of the values of the processing time of the job on all the available machines, increased by a percentage given by input.</p><p>Data to be considered common to all tests are:</p><p>&#183; increase percentage for the due date values: 10;</p><p>&#183; number of neighbors to be explored: 10;</p><p>&#183; number of iterations per problem: 15.</p><p>With regard to the number of neighbors to be explored, the above value was chosen because from an experimental check it was noted that for a smaller number (of neighbors) you get results close to the optimal one, while for a larger number you will keep (in the cases we tested) values that often coincide with the optimal one but, being computationally severe, they negatively affect the execution time of the approximation algorithm.</p><p>Some test cases are presented to verify the computational weight on the basis of the hypotheses made.</p><p>Guidance for understanding computational testing.</p><p><xref ref-type="table" rid="table4">Table 4</xref> summarises the tests performed. The indications at the top of the columns indicate:</p><p>n: number of jobs to be scheduled;</p><p>m: number of machines used;</p><p>OF: optimum value of the objective function;</p><p>OF = SA: number of times that the result obtained with the approximated algorithm of simulated annealing coincides with the optimal one;</p><p>T<sub>min</sub>: minimum time (in seconds) taken by the simulated annealing algorithm to find a result that coincided with the optimum;</p><p>T<sub>max</sub>: maximum time (in seconds) taken by the simulated annealing algorithm to find a result that coincided with the optimum;</p><p>OF ≠ SA: number of times the result obtained by the approximated simulated annealing algorithm differs from the optimum one;</p><p>min: minimum value used by the simulated annealing algorithm to obtain a result that does not coincide with the optimum;</p><p>T: time (in seconds) taken by the simulated annealing algorithm to obtain a result that does not coincide with the optimum;</p><p>Δ%: average percentage difference.</p><table-wrap id="table4" ><label><xref ref-type="table" rid="table4">Table 4</xref></label><caption><title> Computational tests</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >n</th><th align="center" valign="middle" >m</th><th align="center" valign="middle" >OF</th><th align="center" valign="middle" >OF = SA</th><th align="center" valign="middle" >T<sub>min</sub> (sec.)</th><th align="center" valign="middle" >T<sub>max</sub> (sec.)</th><th align="center" valign="middle" >OF ≠ SA</th><th align="center" valign="middle" >min</th><th align="center" valign="middle" >T (sec.)</th><th align="center" valign="middle" >Δ%</th><th align="center" valign="middle" >max</th><th align="center" valign="middle" >T (sec.)</th><th align="center" valign="middle" >Δ%</th></tr></thead><tr><td align="center" valign="middle" >10</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >1112.200</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >0.04</td><td align="center" valign="middle" >0.35</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td></tr><tr><td align="center" valign="middle" >10</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >1312.600</td><td align="center" valign="middle" >13</td><td align="center" valign="middle" >0.06</td><td align="center" valign="middle" >0.33</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >1338.6</td><td align="center" valign="middle" >0.03</td><td align="center" valign="middle" >1.94</td><td align="center" valign="middle" >1353.6</td><td align="center" valign="middle" >0.01</td><td align="center" valign="middle" >3.02</td></tr><tr><td align="center" valign="middle" >10</td><td align="center" valign="middle" >5</td><td align="center" valign="middle" >2393.210</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >0.06</td><td align="center" valign="middle" >0.33</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td></tr><tr><td align="center" valign="middle" >11</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >1170.000</td><td align="center" valign="middle" >13</td><td align="center" valign="middle" >0.05</td><td align="center" valign="middle" >0.64</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >1195.0</td><td align="center" valign="middle" >0.02</td><td align="center" valign="middle" >2.09</td><td align="center" valign="middle" >1195.0</td><td align="center" valign="middle" >0.08</td><td align="center" valign="middle" >2.09</td></tr><tr><td align="center" valign="middle" >11</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >1819.800</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >0.03</td><td align="center" valign="middle" >0.34</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td></tr><tr><td align="center" valign="middle" >11</td><td align="center" valign="middle" >5</td><td align="center" valign="middle" >2433.900</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >0.05</td><td align="center" valign="middle" >0.31</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td><td align="center" valign="middle" >--</td></tr></tbody></table></table-wrap></sec><sec id="s7"><title>7. Conclusions</title><p>In this paper we present a randomised algorithm using the heuristic technique of Simulated Annealing (SA)—which proved its positive result as a single-state optimization search algorithm for both discrete and continuous problems—for solving scheduling problems. The main goal behind our randomisation is to improve the solutions generated by classical job scheduling algorithms using SA to explore the search space in an efficient manner. The proposed hybrid algorithm were evaluated, and the experimental results show that it provides a performance enhancement in terms of best solutions and running time when compared to job scheduling and SA as stand-alone algorithms.</p><p>The followed solution method is of a non-deterministic type. It is based on the probability of obtaining an optimal solution in relation to the current situation of the objective function and the possible improvement due to a controlled movement in the space of the feasible solutions—linked to the concept of “temperature” of the algorithm—until it reaches the freezing point, that is an optimal acceptable one.</p><p>The choice made in our method prescinds from the initial solution and it rather takes into account the total computing time required, since it is more important to obtain an “almost” optimal feasible solution in a reasonable time rather than trying to arrive at the optimal solution in a theoretically unlimited time.</p></sec><sec id="s8"><title>Conflicts of Interest</title><p>The authors declare no conflicts of interest regarding the publication of this paper.</p></sec><sec id="s9"><title>Cite this paper</title><p>Gallo, C. and Capozzi, V. (2019) A Simulated Annealing Algorithm for Scheduling Problems. Journal of Applied Mathematics and Physics, 7, 2579-2594. https://doi.org/10.4236/jamp.2019.711176</p></sec></body><back><ref-list><title>References</title><ref id="scirp.96189-ref1"><label>1</label><mixed-citation publication-type="other" xlink:type="simple">Kan, A.R. (2012) Machine Scheduling Problems: Classification, Complexity and Computations. Springer Science &amp; Business Media, New York.</mixed-citation></ref><ref id="scirp.96189-ref2"><label>2</label><mixed-citation publication-type="other" xlink:type="simple">Horn, W.A. (1974) Some Simple Scheduling Algorithms. Naval Research Logistics Quarterly, 21, 177-185. https://doi.org/10.1002/nav.3800210113</mixed-citation></ref><ref id="scirp.96189-ref3"><label>3</label><mixed-citation publication-type="other" xlink:type="simple">B&amp;#322;a&amp;#380;ewicz, J. (1987) Selected Topics in Scheduling Theory. North-Holland Mathematics Studies, 132, 1-59. https://doi.org/10.1016/S0304-0208(08)73231-6</mixed-citation></ref><ref id="scirp.96189-ref4"><label>4</label><mixed-citation publication-type="other" xlink:type="simple">Jain, A.S. and Meeran, S. (1998) A State-of-the-Art Review of Job-Shop Scheduling Techniques. Technical Report, Department of Applied Physics, Electronic and Mechanical Engineering, University of Dundee, Dundee, Scotland.</mixed-citation></ref><ref id="scirp.96189-ref5"><label>5</label><mixed-citation publication-type="other" xlink:type="simple">Mason, E.A. and Kronstadt, B. (1967) Graham’s Laws of Diffusion and Effusion. Journal of Chemical Education, 44, 740. https://doi.org/10.1021/ed044p740</mixed-citation></ref><ref id="scirp.96189-ref6"><label>6</label><mixed-citation publication-type="other" xlink:type="simple">Abraham, A., Buyya, R. and Nath, B. (2000) Nature’s Heuristics for Scheduling Jobs on Computational Grids. The 8th IEEE International Conference on Advanced Computing and Communications (ADCOM 2000), 45-52.</mixed-citation></ref><ref id="scirp.96189-ref7"><label>7</label><mixed-citation publication-type="other" xlink:type="simple">Kaplano&amp;#287;lu, V. (2016) An Object-Oriented Approach for Multi-Objective Flexible Job-Shop Scheduling Problem. Expert Systems with Applications, 45, 71-84. https://doi.org/10.1016/j.eswa.2015.09.050</mixed-citation></ref><ref id="scirp.96189-ref8"><label>8</label><mixed-citation publication-type="other" xlink:type="simple">B&amp;#322;a&amp;#380;ewicz, J., Domschke, W. and Pesch, E. (1996) The Job Shop Scheduling Problem: Conventional and New Solution Techniques. European Journal of Operational Research, 93, 1-33. https://doi.org/10.1016/0377-2217(95)00362-2</mixed-citation></ref><ref id="scirp.96189-ref9"><label>9</label><mixed-citation publication-type="other" xlink:type="simple">&amp;#199;ali&amp;#351;, B. and Bulkan, S. (2015) A Research Survey: Review of AI Solution Strategies of Job Shop Scheduling Problem. Journal of Intelligent Manufacturing, 26, 961-973. https://doi.org/10.1007/s10845-013-0837-8</mixed-citation></ref><ref id="scirp.96189-ref10"><label>10</label><mixed-citation publication-type="other" xlink:type="simple">Jamali, S., Alizadeh, F. and Sadeqi, S. (2016) Task Scheduling in Cloud Computing Using Particle Swarm Optimization. The Book of Extended Abstracts, 192.</mixed-citation></ref><ref id="scirp.96189-ref11"><label>11</label><mixed-citation publication-type="other" xlink:type="simple">Gonzalez, T.F. (2007) Handbook of Approximation Algorithms and Metaheuristics. Chapman and Hall/CRC, New York.</mixed-citation></ref><ref id="scirp.96189-ref12"><label>12</label><mixed-citation publication-type="other" xlink:type="simple">Potts, C.N. and Van Wassenhove, L.N. (1992) Approximation Algorithms for Scheduling a Single Machine to Minimize Total Late Work. Operations Research Letters, 11, 261-266. https://doi.org/10.1016/0167-6377(92)90001-J</mixed-citation></ref><ref id="scirp.96189-ref13"><label>13</label><mixed-citation publication-type="other" xlink:type="simple">Morrison, D.R., Jacobson, S.H., Sauppe, J.J. and Sewell, E.C. (2016) Branch-and-Bound Algorithms: A Survey of Recent Advances in Searching, Branching, and Pruning. Discrete Optimization, 19, 79-102.https://doi.org/10.1016/j.disopt.2016.01.005</mixed-citation></ref><ref id="scirp.96189-ref14"><label>14</label><mixed-citation publication-type="other" xlink:type="simple">Sels, V., Coelho, J., Dias, A.M. and Vanhoucke, M. (2015) Hybrid Tabu Search and a Truncated Branch-and-Bound for the Unrelated Parallel Machine Scheduling Problem. Computers &amp; Operations Research, 53, 107-117.https://doi.org/10.1016/j.cor.2014.08.002</mixed-citation></ref><ref id="scirp.96189-ref15"><label>15</label><mixed-citation publication-type="other" xlink:type="simple">Bellman, R.E. and Dreyfus, S.E. (2015) Applied Dynamic Programming. Volume 2050, Princeton University Press, Princeton, NJ.</mixed-citation></ref><ref id="scirp.96189-ref16"><label>16</label><mixed-citation publication-type="other" xlink:type="simple">Krishnaraj, J., Pugazhendhi, S., Rajendran, C. and Thiagarajan, S. (2019) Simulated Annealing Algorithms to Minimise the Completion Time Variance of Jobs in Permutation Flowshops. International Journal of Industrial and Systems Engineering, 31, 425-451. https://doi.org/10.1504/IJISE.2019.099188</mixed-citation></ref><ref id="scirp.96189-ref17"><label>17</label><mixed-citation publication-type="other" xlink:type="simple">Ogbu, F.A. and Smith, D.K. (1990) The Application of the Simulated Annealing Algorithm to the Solution of the n/m/Cmax Flowshop Problem. Computers &amp; Operations Research, 17, 243-253. https://doi.org/10.1016/0305-0548(90)90001-N</mixed-citation></ref><ref id="scirp.96189-ref18"><label>18</label><mixed-citation publication-type="other" xlink:type="simple">Chakraborty, S. and Bhowmik, S. (2015) An Efficient Approach to Job Shop Scheduling Problem Using Simulated Annealing. International Journal of Hybrid Information Technology, 8, 273-284. https://doi.org/10.14257/ijhit.2015.8.11.23</mixed-citation></ref><ref id="scirp.96189-ref19"><label>19</label><mixed-citation publication-type="other" xlink:type="simple">Cruz-Chávez, M.A., Martínez-Rangel, M.G. and Cruz-Rosales, M.H. (2017) Accelerated Simulated Annealing Algorithm Applied to the Flexible Job Shop Scheduling Problem. International Transactions in Operational Research, 24, 1119-1137.https://doi.org/10.1111/itor.12195</mixed-citation></ref><ref id="scirp.96189-ref20"><label>20</label><mixed-citation publication-type="other" xlink:type="simple">Sel, C. and Hamzadayi, A. (2015) A Simulated Annealing Approach Based Simulation-Optimization to the Dynamic Job-Shop Scheduling Problem. Pamukkale University Journal of Engineering Sciences, 24, 665-674.</mixed-citation></ref><ref id="scirp.96189-ref21"><label>21</label><mixed-citation publication-type="other" xlink:type="simple">Akram, K., Kamal, K. and Zeb, A. (2016) Fast Simulated Annealing Hybridized with Quenching for Solving Job Shop Scheduling Problem. Applied Soft Computing, 49, 510-523. https://doi.org/10.1016/j.asoc.2016.08.037</mixed-citation></ref><ref id="scirp.96189-ref22"><label>22</label><mixed-citation publication-type="other" xlink:type="simple">Bissoli, D.C., Altoe, W.A.S., Mauri, G.R. and Amaral, A.R.S. (2018) A Simulated Annealing Metaheuristic for the Bi-Objective Flexible Job Shop Scheduling Problem. 2018 International Conference on Research in Intelligent and Computing in Engineering, San Salvador, El Salvador, 22-24 August 2018, 1-6. https://doi.org/10.1109/RICE.2018.8627907</mixed-citation></ref><ref id="scirp.96189-ref23"><label>23</label><mixed-citation publication-type="other" xlink:type="simple">Kadhim, A.-Z.M., Ali, S.K. and Kassim, M.M. (2018) Solving Machine Scheduling Problem under Fuzzy Processing Time Using the Simulated Annealing Method. Journal of Progressive Research in Mathematics, 14, 2308-2317.</mixed-citation></ref><ref id="scirp.96189-ref24"><label>24</label><mixed-citation publication-type="other" xlink:type="simple">Shivasankaran, N., Kumar, P.S. and Raja, K.V. (2015) Hybrid Sorting Immune Simulated Annealing Algorithm for Flexible Job Shop Scheduling. International Journal of Computational Intelligence Systems, 8, 455-466.https://doi.org/10.1080/18756891.2015.1017383</mixed-citation></ref><ref id="scirp.96189-ref25"><label>25</label><mixed-citation publication-type="other" xlink:type="simple">Metropolis, N., Rosenbluth, A.W., Rosenbluth, M.N., Teller, A.H. and Teller, E. (1953) Equation of State Calculations by Fast Computing Machines. The Journal of Chemical Physics, 21, 1087-1092. https://doi.org/10.1063/1.1699114</mixed-citation></ref><ref id="scirp.96189-ref26"><label>26</label><mixed-citation publication-type="other" xlink:type="simple">Kirkpatrick, S., Gelatt, C.D. and Vecchi, M.P. (1983) Optimization by Simulated Annealing. Science, 220, 671-680. https://doi.org/10.1126/science.220.4598.671</mixed-citation></ref><ref id="scirp.96189-ref27"><label>27</label><mixed-citation publication-type="other" xlink:type="simple">&amp;#268;erny, V. (1985) Thermodynamical Approach to the Traveling Salesman Problem: An Efficient Simulation Algorithm. Journal of Optimization Theory and Applications, 45, 41-51. https://doi.org/10.1007/BF00940812</mixed-citation></ref><ref id="scirp.96189-ref28"><label>28</label><mixed-citation publication-type="other" xlink:type="simple">Aarts, E.H.L. and Van Laarhoven, P.J.M. (1985) Statistical Cooling: A General Approach to Combinatorial Optimization Problems. Philips Journal of Research, 40, 193-226.</mixed-citation></ref><ref id="scirp.96189-ref29"><label>29</label><mixed-citation publication-type="other" xlink:type="simple">Heynderickx, I., De Raedt, H. and Schoemaker, D. (1986) Simulated Anneal Method for the Determination of Spin Hamiltonian Parameters from ESR Data. Journal of Magnetic Resonance, 70, 134-139. https://doi.org/10.1016/0022-2364(86)90367-7</mixed-citation></ref><ref id="scirp.96189-ref30"><label>30</label><mixed-citation publication-type="journal" xlink:type="simple"><name name-style="western"><surname>Lundy</surname><given-names> M. </given-names></name>,<etal>et al</etal>. (<year>2015</year>)<article-title>Applications of the Annealing Algorithm to Combinatorial Problems in Statistics</article-title><source> Biometrika</source><volume> 72</volume>,<fpage> 191</fpage>-<lpage>198</lpage>.<pub-id pub-id-type="doi"></pub-id></mixed-citation></ref><ref id="scirp.96189-ref31"><label>31</label><mixed-citation publication-type="other" xlink:type="simple">Vecchi, M.P. and Kirkpatrick, S. (1983) Global Wiring by Simulated Annealing. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2, 215-222. https://doi.org/10.1109/TCAD.1983.1270039</mixed-citation></ref><ref id="scirp.96189-ref32"><label>32</label><mixed-citation publication-type="other" xlink:type="simple">B&amp;#322;a&amp;#380;ewicz, J., Dror, M. and Weglarz, J. (1991) Mathematical Programming Formulations for Machine Scheduling: A Survey. European Journal of Operational Research, 51, 283-300. https://doi.org/10.1016/0377-2217(91)90304-E</mixed-citation></ref><ref id="scirp.96189-ref33"><label>33</label><mixed-citation publication-type="other" xlink:type="simple">Kolonko, M. (1999) Some New Results on Simulated Annealing Applied to the Job Shop Scheduling Problem. European Journal of Operational Research, 113, 123-136. https://doi.org/10.1016/S0377-2217(97)00420-7</mixed-citation></ref><ref id="scirp.96189-ref34"><label>34</label><mixed-citation publication-type="other" xlink:type="simple">Osman, I.H. and Potts, C.N. (1989) Simulated Annealing for Permutation Flow-Shop Scheduling. Omega, 17, 551-557.https://doi.org/10.1016/0305-0483(89)90059-5</mixed-citation></ref><ref id="scirp.96189-ref35"><label>35</label><mixed-citation publication-type="other" xlink:type="simple">Van Laarhoven, P.J.M., Aarts, E.H.L. and Lenstra, J.K. (1992) Job Shop Scheduling by Simulated Annealing. Operations Research, 40, 113-125.https://doi.org/10.1287/opre.40.1.113</mixed-citation></ref><ref id="scirp.96189-ref36"><label>36</label><mixed-citation publication-type="other" xlink:type="simple">Lundy, M. and Mees, A. (1986) Convergence of an Annealing Algorithm. Mathematical Programming, 34, 111-124. https://doi.org/10.1007/BF01582166</mixed-citation></ref><ref id="scirp.96189-ref37"><label>37</label><mixed-citation publication-type="other" xlink:type="simple">Eusuff, M., Lansey, K. and Pasha, F. (2006) Shuffled Frog-Leaping Algorithm: A Memetic Meta-Heuristic for Discrete Optimization. Engineering Optimization, 38, 129-154. https://doi.org/10.1080/03052150500384759</mixed-citation></ref></ref-list></back></article>