Abstract:
In one embodiment, the present disclosure provides a method for analytics-based design and planning of creative menus. A method for designing and planning a menu, wherein the menu comprises at least one dish comprising a set of ingredients prepared according to a recipe includes obtaining a user-specified ingredient that must be included in the menu, obtaining a user-specified criterion that must be satisfied by the menu, automatically formulating an optimization problem that evaluates a plurality of potential dishes for inclusion in the menu by optimizing over the user-specified criterion, and automatically selecting the at least one dish from among the plurality of potential dishes, wherein the automatically selecting is performed based at least in part on a solution to the optimization problem, and wherein the at least one dish includes the user-specified ingredient.

Description:
FIELD OF THE DISCLOSURE 
       [0001]    This disclosure relates generally to the field of food preparation, and relates more specifically to the use of analytics to design and plan creative menus that meet a set of stated requirements. 
       BACKGROUND OF THE DISCLOSURE 
       [0002]    A menu is a set of dishes (i.e., sets of ingredients prepared according to respective recipes) that, together, constitute a meal (e.g., a soup, an entrée, a side, a dessert, and/or a beverage). A menu may be defined by one or more attributes (i.e., potentially measurable features), such as novelty (e.g., how “new” the person consuming the food perceives the menu to be), nutrition level (e.g., how healthy the menu is), profitability (e.g., how much profit the menu is expected to bring to the person or establishment providing the menu), or the like. 
         [0003]    There is an increasing demand in the field of food preparation for “creative” menus. A creative menu is a menu that is perceived to be highly novel, and that may optionally also be perceived as superior when considering other attributes. In addition, there is an increasing demand for menus that meet specific constraints, such as restrictions on ingredients (e.g., must be vegetarian, kosher, gluten-free, use locally-sourced ingredients, etc.), nutritional requirements (must not contain more than/less than x calories), or other constraints. 
         [0004]    A menu creator should, for practical purposes, have access to the recipes for all of the dishes constituting the menu. A recipe is a list of component ingredients and series of actionable tasks for modifying/cooking the ingredients to produce a dish. The menu creator should also have access to a work plan (also referred to as a “menu plan”). A work plan is a schedule of tasks for joint preparation of the recipes for all dishes constituting the menu, based on available resources and facilities. 
         [0005]    Planning a creative menu is thus complicated by the consideration of required attributes and/or constraints for the menu, as well as the availability of the required resources and facilities. 
       SUMMARY OF THE DISCLOSURE 
       [0006]    In one embodiment, the present disclosure provides a method for analytics-based design and planning of creative menus. For example, a method for designing and planning a menu, wherein the menu comprises a plurality of dishes, and each dish in the plurality of dishes comprises a set of ingredients prepared according to a recipe includes obtaining a user-specified ingredient that must be included in the menu, obtaining a user-specified criterion that must be satisfied by the menu, automatically formulating an optimization problem that evaluates a plurality of potential dishes for inclusion in the menu by optimizing over the user-specified criterion, and automatically selecting the plurality of dishes from among the plurality of potential dishes, wherein the automatically selecting is performed based at least in part on a solution to the optimization problem, and wherein at least one dish in the plurality of dishes includes the user-specified ingredient. 
         [0007]    In another embodiment, the present disclosure provides a device for designing and planning a menu, wherein the menu comprises a plurality of dishes, and each dish in the plurality of dishes comprises a set of ingredients prepared according to a recipe includes obtaining a user-specified ingredient that must be included in the menu, where the device includes a processor and a computer-readable medium storing instructions, which when executed by the processor, cause the processor to perform operations. The operations include obtaining a user-specified ingredient that must be included in the menu, obtaining a user-specified criterion that must be satisfied by the menu, automatically formulating an optimization problem that evaluates a plurality of potential dishes for inclusion in the menu by optimizing over the user-specified criterion, and automatically selecting the plurality of dishes from among the plurality of potential dishes, wherein the automatically selecting is performed based at least in part on a solution to the optimization problem, and wherein at least one dish in the plurality of dishes includes the user-specified ingredient. 
         [0008]    In another embodiment, the present disclosure provides a system for designing and planning a menu, wherein the menu comprises a plurality of dishes, and each dish in the plurality of dishes comprises a set of ingredients prepared according to a recipe. The system includes a database storing recipes for a plurality of potential dishes and an application server for automatically selecting the plurality of dishes from among the plurality of potential dishes, wherein the automatically selecting is performed by automatically evaluating the plurality of dishes by optimizing over a user-specified criterion, wherein the plurality of dishes includes at least one dish that includes a user-specified ingredient. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0009]    The teachings of the present disclosure can be readily understood by considering the following detailed description in conjunction with the accompanying drawings, in which: 
           [0010]      FIG. 1  illustrates one embodiment of a system for planning a menu, according to the present disclosure; 
           [0011]      FIG. 2  is a block diagram illustrating the application server of  FIG. 1  in greater detail; 
           [0012]      FIG. 3  illustrates an exemplary set of clusters of ingredients; 
           [0013]      FIG. 4  illustrates an exemplary set of clusters of recipes; 
           [0014]      FIG. 5  depicts two exemplary recipes modeled as directed acyclic graphs; 
           [0015]      FIG. 6  depicts an exemplary recipe modeled as a Latent Dirichlet Allocation topic model; 
           [0016]      FIG. 7  is a diagram depicting conversion of an exemplary menu into an exemplary work plan, in which the recipes comprising the menu are represented as directed acyclic graphs; 
           [0017]      FIG. 8  depicts an exemplary detailed work plan in which tasks are scheduled on a common timeline and allocated to specific individuals or equipment for completion; 
           [0018]      FIG. 9  is a flow diagram illustrating the high level method  900  for planning a menu, according to embodiments of the present disclosure; and 
           [0019]      FIG. 10  is a high-level block diagram of a general purpose computing device suitable for use in performing the functions described herein. 
       
    
    
     DETAILED DESCRIPTION 
       [0020]    In one embodiment, the present disclosure is related to a method and apparatus for analytics-based design and planning of creative menus. Design of a menu involves the selection of the dishes that constitute the menu, while planning of the menu involves scheduling and delegating (e.g., to people or equipment) the tasks necessary to prepare the dishes. For example, one embodiment of the present disclosure automatically (i.e., with little or no human assistance) designs a menu that may be perceived to be novel and varied, and may also be perceived as superior when considering other attributes or constraints. Further embodiments plan the menu for execution in a manner that considers the available facilities and resources. The present disclosure has particular applicability in the food industry, where it may be applied to design and plan menus in collaboration with entities that provide planning services to their customers (e.g., restaurants, nursing homes, schools, airlines, etc.). Embodiments of the disclosure can provide direct analytical support to such entities. 
         [0021]    One aspect of the present disclosure is to modify a function of a computer based on whether certain resources are available. For instance, the computer may assign specific menu preparation tasks to certain individuals and/or equipment based on availability, need, and/or time constraints. Notably, a machine is required to modify certain portions of the computer as tasks are identified, scheduled, and assigned. 
         [0022]    Embodiments of the present disclosure transform a set of disparate criteria (e.g., individual ingredients, desired attributes, constraints, etc.) into a suggested menu and/or work plan (e.g., a set of dishes satisfying the criteria and/or a plan for preparing the set of dishes using available resources and facilities). In other words, a set of ingredients or attributes does not typically dictate how, when, or by whom specific tasks will be performed. However, embodiments of the present disclosure take a set of disparate criteria and transform it into a suggested menu and/or work plan. Although some of the disparate criteria may be supplied by a human user, the transformation of the criteria into the suggested menu and/or workplan is performed with little or no human assistance (i.e., automatically). 
         [0023]    An “attribute” as used herein refers to a feature of a menu or recipe that is deemed to be desirable. For example, some desirable features of menus and recipes include, but are not limited to: menus/recipes that are perceived to be novel, menus/recipes that are perceived to be tasty and flavorful, menus/recipes that demonstrate variety over time, menus/recipes that are compatible with a healthy lifestyle that meets nutritional requirements, menus/recipes that increase profit, menus/recipes that satisfy kitchen constraints and use available resources, menus/recipes that are opportunistic and economical with ingredient availability, menus/recipes with low carbon footprints, menus/recipes that are personalized for disparate tastes, and menus/recipes that meet dietary restrictions (e.g., nut-free, gluten-free, etc.). 
         [0024]      FIG. 1  illustrates one embodiment of a system  100  for planning a menu, according to the present disclosure. The system  100  generally comprises one or more endpoint devices  102   1 - 102   n  (hereinafter collectively referred to as endpoint devices  102 ″) coupled to a network  104 . The network  104 , in turn, generally comprises an application server  106  and one or more databases  108   1 - 108   m  (hereinafter collectively referred to as “databases  108 ”). 
         [0025]    The network  104  is a communications network. The network  104  may be any type of communications network, such as for example, a traditional circuit switched network (e.g., a public switched telephone network (PSTN)) or an Internet Protocol (IP) network (e.g., an IP Multimedia Subsystem (IMS) network, an asynchronous transfer mode (ATM) network, a wireless network, a cellular network (e.g., 2G, 3G and the like), a long term evolution (LTE) network, and the like) related to the current disclosure. It should be noted that an IP network is broadly defined as a network that uses Internet Protocol to exchange data packets. Additional exemplary IP networks include Voice over IP (VoIP) networks, Service over IP (SoIP) networks, and the like. 
         [0026]    In one embodiment, the network  104  may comprise a core network that is in communication with one or more access networks (not shown), where the access networks may include a wireless access network (e.g., a WiFi network and the like), a cellular access network, a PSTN access network, a cable access network, a wired access network and the like. In one embodiment, the access networks may all be different types of access networks, may all be the same type of access network, or some access networks may be the same type of access network and other may be different types of access networks. The core network and the access networks may be operated by different service providers, the same service provider or a combination thereof. 
         [0027]    As discussed above, the network  104  includes an application server  106  and one or more databases  108 . Although only a single application server  106  and two databases  108  are illustrated, it should be noted that any number of application servers  106  or databases  108  may be deployed. 
         [0028]    One embodiment of an application server  106  is described in greater detail in connection with  FIG. 2 . In another embodiment, the application server  106  may comprise a general purpose computer configured as a special purpose computer, as illustrated in  FIG. 10  and discussed below. In one embodiment, the application server  106  may perform the methods and algorithms discussed below related to planning a menu and/or work plan. For instance, the application server  106  may suggest a menu in response to a set of inputs (received from the endpoint devices  102 , for example) including required ingredients, desired flavor profiles/cuisines (e.g., seasonal and/or ethnic influences), and/or constraints (e.g., restrictions on ingredients, nutritional requirements, etc.). The application server  106  may additionally suggest a work plan based on available facilities and/or resources. 
         [0029]    In one embodiment, the databases  108  may store data relating to menu planning. For instance, a first database  108   1  may store a plurality of recipes. The recipes are grouped according to one or more criteria, such as by cuisine (e.g., Italian, holiday, etc.), by dish (e.g., pasta, chicken, etc.), by course (e.g., appetizer, entrée, etc.), or the like. A single recipe may belong to more than one group (e.g., a recipe for lasagna may belong to groups comprising “entrées” and “Italian cuisine”). Each recipe comprises a list of ingredients and a series of steps for preparing the ingredients to produce a dish. A second database  108   m  may store information relating to ingredients and chemical compounds. These ingredients and chemical compounds may also be grouped according to one or more criteria. In an alternative embodiment, multiple databases  108  may store the recipes, or multiple databases  108  may store the information relating to the ingredients and chemical compounds. In a further embodiment still, all recipes and all information relating to the ingredients and chemical compounds are stored in a single database  108 . 
         [0030]    In one embodiment, the network  104  is in communication with the endpoint devices  102 . In one embodiment, the endpoint devices  102  may be any type of computing device such as a desktop computer, a tablet computer, a laptop computer, a netbook, an ultrabook, a cellular telephone, a smart phone, a portable media device (e.g., an MP3 player), a gaming console, a portable gaming device, and the like. It should be noted that although only three endpoint devices  102  are illustrated in  FIG. 1 , any number of endpoint devices  102  may be deployed. 
         [0031]    In an alternative embodiment, the methods performed by the application server  106  may be performed locally by the endpoint devices  102 . In this case, the endpoint devices  102  access the databases  108  directly over the network  104  and perform the methods and algorithms discussed below related to planning a menu. 
         [0032]    It should be noted that the network  104  has been simplified. For example, the network  104  may include other network elements (not shown) such as border elements, routers, switches, policy servers, security devices, a content distribution network (CDN) and the like. 
         [0033]      FIG. 2  is a block diagram illustrating the application server  106  of  FIG. 1  in greater detail. In general, the application server  106  receives a plurality of inputs from endpoint devices  102 . The plurality of inputs relate to a menu to be planned, and may include, for example, required ingredients, desired flavor profiles/cuisines, and/or other constraints (e.g., restrictions on ingredients, nutritional requirements, etc.) on the menu. The application server  106  produces as output a suggested menu responsive to the plurality of inputs. In addition, the application server may also produce as output a work plan for preparing the menu based on the available facilities and resources. Thus, the application server  106  according to embodiments of the present disclosure transforms a set of criteria (e.g., individual ingredients, constraints, etc.) into a suggested menu and/or work plan (e.g., a set of dishes incorporating the criteria and/or a plan for preparing the set of dishes using available resources and facilities). 
         [0034]    The application server  106  generally comprises an assessment modeling engine  200 , a menu design engine  202 , and a menu planning engine  204 . Any of the modeling engine  200 , menu design engine  202 , and menu planning engine  204  may be implemented as a processor. 
         [0035]    The assessment modeling engine  200  receives as input data gathered from a plurality of sources and, using this input, builds models to assess menu attributes. In one embodiment, the types of data received by the assessment modeling engine  200  include recipes, expert opinions (e.g., from chefs), and management interviews. The models built by the assessment modeling engine  200  assess menu attributes such as novelty, variety, nutrition, and the like. The data from which the models are built may be retrieved, for example, from one or more of the databases  108 . Some embodiments of methods for building models to assess menu attributes are discussed in greater detail below in connection with  FIGS. 5-6 . 
         [0036]    The menu design engine  202  receives as input the models built by the assessment modeling engine  200  and user-specified criteria, and, using this input, designs a menu. In one embodiment, the user-specified criteria include required ingredients, desired flavor profiles/cuisines, and/or other attributes or constraints on the menu. The user-specified criteria may be obtained, for example, from one of the endpoint devices  102 . The menu design engine  202  optimizes over the user-specified criteria and attempts to satisfy any constraints. Embodiments of methods for designing a menu are discussed in greater detail below in connection with EQNs. 1-5. 
         [0037]    The menu planning engine  204  receives as input the menus created by the menu design engine  202  and, using this input, schedules the work plan for preparing the menu. One embodiment of a method for preparing a work plan is discussed in greater detail below in connection with  FIGS. 7 and 8 . The menu and/or work plan may be output by the menu planning engine  204 , for example to one or more of the endpoint devices  102 . 
         [0038]    As discussed above, building the models to assess menu attributes relies on data gathering. The data gathering process may collect several different types of data, including recipes, expert opinions, interviews, and/or external datasets. The recipes may be retrieved from one or more of the databases  108 , which serve as sources for potentially performing re-combinations and modifications of existing recipes, and also for measuring novelty of menus. The expert opinions may be provided by chefs and can be used to generate ideas for novel recipes and for performing other attribute assessment-related tasks. The interviews may be provided by managers and/or other sources in the food preparation industry and contain information relating to available resources in the menu preparation facility, to costs and revenues associated with ingredients and dishes, and other types of information. The expert opinions and interviews may be retrieved from one or more of the databases  108 . The external datasets comprise data from external sources (e.g., databases other than the databases  108 ), which may be required depending on the desired attributes of the menu. Data from external datasets may include information relating to the nutritional content of ingredients, to the seasonality of ingredients, or other information. 
         [0039]    At a high level, data gathering may involve clustering ingredients and recipes into groups of like items. Ingredients may be clustered according to various categories, such as type of ingredient (e.g., fruit, spice, etc.) or type of cuisine (e.g., Jamaican, Hungarian, etc.). Each cluster will contain ingredients that fall into a stated category, and a given ingredient may be included in more than one cluster. 
         [0040]      FIG. 3 , for example, illustrates an exemplary set of clusters of ingredients. In particular,  FIG. 3  depicts three distinct ingredients: bananas, quinces, and paprika. In turn, each of these ingredients is included in one or more of four potential clusters: “fruit,” “spices,” “Hungarian cuisine,” and “Jamaican cuisine.” For example, bananas are included in the clusters for both “fruit” and “Jamaican cuisine,” while quinces are included in the clusters for both “fruit” and “Hungarian cuisine.” Paprika is included in the clusters for both “spices” and “Hungarian cuisine.” 
         [0041]    Similarly, recipes may be clustered according to various categories, such as type of dish (e.g., pasta, pizza, etc.) or type of cuisine (e.g., American, Italian, etc.). Each cluster will contain recipes that fall into a stated category, and a given recipe may be included in more than one cluster. 
         [0042]      FIG. 4 , for example, illustrates an exemplary set of clusters of recipes. In particular,  FIG. 4  depicts three distinct recipes: “Mario&#39;s Pizza,” “Anna&#39;s Spaghetti Bolognese (Spag Bol),” and “My Mac and Cheese.” In turn, each of these recipes is included in one or more of four potential clusters: “pizza dishes,” “pasta dishes,” “Italian cuisine,” and “American cuisine.” For example, “Mario&#39;s Pizza” is included in the clusters for both “pizza dishes” and “Italian cuisine,” while “Anna&#39;s Spag Bol” is included in the clusters for both “pasta dishes” and “Italian cuisine.” “My Mac and Cheese” is included in the clusters for both “pasta dishes” and “American cuisine.” 
         [0043]      FIGS. 3 and 4  depict only one embodiment of a suitable approach to organizing data. Once sufficient data has been gathered and optionally organized as illustrated in  FIGS. 3 and 4 , the assessment modeling engine  200  uses the gathered data to build assessment models for specified attributes. The assessment models quantify a measure of how well a given recipe and/or menu satisfies a given attribute. Different types of data will be useful for modeling different attributes. Moreover, different modeling techniques may be implemented depending on the attributes to be modeled. Table 1, for example, presents some exemplary menu attributes, along with some of the data and modeling techniques that are considered useful for building assessment models of the stated attributes. 
         [0000]    
       
         
               
             
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 Data and Modeling Techniques by Attribute 
               
             
          
           
               
                 Menu Attribute 
                 Useful Data 
                 Modeling Techniques 
               
               
                   
               
               
                 Novelty 
                 Recipe database; Interviews 
                 Machine learning; 
               
               
                   
                 with chefs 
                 Probabilistic analysis 
               
               
                 Taste 
                 External datasets relating to 
                 Chemical compound 
               
               
                   
                 ingredient pairings; Interviews 
                 and olfactory analysis 
               
               
                   
                 with chefs 
               
               
                 Variety 
                 Recipe database; Interviews 
                 Machine learning; 
               
               
                   
                 with chefs 
                 Probabilistic analysis 
               
               
                 Healthy 
                 External datasets relating to 
                 Statistical analysis 
               
               
                   
                 nutrition and dietetics 
               
               
                 Satisfies 
                 Internal information on 
                 Work orchestration 
               
               
                 kitchen 
                 kitchen resources, facilities, 
                 and planning 
               
               
                 constraints 
                 and operations 
               
               
                 Satisfies 
                 External datasets relating to 
                 Constraint satisfaction 
               
               
                 dietary 
                 types of restrictions 
               
               
                 restrictions 
               
               
                 Carbon 
                 Internal information on supply; 
                 Statistical analysis 
               
               
                 footprint 
                 External datasets relating to 
               
               
                   
                 ingredient availability 
               
               
                 Personalization 
                 External datasets relating to 
                 Chemical compound 
               
               
                 to disparate 
                 ingredient pairings; Interviews 
                 and olfactory analysis 
               
               
                 tastes 
                 with chefs 
               
               
                 Profit 
                 Internal information on 
                 Statistical analysis; 
               
               
                   
                 marketing conditions, kitchen 
                 Operations research 
               
               
                   
                 resources, facilities and 
               
               
                   
                 operations, cost data, and 
               
               
                   
                 past economic data 
               
               
                   
               
             
          
         
       
     
         [0044]    As an example, suppose that one wants to measure the variety of a set of recipes. In one embodiment, variety may be modeled using graph edit distance. In this case, the recipes are represented as directed acyclic graphs. 
         [0045]      FIG. 5 , for example, depicts two exemplary recipes modeled as directed acyclic graphs. In each instance, the graph representation G of the recipe includes vertices V representing ingredients or steps, edges E representing relationships between the vertices, and labels L that identify the specific ingredient or step represented by each vertex. 
         [0046]    Several graph editing operations may be defined, including one or more of the following: substituting a vertex label, deleting a vertex, inserting a vertex, deleting an edge, and inserting an edge. The graph edit distance d(G 1 , G 2 ) is then defined between the labeled graphs G 1  and G 2  as the minimum number of edits needed to convert G 1  into G 2 . In one embodiment, then, the variety of several graphs is defined as the variance of the pairwise edit distances among the graphs. Other measures of variety may include the standard deviation, mean, or entropy of the graphs, among other metrics. 
         [0047]    Alternatively, variety may be modeled using probabilistic analysis (see, e.g., Table 1). One particular probabilistic analysis technique that may be used in this case is topic modeling. In this case, the recipes are considered as documents that can be modeled as probabilistic mixtures, where the ingredients are probabilistically selected from a potential list of “topics” (i.e., combinations of ingredients). Thus, each recipe is a distribution of topics, and the distance between recipes can be measured to generate a measure of variety. 
         [0048]      FIG. 6 , for example, depicts an exemplary recipe modeled as a Latent Dirichlet Allocation (LDA) topic model. In this instance, one assumes the existence of a corpus of M recipes or “documents.” Document M, illustrated in  FIG. 6 , contains N words. Those words include ingredients x and topics z, where the topics are sets or combinations of ingredients. For example, an exemplary topic might include the following ingredients: lemon juice, salt, cooking spray, green onions, sour cream, canola oil, Dijon mustard, radishes, pita, and black olives. The parameters α, β, and θ represent parameters of a machine learning model and describe the kinds of topics present in the database  108 . 
         [0049]    From the topic model, every recipe can be associated with a probability distribution over topics. A menu can then be evaluated for variety based on the distance between the probability distributions over topics for recipes included in the menu. Thus, the variety may be scored quantitatively as: 
         [0000]      D(P T|R     1   , . . . ,P T|R     K   )  (EQN. 1)
 
         [0000]    Where P T  is the topic distribution for an associated recipe R 1 , . . . , R K . 
         [0050]    As discussed above, once the assessment models have been built, the menu design engine  202  may design a menu. In addition to the assessment models, the menu design engine  202  obtains as input one or more ingredients, one or more flavor profiles/cuisines, and/or one or more other attributes or constraints (e.g., on dietary compliance, cost, or ingredient availability). 
         [0051]    In one embodiment, design of a menu may start with a number S of initially selected (e.g., user-specified) ingredients, and then extend the ingredient set to include one or more new (e.g., not user-specified) ingredients. For instance, the user may allow the system  100  to recommend further ingredients beyond the initially selected group of ingredients. In this case, additional ingredients may be recommended based on frequent pairings (i.e., where the additional ingredients are those that are observed by the system  100  to be most frequently paired with one or more of the initially selected ingredients) and/or on common chemical compounds (i.e., where the additional ingredients are those that are observed by the system to share the most or the least chemical compounds with the initially selected ingredients). 
         [0052]    Once the set of ingredients has been optionally extended, the menu design engine  202  determines a dish superset (i.e., the set of potential dishes from which the menu may be chosen). In one embodiment, determining the dish superset comprises selecting all dishes that are both: (1) typical of the selected cuisines (e.g., pasta would be typical of Italian cuisine); and (2) contain at least one of the ingredients. In one embodiment, at least one ingredient in the set of initially selected ingredients is maintained in the menu. 
         [0053]    Additionally, each dish in the dish superset can be substituted with one or more of: (1) a canonical recipe for that dish (e.g., the most highly rated pizza recipe); (2) all of the recipes for that dish, as long as they contain at least one of the initially selected ingredients; or (3) a recipe for the dish that contains at least one of the initially selected ingredients and is generated using a computational creativity algorithm. There are a variety of computational creativity algorithms that are suitable for use in this context. Substitute recipes may be obtained from the databases  108 . The number of dishes contained in the final dish superset may be denoted as M. 
         [0054]    Optimization is then employed to select specific dishes from the dish superset in order to generate a menu. In one embodiment, selection of specific dishes is formulated as an optimization model that optimizes a weighted linear function of scores for three attributes (e.g., novelty, taste, and variety), under constraints such as the availability of ingredients. In this optimization model, the following notation is employed: 
         [0000]    iε{1, . . . , M}: Index for a dish in the superset of dishes (e.g., quiche, pie, etc.)
 
jε{1, . . . , N}: Index for ingredient (e.g., chicken, saffron, etc.)
 
kε{1, . . . , K}: Index for ingredient category (e.g., vegetable, meat, etc.)
 
sε{1, . . . , s}: Index for initially selected ingredient
 
x ij ε{0,1}Vi, j: Whether ingredient j is in dish i
 
y i ε{0,1}∀i: Whether dish i is included in the selected menu
 
w jk  ε{0,1}∀i, j: Whether ingredient j is of category type k
 
B j ε{0,1}∀j: Whether ingredient j is available
 
L ik : Lower bound on number of ingredients of category type k in dish i
 
U ik : Upper bound on number of ingredients of category type k in dish i
 
D: Maximum number of dishes in menu
 
Co jl : Number of chemical compounds shared by ingredients j and l
 
d(G il : Graph edit distance between recipes for dishes i and l
 
Where x ij  and y i  are decision variables, and w jk , B j , L ik , and U ik  are optional variables.
 
         [0055]    As discussed above, different attributes may be measured in different ways. For instance, the novelty of a menu is the sum of the novelty measures of each dish in the menu. The novelty of a dish can be computed, in one embodiment, by applying a metric such as Bayesian surprise to the ingredients of the dish. In this case, the novelty of the menu, NOV (y 1 , . . . , y M ; x 1 , . . . , x N ) may be computed as: 
         [0000]    
       
         
           
             
               
                 
                   
                     NOV 
                      
                     
                       ( 
                       
                         
                           y 
                           1 
                         
                         , 
                         … 
                          
                         
                             
                         
                         , 
                         
                           
                             y 
                             M 
                           
                           ; 
                           
                             x 
                             1 
                           
                         
                         , 
                         … 
                          
                         
                             
                         
                         , 
                         
                           x 
                           N 
                         
                       
                       ) 
                     
                   
                   = 
                   
                     
                       ∑ 
                       
                         i 
                         = 
                         1 
                       
                       M 
                     
                      
                     
                         
                     
                      
                     
                       
                         y 
                         i 
                       
                       · 
                       
                         
                           f 
                           NOV 
                         
                          
                         
                           ( 
                           
                             
                               x 
                               
                                 i 
                                  
                                 
                                     
                                 
                                  
                                 1 
                               
                             
                             , 
                             … 
                              
                             
                                 
                             
                             , 
                             
                               x 
                               iN 
                             
                           
                           ) 
                         
                       
                     
                   
                 
               
               
                 
                   ( 
                   
                     EQN 
                     . 
                     
                         
                     
                      
                     2 
                   
                   ) 
                 
               
             
           
         
       
     
         [0000]    Where f NOV  is the novelty score for a set of ingredients. 
         [0056]    The taste of a menu (i.e., how “good” the taste is) can be computed by considering a known food pairing hypothesis that suggests that pairs of ingredients taste better when the component ingredients share more chemical compounds. In this case, the taste of the menu, TASTE (y 1 , . . . , y M ; x 1 , . . . , x N ) may be computed as: 
         [0000]    
       
         
           
             
               
                 
                   
                     TASTE 
                      
                     
                       ( 
                       
                         
                           y 
                           1 
                         
                         , 
                         … 
                          
                         
                             
                         
                         , 
                         
                           
                             y 
                             M 
                           
                           ; 
                           
                             x 
                             1 
                           
                         
                         , 
                         … 
                          
                         
                             
                         
                         , 
                         
                           x 
                           N 
                         
                       
                       ) 
                     
                   
                   = 
                   
                     
                       ∑ 
                       
                         i 
                         = 
                         1 
                       
                       M 
                     
                      
                     
                         
                     
                      
                     
                       
                         y 
                         i 
                       
                       ( 
                       
                         
                           ∑ 
                           
                               
                           
                           
                               
                           
                         
                          
                         
                             
                         
                          
                         
                           
                             ∑ 
                             
                               j 
                               = 
                               l 
                             
                             
                                 
                             
                           
                            
                           
                               
                           
                            
                           
                             
                               
                                 x 
                                 ij 
                               
                               · 
                               
                                 x 
                                 il 
                               
                             
                              
                             
                               Co 
                               jl 
                             
                           
                         
                       
                       ) 
                     
                   
                 
               
               
                 
                   ( 
                   
                     EQN 
                     . 
                     
                         
                     
                      
                     3 
                   
                   ) 
                 
               
             
           
         
       
     
         [0057]    The variety of a menu can be computed by comparing the graph edit distances between pairs of recipes for dishes in the menu, or by using topic modeling, or by a combination of graph edit distance comparison and topic modeling. For instance, a graph edit distance-based measure may compute the variety of the menu, VAR (y 1 , . . . , y M ; x 1 , . . . , x N ), as: 
         [0000]    
       
         
           
             
               
                 
                   
                     VAR 
                      
                     
                       ( 
                       
                         
                           y 
                           1 
                         
                         , 
                         … 
                          
                         
                             
                         
                         , 
                         
                           y 
                           M 
                         
                       
                       ) 
                     
                   
                   = 
                   
                     
                       ∑ 
                       
                           
                       
                     
                      
                     
                         
                     
                      
                     
                       
                         ∑ 
                         
                           i 
                           &lt; 
                           l 
                         
                         
                             
                         
                       
                        
                       
                           
                       
                        
                       
                         
                           y 
                           i 
                         
                         · 
                         
                           y 
                           l 
                         
                         · 
                         
                           d 
                            
                           
                             ( 
                             
                               G 
                               il 
                             
                             ) 
                           
                         
                       
                     
                   
                 
               
               
                 
                   ( 
                   
                     EQN 
                     . 
                     
                         
                     
                      
                     4 
                   
                   ) 
                 
               
             
           
         
       
     
         [0000]    Where d(G il ) is the distance between the graphs for recipes i and l. 
         [0058]    The objective function is thus the weighted linear function of the measures for the attributes being balanced. In the exemplary case (i.e., where the attributes being balanced are novelty, variety, and taste), the objective function is: 
         [0000]    
       
         
           
             
                 
             
              
             
               
                 max 
                 
                   
                     
                       x 
                       ij 
                     
                      
                     
                       ∀ 
                       i 
                     
                   
                   , 
                   
                     j 
                     ; 
                     
                       
                         y 
                         i 
                       
                        
                       
                         ∀ 
                         i 
                       
                     
                   
                 
               
                
               
                 ⌊ 
                 
                   
                     
                       w 
                       1 
                     
                      
                     
                       NOV 
                        
                       
                         ( 
                         
                           
                             y 
                             
                               1 
                               1 
                             
                           
                           , 
                           … 
                            
                           
                               
                           
                           , 
                           
                             
                               y 
                               M 
                             
                             ; 
                             
                               x 
                               1 
                             
                           
                           , 
                           … 
                            
                           
                               
                           
                           , 
                           
                             x 
                             N 
                           
                         
                         ) 
                       
                     
                   
                   + 
                   
                     
                       w 
                       2 
                     
                      
                     
                         
                     
                      
                     TASTE 
                      
                     
                         
                     
                      
                     
                       ( 
                       
                         
                           y 
                           
                             1 
                             1 
                           
                         
                         , 
                         … 
                          
                         
                             
                         
                         , 
                         
                           
                             y 
                             M 
                           
                           ; 
                           
                             x 
                             1 
                           
                         
                         , 
                         … 
                          
                         
                             
                         
                         , 
                         
                           x 
                           N 
                         
                       
                       ) 
                     
                   
                   + 
                   
                     
                       w 
                       3 
                     
                      
                     
                       VAR 
                        
                       
                         ( 
                         
                           
                             y 
                             1 
                           
                           , 
                           
                             … 
                              
                             
                                 
                             
                              
                             
                               y 
                               M 
                             
                           
                         
                         ) 
                       
                     
                   
                 
                 ] 
               
             
              
             
                 
             
           
         
       
     
         [0000]    Such that: 
         [0000]    
       
         
           
             
               
                 
                   
                     
                       x 
                       ij 
                     
                     ∈ 
                     
                       
                         { 
                         
                           0 
                           , 
                           1 
                         
                         } 
                       
                        
                       
                         ∀ 
                         i 
                       
                     
                   
                   , 
                   j 
                 
               
               
                 
                   ( 
                   
                     EQN 
                     . 
                     
                         
                     
                      
                     5 
                   
                   ) 
                 
               
             
             
               
                 
                   
                     
                       y 
                       i 
                     
                     ∈ 
                     
                       
                         { 
                         
                           0 
                           , 
                           1 
                         
                         } 
                       
                        
                       
                         ∀ 
                         i 
                       
                     
                   
                    
                   
                     
 
                   
                    
                   
                     
                       
                         max 
                         i 
                       
                        
                       
                         ⌊ 
                         
                           x 
                           ij 
                         
                         ⌋ 
                       
                     
                     ≤ 
                     
                       
                         B 
                         j 
                       
                        
                       
                         
                           ∀ 
                           j 
                         
                          
                         
                           
 
                         
                          
                         
                           ( 
                           
                             Restriction 
                              
                             
                                 
                             
                              
                             on 
                              
                             
                               
                                   
                               
                                
                               
                                   
                               
                             
                              
                             ingredient 
                              
                             
                                 
                             
                              
                             availability 
                           
                           ) 
                         
                       
                     
                   
                    
                   
                     
 
                   
                    
                   
                     
                       y 
                       i 
                     
                     = 
                     
                       1 
                       - 
                       
                         
                           ∏ 
                           j 
                           
                               
                           
                         
                          
                         
                             
                         
                          
                         
                           
                             ( 
                             
                               1 
                               - 
                               
                                 x 
                                 ij 
                               
                             
                             ) 
                           
                            
                           
                             ∀ 
                             
                               i 
                                
                               
                                   
                               
                                
                               
                                 
 
                               
                               ( 
                               
                                 
                                   
                                     
                                       Dishes 
                                        
                                       
                                         
                                             
                                         
                                          
                                         
                                             
                                         
                                       
                                        
                                       are 
                                        
                                       
                                           
                                       
                                        
                                       in 
                                        
                                       
                                           
                                       
                                        
                                       the 
                                        
                                       
                                           
                                       
                                        
                                       menu 
                                        
                                       
                                           
                                       
                                        
                                       when 
                                        
                                       
                                         
                                             
                                         
                                          
                                         
                                             
                                         
                                       
                                        
                                       they 
                                     
                                   
                                 
                                 
                                   
                                     
                                       contain 
                                        
                                       
                                           
                                       
                                        
                                       at 
                                        
                                       
                                           
                                       
                                        
                                       least 
                                        
                                       
                                           
                                       
                                        
                                       one 
                                        
                                       
                                           
                                       
                                        
                                       ingredient 
                                     
                                   
                                 
                               
                               ) 
                             
                           
                         
                       
                     
                   
                    
                   
                       
                   
                    
                   
                     
 
                   
                    
                   
                     
                       
                         
                           
                               
                           
                            
                           
                             ∑ 
                             i 
                           
                         
                         
                             
                         
                       
                        
                       
                           
                       
                        
                       
                         y 
                         i 
                       
                     
                     ≤ 
                     D 
                   
                    
                   
                     
 
                   
                    
                   
                       
                   
                    
                   
                     ( 
                     
                       Restriction 
                        
                       
                           
                       
                        
                       on 
                        
                       
                           
                       
                        
                       the 
                        
                       
                           
                       
                        
                       total 
                        
                       
                           
                       
                        
                       number 
                        
                       
                           
                       
                        
                       of 
                        
                       
                           
                       
                        
                       dishes 
                     
                     ) 
                   
                    
                   
                     
 
                   
                    
                   
                     
                       
                         
                           y 
                           i 
                         
                         · 
                         
                           L 
                           ik 
                         
                       
                       ≤ 
                       
                         
                           y 
                           i 
                         
                         · 
                         
                           
                             ∑ 
                             j 
                           
                            
                           
                             ( 
                             
                               
                                 x 
                                 ij 
                               
                               · 
                               
                                 w 
                                 jk 
                               
                             
                             ) 
                           
                         
                       
                       ≤ 
                       
                         
                           
                             y 
                             i 
                           
                           · 
                           
                             U 
                             ik 
                           
                         
                          
                         
                           ∀ 
                           i 
                         
                       
                     
                     , 
                     k 
                   
                    
                   
                     
 
                   
                    
                   
                     
                       
                           
                       
                        
                       
                         ( 
                         
                           
                             
                               
                                 Restrictions 
                                  
                                 
                                     
                                 
                                  
                                 on 
                                  
                                 
                                     
                                 
                                  
                                 the 
                                  
                                 
                                     
                                 
                                  
                                 number 
                                  
                                 
                                     
                                 
                                  
                                 of 
                                  
                                 
                                     
                                 
                                  
                                 ingredients 
                               
                             
                           
                           
                             
                               
                                 in 
                                  
                                 
                                   
                                       
                                   
                                    
                                   
                                       
                                   
                                 
                                  
                                 each 
                                  
                                 
                                   
                                       
                                   
                                    
                                   
                                       
                                   
                                 
                                  
                                 category 
                                  
                                 
                                     
                                 
                                  
                                 for 
                                  
                                 
                                     
                                 
                                  
                                 the 
                                  
                                 
                                     
                                 
                                  
                                 selected 
                                  
                                 
                                     
                                 
                                  
                                 dishes 
                               
                             
                           
                         
                         ) 
                       
                     
                     
                         
                     
                   
                 
               
               
                 
                     
                 
               
             
             
               
                 
                   
                     
                       
                         
                           ∏ 
                           
                             i 
                             , 
                             s 
                           
                           
                               
                           
                         
                          
                         
                             
                         
                          
                         
                           ( 
                           
                             1 
                             - 
                             
                               x 
                               is 
                             
                           
                           ) 
                         
                       
                       = 
                       0 
                     
                      
                     
                         
                     
                      
                     
                       
 
                     
                      
                     
                         
                     
                      
                     
                       ( 
                       
                         
                           
                             
                               At 
                                
                               
                                   
                               
                                
                               least 
                                
                               
                                 
                                     
                                 
                                  
                                 
                                     
                                 
                               
                                
                               one 
                                
                               
                                   
                               
                                
                               of 
                                
                               
                                 
                                     
                                 
                                  
                                 
                                     
                                 
                               
                                
                               the 
                                
                               
                                   
                               
                                
                               initially 
                                
                               
                                   
                               
                                
                               selected 
                             
                           
                         
                         
                           
                             
                               ingredients 
                                
                               
                                   
                               
                                
                               should 
                                
                               
                                   
                               
                                
                               be 
                                
                               
                                   
                               
                                
                               in 
                                
                               
                                   
                               
                                
                               a 
                                
                               
                                   
                               
                                
                               dish 
                                
                               
                                   
                               
                                
                               in 
                                
                               
                                   
                               
                                
                               the 
                                
                               
                                   
                               
                                
                               menu 
                             
                           
                         
                       
                       ) 
                     
                   
                    
                   
                       
                   
                 
               
               
                 
                     
                 
               
             
           
         
       
     
         [0059]    Once the menu has been designed (i.e., the dishes comprising the menu have been selected), the menu planning engine  204  creates a work plan for preparing the menu. As discussed above, the work plan is a schedule of tasks for joint preparation of the recipes for all dishes constituting the menu, based on available resources and facilities. 
         [0060]    In one embodiment, the menu planning engine  204  takes as inputs directed acyclic graphs representing all of the recipes required to prepare the menu. The menu planning engine  204  produces as an output the work plan, while determining if the menu can be prepared within any given time constraints. 
         [0061]      FIG. 7  is a diagram depicting conversion of an exemplary menu into an exemplary work plan, in which the recipes comprising the menu are represented as directed acyclic graphs. The directed acyclic graphs represent the menus as mathematical formalisms. In particular, the vertices of the graphs represent actions to be taken by different people or equipment (e.g., boil water, slice vegetables, bake potatoes, etc.). The edges connecting the vertices represent the sequences in which the actions are to be taken (e.g., the water should be boiled before the pasta is put in the water), and the edges are annotated with timing constraints that set limits on the maximum amount of time that may elapse between sequential actions (e.g., no more than eight minutes should elapse between putting the pasta in the boiling water and removing the pasta from the boiling water). Given such a graph for each recipe in the menu (illustrated on the left side of  FIG. 7 ), and a list of available resources (e.g., people and/or equipment), the menu planning engine  204  produces a plan (illustrated on the right side of  FIG. 7 ) for the individual resources to prepare the menu (and other summaries, such as the total time required). For instance, the plan may assign specific actions in the directed acyclic graphs to specific individuals who are available to prepare the menu (e.g., John will slice the vegetables).  FIG. 8 , for example, depicts an exemplary detailed work plan in which tasks are scheduled on a common timeline and allocated to specific individuals or equipment for completion. 
         [0062]      FIG. 9  is a flow diagram illustrating the high level method  900  for planning a menu, according to embodiments of the present disclosure. The method  900  may be performed, for example, by the application server  106  illustrated in  FIGS. 1 and 2  and described in detail above. However, it will be appreciated that the method  900  is not limited to implementation on the application server  106 ; in alternate embodiments, the method  900  may be performed by other devices or systems, including the endpoint devices  102  or a general purpose computing device that is configured as a special purpose computing device. 
         [0063]    The method  900  begins in step  902 . In step  904 , the assessment modeling engine  200  gathers data from one or more sources. As discussed above, the gathered data may include one or more of the following types of data: recipes, chef expert opinions, or management interviews. Any one or more of these types of data may be obtained from one of the databases  108 , or from an external database. 
         [0064]    In step  906 , the assessment modeling engine  200  builds one or more models in accordance with the data gathered in step  904 . As discussed above, the models are build to help assess menu attributes, such as novelty, variety, nutrition, or the like. For instance, the assessment modeling engine  200  may use one or more of the modeling techniques listed in Table 1 (above) to build models using the gathered data. 
         [0065]    In step  908 , the menu design engine  202  obtains a plurality of inputs. As discussed above, the inputs obtained by the menu design engine  202  may include one or more of the following: one or more user-specified cuisines (e.g., Indian, holiday, etc.), one or more user-specified ingredients (e.g., chicken, eggs, etc.), one or more user-specified desired attributes (e.g., novelty, variety, etc.), or one or more user-specified constraints (e.g., no more than x calories, no gluten, etc.). In one embodiment, any one or more of the user-specified inputs may be provided using one or more of the endpoint devices  102 . 
         [0066]    In optional step  910  (illustrated in phantom), the menu design engine  202  extends the ingredient set. As discussed above, the ingredient set may be extended by adding new ingredients that pair well in the menu (but not necessarily in the same recipe) with user-specified ingredients obtained in step  908 . In one embodiment, the menu design engine  202  consults a database of recipes (e.g., one of the databases  108 ) for information on pairing of ingredients. Alternatively or in addition, the menu design engine  202  may evaluate taste metrics (e.g., sharing of chemical compounds) for ingredient pairs. 
         [0067]    In step  912 , the menu design engine  202  determines a dish superset. As discussed above, the dish superset comprises a set of all potential dishes from which the menu may be selected. The dish superset may be constructed by performing standard database queries (e.g., to the databases  108 ) that identify all dishes in the database that correspond to user-specified cuisines and contain at least one of the ingredients in the (optionally extended) ingredient set. 
         [0068]    In step  914 , the menu design engine  202  determines the menu in accordance with the dish superset. That is, the menu design engine  202  selects one or more of the dishes in the dish superset for inclusion in the menu. In one embodiment, dishes are selected from the dish superset in accordance with an optimization technique that finds a set of dishes that “fit together” (e.g., based on a weighted function of user-specified attributes, subject to user-specified constraints). For instance, dishes may be selected from the dish superset by considering the optimization problem detailed in EQNs. 1-5, above. 
         [0069]    In step  916 , the menu planning engine  204  designs a work plan in accordance with the menu designed in step  914  and the available resources and facilities. That is, the menu planning engine  204  plans a detailed schedule of tasks to be performed, concurrently, by the available people and equipment in order to produce the menu within a specified period of time. As discussed above in connection with  FIG. 7-8 , designing the work plan may involve representing each recipe in the menu as a directed acyclic graph and then implanting bipartite matching in the individual stages of the recipes. 
         [0070]    In step  918 , the menu planning engine  204  outputs the work plan (e.g., to one or more of the endpoint devices  102 ). The method  900  then ends in step  920 . 
         [0071]      FIG. 10  depicts a high-level block diagram of a general-purpose computer suitable for use in performing the functions described herein. As depicted in  FIG. 10 , the system  1000  comprises a hardware processor element  1002  (e.g., a central processing unit (CPU), a microprocessor, or a multi-core processor), a memory  1004 , e.g., random access memory (RAM) and/or read only memory (ROM), a module  1005  for planning a menu and/or work plan, and various input/output devices  1006  (e.g., storage devices, including but not limited to, a tape drive, a floppy drive, a hard disk drive or a compact disk drive, a receiver, a transmitter, a speaker, a display, a speech synthesizer, an output port, an input port and a user input device (such as a keyboard, a keypad, a mouse, a microphone and the like)). Although only one processor element is shown, it should be noted that the general-purpose computer may employ a plurality of processor elements. Furthermore, although only one general-purpose computer is shown in the figure, if the method(s) as discussed above is implemented in a distributed manner for a particular illustrative example, i.e., the steps of the above method(s) or the entire method(s) are implemented across multiple general-purpose computers, then the general-purpose computer of this figure is intended to represent each of those multiple general-purpose computers. 
         [0072]    It should be noted that the present disclosure can be implemented in software and/or in a combination of software and hardware, e.g., using application specific integrated circuits (ASIC), a general purpose computer or any other hardware equivalents, e.g., computer readable instructions pertaining to the respective systems and/or methods discussed above can be used to configure a hardware processor to perform the steps functions and/or operations of the above disclosed systems and methods. In one embodiment, instructions and data for the present module or process  1005  for planning a menu and/or work plan (e.g., a software program comprising computer-executable instructions) can be loaded into memory  1004  and executed by hardware processor element  1002  to implement the steps, functions or operations as discussed above in connection with the exemplary systems  100  and  106  and/or method  900 . The processor executing the computer readable or software instructions relating to the above described method(s) can be perceived as a programmed processor or a specialized processor. As such, the present module  1005  for planning a menu and/or work plan (including associated data structures) of the present disclosure can be stored on a tangible or physical (broadly non-transitory) computer-readable storage device or medium, e.g., volatile memory, non-volatile memory, ROM memory, RAM memory, magnetic or optical drive, device or diskette and the like. More specifically, the computer-readable storage device may comprise any physical devices that provide the ability to store information such as data and/or instructions to be accessed by a processor or a computing device such as a computer or an application server. In addition, it should be noted that the hardware processor can be configured or programmed to cause other devices to perform one or more operations as discussed above. In other words, the hardware processor may serve the function of a central controller directing other devices to perform the one or more operations as discussed above. 
         [0073]    Referring to  FIG. 10 , the present invention may be a system, a method, and/or a computer program product. 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. 
         [0074]    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. 
         [0075]    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. 
         [0076]    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, 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 conventional 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. 
         [0077]    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. 
         [0078]    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. 
         [0079]    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. 
         [0080]    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 block 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. 
         [0081]    While various embodiments have been described above, it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of a preferred embodiment should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.