Abstract:
Technical solutions are described for tuning a building control system, such as a variable air volume system, which includes intervened control loops. In one aspect, a method includes receiving a performance objective of the system. The method also includes generating a collection of values for parameters of the control loops based on stored information that includes a stored velocity and a stored position. The method also includes evaluating the collection of values for the parameters by comparing a performance measure and the performance objective of the system. In response to a difference between the performance objective and the performance measure satisfying a predetermined threshold the collection of values are stored and the control loops are configured according to the stored information for the parameters. The present document further describes examples of other aspects such as systems, computer products.

Description:
BACKGROUND 
       [0001]    The present application relates to tuning a building control system, and more specifically, to tuning a Proportional Integral Derivative (PID) controller corresponding to the building control system. 
         [0002]    While PID controllers are applicable to many control problems, they typically provide sub-optimal control. Traditionally, the PID controller is a feedback system, with constant parameters, and no direct knowledge of the process that the PID controller manages. Thus, typically overall performance of the PID controller is reactive. 
       SUMMARY 
       [0003]    According to an embodiment, a method for tuning a system, which includes intervened control loops, includes receiving, by the system, a performance objective of the system. The method also includes generating, by the system, a collection of values for parameters of the control loops based on stored information that includes a stored velocity and a stored position; evaluating, by the system, the collection of values for the parameters of the control loops. The evaluating includes determining, by the system, a performance measure of the system using the collection of values. The evaluating further includes comparing, by the system, the performance measure and the performance objective of the system. The method also includes, in response to a difference between the performance objective and the performance measure satisfying a predetermined threshold, updating the stored information by storing the collection of values as a stored collection of values for the parameters. Further, in response to a predetermined termination condition being satisfied, the control loops are configured according to the stored information for the parameters. 
         [0004]    According to another embodiment, a variable air volume (VAV) system includes a first proportional-integral-derivative (PID) controller that modulates a supply air damper of the VAV system via a first control loop. The VAV system also includes a second PID controller that modulates a reheat coil of the VAV system via a second control loop. The first control loop and the second control loop are intervened with each other. The VAV system also includes a processor that generates a collection of values for parameters of the first control loop and the second control loop based on stored information that includes a stored velocity and a stored position. The processor evaluates the collection of values based on a comparison of a predetermined performance objective of the system and a performance measure calculated based on the collection of values. The processor stores the collection of values as a stored collection of values in response to a difference between the performance objective and the performance measure satisfying a predetermined threshold. The processor, in response to a predetermined termination condition being satisfied, configures the first control loop and the second control loop according to the stored collection of values for the parameters. 
         [0005]    According to yet another embodiment, a computer product for tuning a variable air volume (VAV) system is described. The VAV system includes a first proportional-integral-derivative (PID) controller and a second PID controller. The computer product includes computer readable storage medium having computer executable instructions embodied thereon. The computer readable storage medium includes instructions to generate a collection of values for parameters of the first PID controller and the second PID controller based on stored information that includes a stored velocity and a stored position. The computer readable storage medium also includes instructions to evaluate the collection of values based on a comparison of a predetermined performance objective of the system and a performance measure calculated based on the collection of values. The computer readable storage medium also includes instructions to store the collection of values as a stored collection of values in response to a difference between the performance objective and the performance measure satisfying a predetermined threshold. The computer readable storage medium also includes instructions that in response to a predetermined termination condition being satisfied configure the first PID controller and the second PID controller according to the stored collection of values for the parameters. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0006]    The examples described throughout the present document may be better understood with reference to the following drawings and description. The components in the figures are not necessarily to scale. Moreover, in the figures, like-referenced numerals designate corresponding parts throughout the different views. 
           [0007]      FIG. 1  illustrates a PID controller used in an industrial control system in accordance with an embodiment. 
           [0008]      FIG. 2  illustrates an example circuitry of a VAV system in accordance with an embodiment. 
           [0009]      FIG. 3  illustrates control loops of an example VAV system in accordance with an embodiment. 
           [0010]      FIG. 4  illustrates a flowchart of example logic to tune multiple control loops of a VAV system in accordance with an embodiment. 
       
    
    
     DETAILED DESCRIPTION 
       [0011]    Disclosed here are technical solutions for automatically tuning a PID controller, such as a PID controller in a building control system. For example, in a building control system, such as a variable air volume (VAV) system, controlling a supply air damper and reheat coil affects efficiency of the VAV system. However, PID control loops in the VAV system are traditionally intervened and cannot be easily tuned separately using existing tuning methods. Further, for continuously operating the VAV system at optimal efficiency, the PID control loops are frequently tuned based on knowledge of the process. Hence, usually a technical specialist or an expert engineer tunes the PID controller based on experience, seasonal changes, and operation modes of the VAV system. 
         [0012]    For example, by tuning the three parameters P, I, and D in the PID controller, the controller may provide better control action designed for specific process requirements. Traditionally, PID controllers were tuned manually using simple rules that date back to the  1940   s . These rules are based on process experiments and empirical data. For example, a step response method used to tune the PID controller is based on measurement of an open-loop step response. In another example, a frequency response method that is used is based on a closed loop experiment where the system is brought to a stability boundary under proportional control. However, the traditional rules cause the system to operate poorly. The performance of the VAV system may be measured using various parameters or a combination thereof. For example, the performance of the VAV system may be measured based on energy consumed by the system. Alternatively or in addition the performance may be based on a comfort level of a user of the VAV system, where the comfort level may take into account a rate of change in temperature, humidity, or any other attributes. Of course, other parameters may dictate the performance measurement of the VAV system. 
         [0013]    The technical solutions described herein provide automatic PID controller tuning. For example, the solutions may be used to tune the VAV system. Based on a specific optimization objective such as minimum energy consumption and/or maximum occupant comfort, controller parameters for multiple PID controllers in the VAV system. In one embodiment, the PID control tuning couples a Gain-Phase Margin method with a Particle Swamp Optimization (PSO) algorithm. It is understood that while the examples herein describe tuning a PID controller in a building control system such as a VAV system, the technical solutions described herein are applicable in other settings in which one or more PID controllers are used. 
         [0014]      FIG. 1  illustrates a PID controller  120  being used as a control loop feedback controller in an industrial control system  100 . The PID controller  120  provides a control action designed for process requirements of a plant  130 . The PID controller  120  continuously calculates an “error value” (E) as the difference between a measured process variable (Y) that is measured using a sensor and a desired set point (R). The PID controller  120 , in response, attempts to minimize the error E over time by adjustment of a control variable. For example, the PID controller  120  minimizes the error E by changing a position of a control valve, a damper, or an amount of power supplied to an element in the industrial control system. 
         [0015]    The PID controller  120  is tuned by configuring PID parameters  125 . The PID parameters  125  include the three parameters P, I, and D. P represents present values of the error E (for example, if the error is large and positive, the control output will also be large and positive). I is representative of past values of the error E (for example, if the output is not sufficient to reduce the size of the error, error will accumulate over time, causing the controller to apply stronger output). D is representative of predicted future values of the error E, based on its current rate of change. 
         [0016]      FIG. 2  illustrates an example circuitry of a VAV system  200 . The VAV system  200  in a building control system is a type of a Heating, Ventilating, and Air Conditioning (HVAC) system that regulates airflow in the building, such as in a room, hallway, lobby, or any other space. The VAV system  200  varies airflow at a constant temperature to achieve more precise temperature control, reduced compressor wear, and lower energy consumption. The VAV system  200  includes, among other components, a VAV box  210  that includes a supply air damper  212  and a reheat coil  214 . The supply air damper  212  and the reheat coil  214  regulate flow and temperature of the air circulated by the VAV system  200 . Control of the system&#39;s fan capacity is critical in the VAV system  200 . Without proper and rapid flow rate control, over pressurization damages the VAV system&#39;s  200  ductwork, and/or sealing. Better control and less temperature variation lead to less energy consumption. To achieve optimal control performance through the different seasons, and for multiple operation modes, the VAV system  200  an expert engineer, typically, continuously tunes the VAV system  200  over time, particularly tuning the supply air damper  212  and the reheat coil  214 . 
         [0017]    Tuning the VAV system  200  manually is based on the expert engineer&#39;s experience. For example, in the VAV system  200 , controlling the supply air damper  212  and the reheat coil  214  affects efficiency of the VAV system  200 . The PID control loops in the VAV system  200  are intervened and cannot be easily tuned separately using existing tuning methods. Further, for operating the VAV system  200  at optimal efficiency continuously, the PID control loops should be frequently tuned, based on knowledge of the process. Hence, usually the expert engineer tunes the PID controllers  222  and  224  based on his/her experience, seasonal changes, and operation modes of the VAV system  200 . 
         [0018]    In an example, the VAV system  200  includes a VAV tuner  220 , a processor  230 , a memory  240 , and a user interface  250 . 
         [0019]    The processor  230  may be a central processor of the VAV system  200  responsible for execution of an operating system and control instructions of the VAV system  200 . The processor  230  may be one or more devices operable to execute logic. The logic may include computer executable instructions or computer code embodied in the memory  240  or in other memory that when executed by the processor  230 , cause the processor  230  to perform the features implemented by the logic. The computer code may include instructions executable with the processor  230 . The computer code may include embedded logic. The computer code may be written in any computer language now known or later discovered, such as C++, C#, Java, Pascal, Visual Basic, Perl, HyperText Markup Language (HTML), JavaScript, assembly language, shell script, or any combination thereof. The computer code may include source code and/or compiled code. The processor  230  may be a general processor, central processing unit, server, application specific integrated circuit (ASIC), digital signal processor, field programmable gate array (FPGA), digital circuit, analog circuit, or combinations thereof. The processor  230  may be in communication with the memory  240  and the other components of the VAV system  200 . 
         [0020]    The memory  240  may be non-transitory computer storage medium. The memory  240  may be DRAM, SRAM, Flash, or any other type of memory or a combination thereof. The memory  240  may store control instructions executable by the processor  230 . 
         [0021]    The user interface  250  may include a display, a speaker, a light emitting device (such as a light emitting diode), or any other component. The display may be touch screen enabled, include buttons, or include any other user interaction elements. The user interface  250  may be circuitry, such as processor, memory, communication interfaces, integrated circuits, antennas, resistors, capacitors, and any other hardware components. The user interface  250  may also involve software. For example, the user interface  250  may involve instructions and/or data that may be stored in the memory  240 . The instructions and/or data may control operations of the user interface  250 . The instructions may be computer executable. The data may include parameters and/or preset conditions associated with the user interface  250 . The VAV system  200  receives input data from the user interface  250 , such as the performance objective, a desired temperature level, a desired humidity level, and other such input. 
         [0022]    The VAV tuner  220  tunes the VAV box  210  and other components of the VAV system  200 . For example, the VAV tuner  220  includes a PID controller  222  corresponding to the supply air damper  212  and a PID controller  224  corresponding to the reheat coil  214 . Each of the PID controllers  222  and  224  has a control loop to manage the corresponding circuit of the supply air damper  212  and the reheat coil  214  respectively. The PID controller  222  modulates the supply air damper  212  of the VAV box  210  for cooling and the PID controller  224  modulates the reheat coil valve for heating. When in heating, the VAV box  210  either maintains minimum airflow or modulates the supply air damper  212 . 
         [0023]      FIG. 3  illustrates example control loops of the VAV system  200  in more detail. G 1 (s) and G 2 (s) are system models of the supply air damper  212  and the reheat coil  214  respectively. The PID controllers  222  and  224  control the respective system models according to actuator signals U 1  and U 2  respectively. The VAV box  210  varies the room temperature Y based on the system models G 1 (s) and G 2 (s). In an example, the VAV system  200  may be set to maintain the temperature at a set point R. Accordingly, the VAV system  200  may compare the room temperature Y with the set point R to determine a difference, or error E between the objective temperature and the actual temperature. The VAV tuner  220  tunes the VAV box  210  to increase or decrease the temperature Y to satisfy the objective R. The VAV tuner  220  tunes the VAV box  210  using the actuator signal U 1  from the PID controller  222  to the supply air damper  212  and the actuator signal U 2  from the PID controller  224  to the reheat coil  214 . 
         [0024]    The actuator signals output by the PID controllers  222  and  224  depend on the parameters K P , K I , and K D  of the respective PID controller. For example, the output actuator signals of the two PID controllers  222  and  224  in Laplace form are: 
         [0000]    
       
         
           
             
               
                 u 
                 1 
               
                
               
                 ( 
                 s 
                 ) 
               
             
             = 
             
               
                 e 
                  
                 
                   ( 
                   s 
                   ) 
                 
               
                
               
                 ( 
                 
                   
                     K 
                     
                       p 
                        
                       
                           
                       
                        
                       1 
                     
                   
                   + 
                   
                     
                       K 
                       
                         i 
                          
                         
                             
                         
                          
                         1 
                       
                     
                     s 
                   
                   + 
                   
                     
                       K 
                       
                         d 
                          
                         
                             
                         
                          
                         1 
                       
                     
                      
                     s 
                   
                 
                 ) 
               
             
           
         
       
       
         
           
             
               
                 u 
                 2 
               
                
               
                 ( 
                 s 
                 ) 
               
             
             = 
             
               
                 e 
                  
                 
                   ( 
                   s 
                   ) 
                 
               
                
               
                 ( 
                 
                   
                     K 
                     
                       p 
                        
                       
                           
                       
                        
                       2 
                     
                   
                   + 
                   
                     
                       K 
                       
                         i 
                          
                         
                             
                         
                          
                         2 
                       
                     
                     s 
                   
                   + 
                   
                     
                       K 
                       
                         d 
                          
                         
                             
                         
                          
                         2 
                       
                     
                      
                     s 
                   
                 
                 ) 
               
             
           
         
       
     
         [0025]    The transfer functions (control laws) of the two PID controllers  222  and  224  may be expressed as: 
         [0000]    
       
         
           
             
               
                 C 
                 1 
               
                
               
                 ( 
                 s 
                 ) 
               
             
             = 
             
               
                 
                   
                     u 
                     1 
                   
                    
                   
                     ( 
                     s 
                     ) 
                   
                 
                 
                   e 
                    
                   
                     ( 
                     s 
                     ) 
                   
                 
               
               = 
               
                 ( 
                 
                   
                     K 
                     
                       p 
                        
                       
                           
                       
                        
                       1 
                     
                   
                   + 
                   
                     
                       K 
                       
                         i 
                          
                         
                             
                         
                          
                         1 
                       
                     
                     s 
                   
                   + 
                   
                     
                       K 
                       
                         d 
                          
                         
                             
                         
                          
                         1 
                       
                     
                      
                     s 
                   
                 
                 ) 
               
             
           
         
       
       
         
           
             
               
                 C 
                 2 
               
                
               
                 ( 
                 s 
                 ) 
               
             
             = 
             
               
                 
                   
                     u 
                     2 
                   
                    
                   
                     ( 
                     s 
                     ) 
                   
                 
                 
                   e 
                    
                   
                     ( 
                     s 
                     ) 
                   
                 
               
               = 
               
                 ( 
                 
                   
                     K 
                     
                       p 
                        
                       
                           
                       
                        
                       2 
                     
                   
                   + 
                   
                     
                       K 
                       
                         i 
                          
                         
                             
                         
                          
                         2 
                       
                     
                     s 
                   
                   + 
                   
                     
                       K 
                       
                         d 
                          
                         
                             
                         
                          
                         2 
                       
                     
                      
                     s 
                   
                 
                 ) 
               
             
           
         
       
     
         [0026]    Thus, varying the parameters K P , K I , and K D  of the PID controllers  222  and  224  affects the corresponding components of the VAV box  210  and in turn the room temperature Y. 
         [0027]    Further, in an example the VAV system  200  is associated with a stability constraint. For example, a stability grade of the VAV system  200  may be a predetermined range or value of a phase margin P m . The phase margin may be determined based on an open-loop transfer function L(s) of the VAV system  200 , which is specified as: 
         [0000]        L ( s )= C   1 ( s ) G   1 ( s )+ C   2 ( s ) G   2 ( s ) 
         [0028]    The open-loop frequency response L(jω) may subsequently be obtained by substituting “s” with “jω.” The crossover frequency ω c  is directly related to the system response time T as: 
         [0000]    
       
         
           
             τ 
             = 
             
               1 
               
                 ω 
                 c 
               
             
           
         
       
     
         [0029]    The system stability constraints may then be expressed as: 
         [0000]      | L ( j ω)|=1 at ω=ω c  
 
         [0000]        P   m =180+arg[ L ( j ω)]
 
         [0030]    For example, the stability and system response constraint may be that the phase margin value is in the range of 30˜45 degree or any other range or value in which the specified stability constraint provides a well-damped system response. 
         [0031]    The VAV system  200  is to be tuned based on an optimization objective such as minimum energy consumption and/or maximum occupant comfort. Tuning the VAV system  200  includes finding optimal PID parameters for the multi PID controllers. Further, the objective of the optimization is to tune the PID controllers  222  and  224  so that the total energy consumption of the VAV system  200  is minimized, without discomforting occupants&#39;. For example, better control of the airflow and less temperature variation lead to less energy consumption and better occupant comfort. Thus, to minimize the total energy consumption the cost function to consider is to minimize temperature control error using the PID controllers  222  and  224  of the VAV tuner  220 . 
         [0032]    For example, based on the system model G 1 (s) and G 2 (s), and the models of the PID controllers C 1 (s) and C 2 (s), an objective step response of the VAV system  200  is determined. For example, the system response (temperature control) performance criteria may be based on a Mean Squared Error (MSE), an Integral of the Squared Error (ISE), and a Maximum Overshoot Error (MOE). The MSE is calculated as: 
         [0000]      MSE=σ 2  
 
         [0033]    The ISE is calculated as: 
         [0000]      ISE=∫ 0   ∞   e   2 ( t ) dt  
 
         [0034]    Above equation is the standard deviation of the error. The objective function, J, which is to be minimized to avoid larger overshoot values and to obtain satisfactory dynamics in the transient response, is then specified by: 
         [0000]        J=w 1·MSE+ w 2·ISE+ w 3·MOE
 
         [0000]    where w 1 , w 2 , and w 3  are the weighted values for the corresponding performance criteria, MSE, ISE, and MOE. 
         [0035]    Thus, optimizing the performance of the VAV system  200  includes tuning multiple control loops, such as those of the PID controllers  222  and  224  according to the specific objective such as minimization of the energy consumption. However, the two PID control loops are intervened and cannot be easily tuned separately using existing tuning methods. Further, the optimization is to satisfy the stability constraint of the VAV system  200 , such as the gain-phase margin. Accordingly, the technical solutions describe tuning the PID controllers  222  and  224  in tandem, such as by coupling a Gain-Phase Margin method with a Particle Swamp Optimization (PSO) algorithm. 
         [0036]    The PSO algorithm is derived from a social psychological theory and has been found to be robust for solving problems featuring nonlinearity and non-differentiability, multiple optima, and high dimensionality through adaptation. PSO is a population based search algorithm, which is initialized with a population of random solutions, called particles. Each particle in the PSO is also associated with a velocity. Particles are considered to fly through the search space with respective velocities, which are dynamically adjusted according to historical behaviors of the particles. Therefore, the particles have a tendency to fly towards better and better solutions over the course of search process. 
         [0037]    The updating rule for PSO algorithm is described as: 
         [0000]        {right arrow over (v)}   i+1   =w×{right arrow over (v)}   i   +c   1 ×rand 1 ×( {right arrow over (x)}   p   −{right arrow over (x)}   i )+ c   2 ×rand 2 ×( {right arrow over (x)}   g   −{right arrow over (x)}   i )
 
         [0000]    
       
      
       {right arrow over (v)} 
       i+1 
       ={right arrow over (x)} 
       i 
       +{right arrow over (v)} 
       i+1  
      
     
         [0000]    where w, c 1  and c 2  are the inertia weight, cognitive acceleration and social acceleration constants respectively; rand 1  and rand 2  are two random numbers; x i  represents the location of the i th  particle; x p  represents the best solution (fitness) the particle has achieved so far; x g  represents the overall best location obtained so far by all particles in the population; v i  represents the velocity of the particle with v i   min ≦v i ≦v i   max ·v i   max  determines the resolution, or fitness, with which regions between the present position and target position are searched. The constants c 1  and c 2  represent the weighting of the stochastic acceleration terms that pull each particle toward x p  and x g  positions. 
         [0038]      FIG. 4  illustrates example logic to tune the multiple control loops of the VAV system  200 . The logic may be implemented by the processor  230 . The performance objective of the VAV system  200  is set, as shown at block  405 . The stability constraint of the VAV system  200  is also set, as shown at block  407 . The VAV system  200 , for example using the VAV tuner  220 , generates an initial collection of parameter values for the PID controllers  222  and  224 , as shown at block  410 . In an example, the initial parameter values are default values, for example, that the VAV tuner  220  reads from the memory  240 . The parameters values are a collection of values for the P, I, and D, parameters of the PID controllers  222  and  224 . The collection of parameter values is used as a particle for applying a PSO algorithm to optimize the parameter values. The velocity and position of the particle are initialized according to values that are stored in the memory  240 . In an example, the velocity and position values are used to generate the parameter values, as shown at block  410 . Once the parameter values are generated, the processor  230  updates the stored information based on the generated parameter values, as shown at block  414 . For example, using the parameter values, the processor  230  calculates updated velocity and position and stores the updated values in the memory  240 . 
         [0039]    The processor  230  configures the VAV system  200  according to the generated parameter values, as shown at block  412 . Alternatively, the processor simulates the operation of VAV system  200  according to the parameter values using the equations described herein. The processor  230  determines if the parameter values satisfy the stability constraint, as shown at block  415 . If the stability constraint is not satisfied, the processor  230  generates a second set of parameter values based on the updated velocity and position information, as shown at block  410 . Else, if the stability constraint is satisfied, the processor  230  evaluates the parameter values according to the performance objective, as shown at block  418 . For example, the processor  230  may determine the resulting error E, based on the generated parameter values using the equations described herein. Alternatively, the processor  230  determines the error E based on actual measurement of the room temperature Yin response to configuring the PID controllers  222  and  224  according to the generated parameter values. 
         [0040]    The processor  230  determines if the error E has been minimized to deem the performance objective met, as shown at block  420 . For example, the processor  230  may compare E with a predetermined threshold. If the error value E has been minimized according to the predetermined threshold, the processor  230  may store the parameter values as the optimal (or best) parameter values yet, as shown at block  422 . If not, the processor  230  generates a second set of parameter values based on the updated velocity and position information, as shown at block  410 . The processor  230  may also store the error value E as the predetermined threshold value for a next iteration. 
         [0041]    The processor  230  may determine if a termination criterion has been met, as shown at block  425 . For example, the termination criteria may be a number of optimal parameter values found. For example, the termination criteria may specify that the processor  230  find five collections of optimal parameter values. If the termination criteria are met, the processor  230  configures the PID controllers  222  and  224  according to the optimal parameter values that are stored in the memory  240 , as shown at block  430 . In the above example, the processor  230  uses the fifth collection to configure the PID controllers  222  and  224 . If the termination criteria are not met, the processor  230  continues to generate another collection of parameter values for the PID controllers  222  and  224  using the updated stored information, as shown at block  410 . The processor  230  may keep track of a number of optimal parameter values generated and stored using a counter value stored in the memory  240  (not shown). 
         [0042]    Thus, according to the above method, according to the Gain-Phase Margin constraint, the processor  230  determines the optimal PID parameter values to minimize the temperature control error, which leads to minimal energy consumption and maximum thermal comfort using the VAV system  200 . In an example, the processor  230  uses the above method continuously tuning the PID controllers  222  and  224  to meet the performance objective. Thus, the method facilitates optimizing the VAV system  200  that includes multiple PID control loops by applying a PSO algorithm. 
         [0043]    The technical solutions described herein provide PID control tuning, which combines the Gain-Phase Margin stability consideration and the PSO algorithm. The optimized PID controller parameters for the VAV box  210  facilitate system stability and the PSO algorithm reduces the computational effort to identify the optimal parameter values to satisfy the performance objective. 
         [0044]    The present invention may be a system, a method, and/or a computer program product at any possible technical detail level of integration. The computer program product may include a computer readable storage medium (or media) having computer readable program instructions thereon for causing a processor to carry out aspects of the present invention. 
         [0045]    The computer readable storage medium can be a tangible device that can retain and store instructions for use by an instruction execution device. The computer readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing. A non-exhaustive list of more specific examples of the computer readable storage medium includes the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a static random access memory (SRAM), a portable compact disc read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon, and any suitable combination of the foregoing. A computer readable storage medium, as used herein, is not to be construed as being transitory signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission media (e.g., light pulses passing through a fiber-optic cable), or electrical signals transmitted through a wire. 
         [0046]    Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network. The network may comprise copper transmission cables, optical transmission fibers, wireless transmission, routers, firewalls, switches, gateway computers, and/or edge servers. A network adapter card or network interface in each computing/processing device receives computer readable program instructions from the network and forwards the computer readable program instructions for storage in a computer readable storage medium within the respective computing/processing device. 
         [0047]    Computer readable program instructions for carrying out operations of the present invention may be assembler instructions, instruction-set-architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state-setting data, configuration data for integrated circuitry, or either source code or object code written in any combination of one or more programming languages, including an object oriented programming language such as Smalltalk, C++, or the like, and procedural programming languages, such as the “C” programming language or similar programming languages. The computer readable program instructions may execute entirely on the user&#39;s computer, partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user&#39;s computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). In some embodiments, electronic circuitry including, for example, programmable logic circuitry, field-programmable gate arrays (FPGA), or programmable logic arrays (PLA) may execute the computer readable program instructions by utilizing state information of the computer readable program instructions to personalize the electronic circuitry, in order to perform aspects of the present invention. 
         [0048]    Aspects of the present invention are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer readable program instructions. 
         [0049]    These computer readable program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. These computer readable program instructions may also be stored in a computer readable storage medium that can direct a computer, a programmable data processing apparatus, and/or other devices to function in a particular manner, such that the computer readable storage medium having instructions stored therein comprises an article of manufacture including instructions which implement aspects of the function/act specified in the flowchart and/or block diagram block or blocks. 
         [0050]    The computer readable program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device to cause a series of operational steps to be performed on the computer, other programmable apparatus or other device to produce a computer implemented process, such that the instructions which execute on the computer, other programmable apparatus, or other device implement the functions/acts specified in the flowchart and/or block diagram block or blocks. 
         [0051]    The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of instructions, which comprises one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the blocks may occur out of the order noted in the Figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts or carry out combinations of special purpose hardware and computer instructions. 
         [0052]    The descriptions of the various embodiments of the present invention have been presented for purposes of illustration, but are not intended to be exhaustive or limited to the embodiments disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the described embodiments. The terminology used herein was chosen to best explain the principles of the embodiments, the practical application, or technical improvement over technologies found in the marketplace, or to enable others of ordinary skill in the art to understand the embodiments disclosed herein.