Manufacturing industries play a vital role in the economy of a country. Manufacturing of commodities or products may be complex, e.g., when a product includes various components or parts which require different manufacturing materials, machines, and environment/conditions. Therefore, such products may be difficult to be manufactured at one place/factory/location (e.g., as centralized manufacturing) due to unavailability of different manufacturing materials, machines, and/or environment/conditions. Now-a-days, decentralized manufacturing may be used for manufacturing such products. Decentralized or distributed manufacturing refers to geographically dispersed manufacturing facilities to produce different components of the products and assembling them to produce a final product. In decentralized manufacturing, a manufactuer of final product may bring different components from different suppliers or vendors, different locations, and/or factories and assemble the components together to produce the final product.
Decentralized manufacturing, therefore, makes the production or manufacturing process easy and convenient as the final product can be easily and comfortably made, e.g., by gathering different components and assembling them. Further, decentralized manufacturing reduces effort, time, and cost involved in manufacturing each component of the product. However, due to voluminous demand of products and complex nature of distributed manufacturing (e.g., various manufacturing units or vendors), it might be an arduous and time consuming task to manage production process (e.g., selecting best suppliers for manufacturing various preparing production schedule or task assignments, etc.), task assignments to different suppliers, and maintaining transportation between different geographies or factories in a way to enable cost efficient manufacturing. Further, human based planning may be error prone, inefficient, and/or improper. The improper planning or scheduling may result in delay and high manufacturing and product cost which leads to customers' dissatisfaction and may, therefore, be detrimental to the manufacturers.
The embodiments are illustrated by way of examples and not by way of limitation in the figures of the accompanying drawings in which like references indicate similar elements. The embodiments may be best understood from the following detailed description taken in conjunction with the accompanying drawings.
Embodiments of techniques for distributed manufacturing system are described herein. In the following description, numerous specific details are set forth to provide a thorough understanding of the embodiments. One skilled in the relevant art will recognize, however, that the embodiments can be practiced without one or more of the specific details, or with other methods, components, materials, etc. In other instances, well-known structures, materials, or operations are not shown or described in detail.
Reference throughout this specification to “one embodiment”, “this embodiment” and similar phrases, means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one of the one or more embodiments. Thus, the appearances of these phrases in various places throughout this specification are not necessarily all referring to the same embodiment. Furthermore, the particular features, structures, or characteristics may be combined in any suitable manner in one or more embodiments.
Embodiments provide optimized and efficient scheduling and assignments of resources and tasks in distributed manufacturing environment to enhance production and profit (e.g., by reducing production cost and/or time). The optimized scheduling enables to utilize right suppliers, at a right time, and right locations to shorten production cycle, reduce production time, reduce idle time, and reduce manufacturing cost to fulfil customers' orders (demand) along with maximizing profit. The assignments are done dynamically and quickly based upon changing circumstances, e.g., currently available suppliers, suppliers' production capacity, etc. Therefore, in case of unforeseen or changing circumstances (e.g., supplier unable to supply components due to some emergency or other issues), the assignments may be modified or updated dynamically and quickly so that the delivery of final product may not be delayed. Embodiments aim at enhancing profit by balancing the demand and supply, minimizing the cost incurred (e.g., the production cost, transportation cost, etc.) in manufacturing and delivering the order, shortening production cycle, and reducing idle time. Components delivery status may be tracked or monitored in real-time and then determination may be made for updating assignments based upon any changing or unforeseen circumstances.
Proper assignments or scheduling enable to fulfill order on time which brings customers' satisfaction along with enhancing or maximizing the revenue generated from the orders. The use of the in-memory database (SAP® HANA) allows to handle and pre-process very large assignment dataset, which boosts the system to provide a faster and real-time service. Replacement or alternative vendors or suppliers may be automatically determined or assigned and users are not required to manually figure out the replacement, assignment, and/or scheduling. Therefore, the supplier may be adjusted quickly and dynamically based upon the changing circumstances. Further, the user (e.g., the manufacturer) is given flexibility to interact with the workflow and input some customization such as a weight for manufacturing cost and manufacturing time according to their requirement. For example, if a user wants a product to be delivered fast, the user may reduce the weight of the manufacturing time. Based upon the user's requirement/input, the assignment or scheduling is generated or updated accordingly.
“Distributed manufacturing” or “decentralized manufacturing” refers to geographically dispersed manufacturing facilities to produce different components or parts of a product which may be assembled together to produce a final product. A product may comprise several components or parts and a part may be made up of different types of materials, an order for such product may be divided among several vendors or suppliers (e.g., different suppliers or vendors produce different components of the product/order). In various aspects, the parts or components may refer to the parts, components, or modules of a process.
“Manufacturer” refers to a person, a company, or an organization that makes final or end products and/or services for sale. For example, the manufacturer brings the components from different suppliers and assembles them to make the final product.
“Supplier” or “vendor” refers to a person, a company, or an organization that makes one or more components or parts of a final or end product.
“Topology” refers to a pattern of connection or a way in which parts or components of a product or process are arranged, connected, or inter-related. The topology may be with reference to manufacturing of the product and may be referred as ‘manufacturing topology’. For example, if a product ‘A’ comprises ‘part 1,’ ‘part 2,’ and ‘part 3’ such that the manufacturing of ‘part 1’ and ‘part 2’ are independent and the manufacturing of ‘part 3’ is dependent upon the manufacturing of ‘part 1’ and ‘part 2’ then the topology of product A may comprise of three blocks representing ‘part 1,’ ‘part 2,’ and ‘part 3,’ respectively, where block 3 is connected to both block 1 and block 2. A bill of materials or BOM (e.g., including information about a product such as its components, a list of materials for manufacturing the components, quantities of materials required for manufacturing components, etc.) may be used to generate a manufacturing topology of the end product. The topology may be in reference to any other parameter such as manufacturing time and may be referred as ‘timeline topology.’ The timeline topology may be (i) supplier's timeline topology indicating the time taken by a supplier to manufacture a component/product; and (ii) production timeline topology of a product indicating the time taken to manufacture a product through one or more suppliers (indicating their manufacturing time dependency on other components and/or on other suppliers (if any)).
“Supplier timeline topology” refers to a timeline topology illustrating time taken by a supplier to manufacture one or more components/product. For example, if a supplier is to manufacture a single component, then the supplier timeline topology may illustrate a single block or node representing the component to be manufactured and indicating time required to manufacture that component. In an embodiment, the ‘production timeline topology’ may be generated by replacing nodes of the ‘manufacturing topology’ with their respective supplier's timeline topology.
“Linear programming (LP)” refers to a technique or mathematical model for maximizing or minimizing a linear function of plurality of variables. Linear programming can alternately be defined as a technique for the optimization of a linear function, subject to linear equality and/or linear inequality constraints. Therefore, linear programming may also be termed as “linear optimization (LO)”. The linear programming provides a method to achieve the best output, e.g., maximum profit, minimum cost incurred, etc. The function which is optimized may be a real-valued linear function defined on a polyhedron (e.g., intersection of finitely many spaces, each of space is defined by a linear inequality) and a linear programming finds a point in the polyhedron where this function has the smallest (or largest) value if such a point exists.
“Transportation cost” refers to an expense involved in bringing the one or more components from the one or more suppliers or vendors locations to a final manufacturing point and/or expense involved in delivering the final order. The transportation cost may involve or include fuel cost, toll gate payment, etc.
“Production cost” refers to cost incurred in manufacturing or making a product. Production cost may include cost of materials, labor, manufacturing equipment, etc., involved in production of components of the product. The production cost of the components may be quoted by the suppliers.
“Product cost” refers to total cost incurred in manufacturing a final or end product. The product cost may be a combination of transportation cost, production cost, and cost involved in integrating and assembling the components (received from the suppliers) to make the final or end product. The product cost may include the cost of machine, labor, etc., involved in integrating or assembling to make the final product. The product cost may also be referred as “capital cost of a product” or “manufacturing cost of the product.”
“Capital cost of a component or a part” refers to total cost incurred in manufacturing that component or part. In various embodiments, the capital cost of the component may be referred as a manufacturing cost of the component.
“Manufacturing time of a product” refers to total time consumed in manufacturing a final or an end product. The manufacturing time of a product may include transportation time of the components (e.g., time spent in bringing the components from the suppliers) and the time consumed or spent in integrating and assembling the components (received from the suppliers) to make the final or end product. The manufacturing time may be predefined or prefixed (e.g., by the manufacturer) based upon the customer's or market requirement(s). For example, if the product has to be delivered fast or early, the manufacturing time may be reduced.
“Manufacturing time of a component or a part” refers to total time consumed in manufacturing that component or part. The manufacturing time of a component may be predefined or prefixed (e.g., by the supplier or vendor) based upon the manufacturer's requirement(s).
“Tolerable delay” refers to an admissible, manageable, or bearable delay in delivery of an order. Orders are generally required to be delivered on time, however, if the supplier could not provide the components on time, there may be delay in producing the final product or delivering the order. A period of delay should be tolerable. Delay causes reduce or loss in revenue generated from the orders. The tolerable delay may be predefined, e.g., by a user such as a customer or a manufacturer. In an embodiment, based upon the maximum loss that can be suffered, the tolerable delay may be predefined. For example, the maximum tolerable delay may be defined as three days or three hours.
“Task allocator module” refers to a logical and/or a physical unit which generates optimized or optimal tasks schedule to effectively, dynamically, and efficiently allocate or assign various manufacturing tasks to various vendors or suppliers to maximize profit. The task allocator module may also be termed as “task allocator” or “optimal assignment planner”. The tasks allocator reads various data related to an order such as quantity of ordered product, product components, materials required for manufacturing each component of the product, tolerable delay, information of various suppliers, stock of available materials with various suppliers, capital cost of components quoted by the suppliers, manufacturing time of components quoted by suppliers. etc. The data may be read from an information repository or database. In an embodiment, the data related to the product may be read from bill-of-material (BOM) including information about the product, its components, materials required to manufacture each component. In an embodiment, the data related to suppliers may be read from supplier database or repository. Based upon the read data and/or one or more constraints (e.g., tolerable delay, urgent order, suppliers non-working days, etc.) provided by one or more suppliers and/or manufacturer, the tasks allocator dynamically generates the most reasonable (optimal) task allocation schedule for different suppliers to maximize profit. The tasks allocator utilizes product topology and linear programming to generate the most reasonable task allocation schedule/planning. For example, if there are two suppliers to manufacture a component of an ordered product and the manufacturing cost quotation by 1st supplier is more than the 2nd supplier, however the transportation cost for the 1st supplier is drastically less than the 2nd supplier then the tasks allocator determines the best supplier among the two for manufacturing the component considering which may lead to maximum profit or less total product cost. If there are any changes during runtime such as the selected supplier cannot deliver on quoted time or cost, change in ordered product quantity, etc., these runtime changes or constraints may be provided to the task allocator to dynamically update optimized task allocation schedule and reallocate and re-assign the manufacturing tasks to various vendors according to the updated optimized schedule. Therefore, the tasks allocator provides most optimal tasks assignments with balancing product cost and manufacturing time to maximize profit.
“In-memory” database refers to a database that relies on main memory for computer data storage. In some examples, the in-memory database includes a combination of main memory and disk storage. Also, the in-memory database may support real-time analytics and transactional processing including replication and aggregation techniques. Also, within the in-memory database environment, calculation logic is pushed down into the database layer (as opposed to residing in the application layer) such that the processing time for querying and manipulating the data within the database may be reduced as compared with conventional relational database. In some examples, the in-memory database may be HANA® Enterprise 1.0 (or any other versions). However, the techniques described herein may be applied to any type of relational database as well.
The task allocator 110 generates and/or updates the optimized planning schedule (e.g., the optimized schedule 120 of
Based upon the production or manufacturing topology of the product (e.g., the manufacturing topology 300 of the product A) and applying linear programming the task allocator 110 generates an optimized planning schedule (e.g., the optimized schedule 120 of
Suppose an order for product is received by a manufacturer. The product may comprise N parts, which may be represent by Pk(k=1, 2, . . . , N). Each product of the order needs NPk units of Pk and Pk is made up of materials of mik(i=1, 2, . . . , Nk), Nk is the total kinds of materials to manufacture part Pk. Each Pk need Gik units of mik. Part Pk may has several vendors or suppliers, which contains Vjk, NVk is the total number of part Pk's vendor. Vendor Vjk(j=1, 2, . . . , NVk) has a stock of gikj units mik. The manufactural cost of each part Pk with materials of vendor Vjk is Cmjk, which means the vendors should provide materials. The manufactural cost of each part Pk without materials of vendor Vjk is Cjk, the average transportation cost of each part Pk of vendor Vjk is Ctjk. xjk represents the number of Pk with materials for vendor Vjk to manufacture, yjk represents the number of Pk without materials for vendor Vjk to manufacture.
Based upon the above scenario, the functions and equations that may be used by the task allocator 110 in generating optimized planning schedule may be:
(i) Capital cost of the product:— The capital cost of the product includes the production cost and the transportation cost. The capital cost of the product may be determined by: (a) determining capital cost of each part Pk by applying the below equation:
C
Pk=Σj=1NV
and (b) determining the total capital cost of the product by summarizing the capital cost of all parts or components of the product, e.g., by using the below equation:
C=Σ
k=1
N
C
Pk
(ii) Manufacturing time of the product:— The manufacturing time of the product may be calculated by: (a) determining average time required to produce a unit of part Pk of vendor Vjk i.e., Tpjk, the average time required to transport a unit of part Pk of vendor Vjk i.e., Ttjk, and the time required to wait for of vendor Vjk to start (from receiving order to starting manufacturing) i.e., Tdjk; (b) determining time to complete the order of vendor Vjk for part Pk as manufacturing of some parts can be dependent on other parts (i.e., the manufacturing of same parts can be started after manufacturing of some other parts have been completed, so the time to complete the order of vendor Vjk for part Pk may be calculated using the below equations:
T
j
k
=Tm
j
k
+Tw
j
k
Tm
k
k=(Tpjk+Ttjk)(xjk+yjk)
Tw
j
k=max(Tdjk,Tprek)
“where Tprek represents the latest complete time (the order from receiving to closing) of the parts which part Pk is based, if Pk isn't dependent upon any other parts, Tprek=0;”
and (c) determining a total manufacturing time for part Pk by using the below equation:
T
k=max(Tjk)
Using the above functions or equations, the product manufacturing topology (e.g., the manufacturing topology 300 of the product A), the suppliers data, and applying the linear programming, the task allocator 110 generates the optimized planning schedule. The generation of the optimized planning schedule may be described with reference to
Referring back to
Each product A of the order may contain 1 unit of P1, 2 units of P2, 1 unit of P3. Further, as shown in the PRODUCT_TABLE, P1 is made up of 3 kinds of materials m11, m21, m31, part P2 is made up of 2 kinds of materials m12, m22, and P3 is made up of 2 kinds of materials m13, m23.
Once the product data is read, the task allocator 110 reads the suppliers or vendors data such as stock of available materials, capital cost of one or more parts of the product, manufacturing time of one or more parts of the product, etc. The suppliers data may be read from a database table stored in the information repository. An exemplarily supplier database table namely VENDOR_TABLE may be as shown below:
As read from the VENDOR_TABLE, parts P1, P2, and P3 have two vendors. Once the task allocator 110 reads the suppliers data (e.g., from the VENDOR_TABLE) and identifies the manufacturing topology 300 of the product A, the task allocator 110 determines the manufacturing time of the product A by the latest complete parts, using the below equation:
T=max(Tk)
As the manufacturing time of the component represented by the node Pk is determined based on its' precursor or predecessor node, so the node without precursor node may have the largest value of total manufacturing time. Therefore, the time T may be redefined as:
T=max(Tk)
(where k is set as the values of parts' labels whose node not have precursor nodes. And for the product A, TA=T3
Once the manufacturing cost and time of the product A is determined by the task allocator 110, the task allocator 110 applies linear programming to normalize the determined manufacturing cost and time of the product A. In an embodiment, different customers or manufacturers may have different priority for ‘manufacturing cost’ and ‘manufacturing time’, e.g., some manufacturer may want to hit the market at the earliest without much consideration of the manufacturing cost manufacturing time is more critical), therefore, the manufacturer may assign different weight/weightage to the manufacturing cost and time of the product. Once the manufacturing cost and time of the product A is determined by the task allocator 110 (e.g., based upon the respective weight of the manufacturing cost and lime provided by the manufacturer), the task allocator 110 normalize the manufacturing cost and time (e.g., using linear programming to move them to the same scale). In an embodiment, to find an optimal and reasonable task assignment solution, the constant in the formula does not affect the result of the optimal solution, so the constant in the formula may be removed and the coefficients of the variables in the below equations are normalized separately:
C=Σ
k=1
N
C
Pk
T=max(Tk)
Once the normalization is completed, the task allocator 110 calculates the total cost of product or product cost by using the below equation:
Cnor=wCCnorm+wTTnorm
s.t.w
C
+w
T=1
w
C
,w
T≥0
Cnorm is the result of C without constant and coefficient normalized. Tnorm is the result of T without constant and coefficient normalized, wC is the weight of Cnorm, wT is the weight of Tnorm, wC, wT is provided by customer/manufacturer. In an embodiment, the above calculation uses scaling method with the below equation to normalize:
(where Xn is the original data. Σ Xn is the summary of Xn).
The task allocator 110 minimize the product cost or equation Cnorm. In an embodiment, the value of xjk and yjk may be determined with the linear programming with considering some constrains such as the number of parts produced by all the vendors matches the order represent by the equation Σj=1NV
and xjk, yjk≥0) and the task for vendor Vjk not to be more than it can supply or bare, e.g., the number of Pk with materials for vendor Vjk to manufacture should be less than the stock, (e.g., represent by the equation
In an embodiment, the product or capital cost C is determined with variables xjk, yjk using the below equations:
C
Pk=Σj=1NV
C=Σ
k=1
N
C
Pk
The manufacturing time T of the product may be determined using the manufacturing topology of the product and below equations:
Tw
j
k=max(Tdjk,Tprek)
T
k=max(Tjk)
T=max(Tk)
In an embodiment, the manufacturing time of the product may be determined using supplier's or vendor's time topology.
In an embodiment, using the generic supplier timeline topology (e.g., the generic supplier timeline topology 400 of
Once the production timeline topology 540 of the product A is generated, the task allocator 110 determines all routes from nodes without predecessor node(s) to nodes without successor nodes in the production timeline topology 540.
In an embodiment, the task allocator 110 applies the below mentioned equations to determine the total manufacturing time of the product for each path, total manufacturing cost, and the normalized total manufacturing cost for each path. For example, for the path 610, the total manufacturing time of product A can be expressed by the below equation:
T
A
=T
3
=T
1
3
=Tm
1
3
+Td
1
3=(Tp13+Tt13)(x13+y13)+Td13
and the normalization of TA by below equation:
T
A
norm=0.5x13+0.5y13
the total capital cost of product A can be expressed by the below equation:
C
A=(Cm11+Ct11)x11+(C11+Ct11)y11+(Cm21+Ct21)+x21+(C21+Ct21)y21+(Cm12+Ct12)x12+(C12+Ct12)y12+(Cm22+Ct22)x22+(C22+Ct22)y22
the sum of all coefficients in the equation can be calculated as:
S
COE=(Cm11+Ct11)+(C11+Ct11)+(Cm21+Ct21)+(C21+Ct21)+(Cm12+Ct12)+(C12+Ct12)+(Cm22+Ct22)+(C22+Ct22)
the normalization of CA can be expressed by:
the total cost of product A after normalization can be represent by the below equation:
C
norm
=w
C
C
A
norm
+w
T
T
A
norm
In order to get the minimize Cnorm, the below equations may be used with Cnorm subject to:
Once the total manufacturing cost and the normalized total manufacturing cost for each path (e.g., the path 610, 615, 620, 625, 630, 635, 640, 645, 650, and 655) is determined/calculated. The path with the minimum total manufacturing cost or the minimum normalized total manufacturing cost may be selected as the optimal path by the task allocator 110. The selected optimal path may be used for generating the optimal programming schedule. In an embodiment, the optimal programming schedule includes the schedule to allocate/assign tasks for various suppliers based upon the optimal path selected by the task allocator 110. For example, if the path 655, i.e., Td22->Tm22->Tm23 has the minimum total manufacturing cost or minimum normalized total manufacturing cost then the optimal programming schedule includes the schedule based upon the path 655. Based upon the generated optimal programming schedule, the manufacturing tasks is assigned to the one or more vendors, e.g., based upon the selected path Td22->Tm22->Tm23, the manufacturing of the components or parts P1, P2, P3 of the product A may be assigned to the vendor 2.
In an embodiment, a manufacturer may input the number of products needed and the weight of capital cost and weight of manufacturing time, the vendors or suppliers may input stock of materials for one or more parts of the product, capital cost of each part, and manufacturing time of each part, and a system administrator may enter a detailed information of the products, such as the parts it consisted of, the vendor of each part, the quality of material each part needed. Based upon the manufacturer input, the suppliers input, and the system administrator input, the task allocator automatically and dynamically determines an optimal tasks assignment to various vendor or supplier to fulfill an order based upon linear programming.
Some embodiments may include the above-described methods being written as one or more software components. These components, and the functionality associated with each, may be used by client, server, distributed, or peer computer systems. These components may be written in a computer language corresponding to one or more programming languages such as, functional, declarative, procedural, object-oriented, lower level languages and the like. They may be linked to other components via various application programming interfaces and then compiled into one complete application for a server or a client. Alternatively, the components maybe implemented in server and client applications. Further, these components may be linked together via various distributed programming protocols. Some example embodiments may include remote procedure calls being used to implement one or more of these components across a distributed programming environment. For example, a logic level may reside on a first computer system that is remotely located from a second computer system containing an interface level (e.g., a graphical user interface). These first and second computer systems can be configured in a server-client, peer-to-peer, or some other configuration. The clients can vary in complexity from mobile and handheld devices, to thin clients and on to thick clients or even other servers.
The above-illustrated software components are tangibly stored on a computer readable storage medium as instructions. The term “computer readable storage medium” includes a single medium or multiple media that stores one or more sets of instructions. The term “computer readable storage medium” includes physical article that is capable of undergoing a set of physical changes to physically store, encode, or otherwise carry a set of instructions for execution by a computer system which causes the computer system to perform the methods or process steps described, represented, or illustrated herein. A computer readable storage medium may be a non-transitory computer readable storage medium. Examples of a non-transitory computer readable storage media include, but are not limited to: magnetic media, such as hard disks, floppy disks, and magnetic tape; optical media such as CD-ROMs, DVDs and holographic indicator devices; magneto-optical media; and hardware devices that are specially configured to store and execute, such as application-specific integrated circuits (“ASICs”), programmable logic devices (“PLDs”) and ROM and RAM devices. Examples of computer readable instructions include machine code; such as produced by a compiler; and files containing higher-level code that are executed by a computer using an interpreter. For example, an embodiment may be implemented using Java, C++, or other object-oriented programming language and development tools. Another embodiment may be implemented in hard-wired circuitry in place of, or in combination with machine readable software instructions.
A data source is an information resource. Data sources include sources of data that enable data storage and retrieval. Data sources may include databases, such as, relational, transactional, hierarchical, multi-dimensional (e.g., OLAP), object oriented databases, and the like. Further data sources include tabular data (e.g., spreadsheets, delimited text files), data tagged with a markup language (e.g., XML data), transactional data, unstructured data (e.g., text files, screen scrapings), hierarchical data (e.g., data in a file system, XML data), files, a plurality of reports, and any other data source accessible through an established protocol, such as, Open Database Connectivity (ODBC), produced by an underlying software system, e.g., an enterprise resource planning (ERP) system, and the like. Data sources may also include a data source where the data is not tangibly stored or otherwise ephemeral such as data streams, broadcast data, and the like. These data sources can include associated data foundations, semantic layers, management systems, security systems and so on.
In the above description, numerous specific details are set forth to provide a thorough understanding of embodiments. One skilled in the relevant art will recognize, however that the one or more embodiments can be practiced without one or more of the specific details or with other methods, components, techniques, etc. In other instances, well-known operations or structures are not shown or described in details.
Although the processes illustrated and described herein include series of steps, it will be appreciated that the different embodiments are not limited by the illustrated ordering of steps, as some steps may occur in different orders, some concurrently with other steps apart from that shown and described herein. In addition, not all illustrated steps may be required to implement a methodology in accordance with the one or more embodiments. Moreover, it will be appreciated that the processes may be implemented in association with the apparatus and systems illustrated and described herein as well as in association with other systems not illustrated.
The above descriptions and illustrations of embodiments, including what is described in the Abstract, is not intended to be exhaustive or to limit the one or more embodiments to the precise forms disclosed. While specific embodiments of, and examples for, the embodiment are described herein for illustrative purposes, various equivalent modifications are possible within the scope of the embodiments, as those skilled in the relevant art will recognize. These modifications can be made to the embodiments in light of the above detailed description. Rather, the scope of the one or more embodiments is to be determined by the following claims, which are to be interpreted in accordance with established doctrines of claim construction.