The present disclosure relates to customer centers and more specifically to scheduling, and more specifically, to automatically scheduling a customer center workforce.
A manager in a customer center typically uses workforce scheduling software to create a schedule which assigns workers (agents) to shifts throughout the workday. The scheduling software chooses an optimal schedule that meets constraints while optimizing goals. Inputs such as predicted workload (e.g., call volume in 15-minute intervals, average call duration) and work rules (e.g., maximum shift length, possible shift start time, break requirements) are treated as constraints. Inputs such as expected level of service (e.g., call hold time) are treated as goals. The scheduler generates many possible schedules, and examines the possibilities to find a schedule that optimizes goals while remaining within the constraint boundaries.
Shift assignment rules are used to ensure that agents (or groups of agents) are assigned a certain number of shifts, days off, weekends off, working holidays, etc., within a given rule period. To provide for a more flexible workforce, it is desirable to allow for a rule period greater than one week (e.g., “worker must work 80 hours each 2 weeks”). However, conventional scheduling techniques typically cannot optimize for more than a one-week scheduling period, and combining a one-week schedule with a multi-week rule leads to difficulties when rules are dependent. For example, the rule “Must work 1 weekend each 2 weeks” and “Must work 2 days each 2 weeks” are dependent. To convert these rules into the correct combination of single-week rules (e.g., “Must work 1 weekend first week”, “Must work 2 days first week”, “Must work 0 weekends second week” and “Must work 0 days second week”) requires a multi-week combinatorial search which is computationally infeasible. Thus, a need arises for these and other problems to be addressed.
Systems and methods of scheduling a customer center workforce are disclosed. One example method includes ordering a set of slots in the scheduling period. The method further includes binding a portion of worker shifts within a domain to the ordered set of slots to produce a first schedule. The first schedule has a first evaluation factor. The method further includes comparing the score of the first schedule to a second evaluation factor. The method further comprises outputting a selected schedule based on the comparison.
Another example method includes binding one shift within a portion of shifts to one of a set of slots. The method further includes updating a plurality of counters in accordance with the binding. Each counter has a corresponding work rule, and each work rule has a target. The method further includes computing a score for the current schedule. The score is based on a difference between each counter and the target for the corresponding work rule. The method further includes comparing the score with a best score and updating the best score based on the comparison. The method repeats the steps until each slot is bound, to produce a current schedule.
An example system includes logic configured to order a set of slots in the scheduling period. The system further includes logic configured to bind a selected portion of shifts to the slots to produce a current schedule having a score. The logic configured to bind includes logic configured to bind one shift in the selected portion of shifts to one slot. The logic configured to bind further includes logic configured to update a counters in accordance with the bound shift. Each counter has a corresponding work rule and each work rule has a target. The logic configured to bind further includes logic configured to compute the score of the current schedule. The score is based on a difference between each counter and the target for the corresponding work rule.
Many aspects of the disclosure can be better understood with reference to the following drawings. The components in the drawings are not necessarily to scale, emphasis instead being placed upon clearly illustrating the principles of the present disclosure.
When generating a schedule of shifts assigned to workers, the scheduling software searches the problem space of possible schedules for an optimal schedule, while using shift assignment rules as a constraint. The optimal schedule is determined by calculating a score for each schedule under consideration, and comparing that score to a target. Embodiments of scheduling software disclosed herein generate a schedule having a multi-week scheduling period in combination with rules having a longer period (e.g., a scheduling period of 2 weeks in combination with a rule “Must work 1 weekend each 6 weeks”). Assignment rules which span a scheduling period are handled by adjusting the rule's target among divisions of the scheduling period.
A contact router 140 distributes incoming contacts to available agents. When the contacts are made by traditional phone lines, the contact router 140 operates by connecting outside trunk lines 150 to agent trunk lines 160. In this environment, the contact router 140 may be implemented by an automatic call distributor (ACD), which queues calls until a suitable agent is available. Other types of contacts, such as Voice over Internet Protocol (VoIP) calls and computer-based contacts (e.g., chat, email) are routed over one or more data networks. These contacts are distributed over network 130 to one of the agent workstations 120.
During a customer contact, the agent interacts with one or more applications running on the workstation 120. Example workstation applications give the agent access to customer records, product information, ordering status, and transaction history, for example. The applications may access one or more business databases (not shown) via the network 130.
A contact recorder 170 provides the ability to capture or record contacts of many different types, including traditional and IP telephony environments, text chat, web collaboration, email, and fax. A recorded contact may consist of multiple streams of data. One stream may be considered a “content” stream: on a voice call, the content stream is a digitized voice stream; on a text chat contact, the content stream is text.
A customer center may include, but is not limited to, outsourced customer centers, outsourced customer relationship management, customer relationship management, voice of the customer, customer interaction, customer center, multi-media customer center, remote office, distributed enterprise, work-at-home agents, remote agents, branch office, back office, performance optimization, workforce optimization, hosted customer centers, and speech analytics, for example.
Customer center 100 also includes a workforce management system (WFMS) 200. WFMS 200 performs various functions. One such function is providing a customer center supervisor or manager with information about agents and contacts, both historical and real-time. Another function is supplying the supervisor with information on how well each agent complies with customer center policies. Yet another function is calculating staffing levels and creating agent schedules based on historical patterns of incoming contacts.
In the environment described above, the workers assigned to shifts are customer center agents. However, the scheduling methods and systems described herein are also applicable to scheduling other kinds of workers in other types of work environments. Therefore, the remaining embodiments will refer to workers rather than agents.
In one embodiment, WMFS 100 includes, is integrated with, or communicates with one or more of a performance manager, an evaluation manager, and a development manager. The evaluation manager allows various types of worker performance review processes to be managed (i.e., 360 degree reviews). The performance manager receives data from the evaluation manager and presents the performance data to the customer center manager through various scorecard views. The development manager tracks worker Learning/Development and detects a need for training.
It should be noted that customer center 100 herein can contain system which perform speech analytics (i.e., the analysis of recorded speech or real-time speech), and which can be used to perform a variety of functions, such as automated call evaluation, call scoring, quality monitoring, quality assessment and compliance/adherence. By way of example, speech analytics can be used to compare a recorded interaction to a script (e.g., a script that the agent was to use during the interaction). In other words, speech analytics can be used to measure how well agents adhere to scripts, identify which agents are “good” sales people and which ones need additional training. As such, speech analytics can be used to find agents who do not adhere to scripts. Yet in another example, speech analytics can measure script effectiveness, identify which scripts are effective and which are not, and find, for example, the section of a script that displeases or upsets customers (e.g., based on emotion detection). As another example, compliance with various policies can be determined. Such may be in the case of, for example, the collections industry where it is a highly regulated business and agents must abide by many rules. The speech analytics of the present disclosure may identify when agents are not adhering to their scripts and guidelines. This can potentially improve collection effectiveness and reduce corporate liability and risk.
In this regard, various types of recording components can be used to facilitate speech analytics. Specifically, such recording components can perform one or more of various functions such as receiving, capturing, intercepting, and tapping of data. This can involve the use of active and/or passive recording techniques, as well as the recording of voice and/or screen data.
It should be noted that speech analytics can be used in conjunction with such screen data (e.g., screen data captured from an agent's workstation/PC) for evaluation, scoring, analysis, adherence, and compliance purposes, for example. Such integrated functionality can improve the effectiveness and efficiency of, for example, quality assurance programs. For example, the integrated function can help companies to locate appropriate calls (and related screen interactions) for quality monitoring and evaluation. This type of “precision” monitoring improves the effectiveness and productivity of quality assurance programs.
Another aspect that can be accomplished involves fraud detection. In this regard, various manners can be used to determine the identity of a particular speaker. In some embodiments, speech analytics can be used (independently and/or in combination with other techniques) to perform fraud detection. Specifically, some embodiments can involve identification of a speaker (e.g., a customer) and correlating this identification with other information to determine whether a fraudulent claim for example is being made. If such potential fraud is identified, some embodiments can provide an alert. For example, the speech analytics of the present disclosure may identify the emotions of callers. The identified emotions can be used in conjunction with identifying specific concepts to help companies spot either agents or callers/customers who are involved in fraudulent activities.
Referring back to the collections example outlined above, by using emotion and concept detection, companies can identify which customers are attempting to mislead collectors into believing that they are going to pay. The earlier the company is aware of a problem account, the more recourse options they may have. Thus, the speech analytics of the present disclosure can function as an early warning system to reduce losses.
Also included in this disclosure are embodiments of integrated workforce optimization platforms, as discussed in U.S. patent application Ser. No. 11/359,356, filed on Feb. 22, 2006, entitled “Systems and Methods for Workforce Optimization,” and U.S. patent application Ser. No. 11/540,185, filed on Sep. 29, 2006, entitled “Systems and Methods for facilitating Contact Center Coaching,” both of which are hereby incorporated by reference in their entireties. At least one embodiment of an integrated workforce optimization platform integrates: (1) Quality Monitoring/Call Recording—voice of the customer; the complete customer experience across multimedia touch points; (2) Workforce Management—strategic forecasting and scheduling that drives efficiency and adherence, aids in planning, and helps facilitate optimum staffing and service levels; (3) Performance Management—key performance indicators (Kips) and scorecards that analyze and help identify synergies, opportunities and improvement areas; (4) e-Learning—training, new information and protocol disseminated to staff, leveraging best practice customer interactions and delivering learning to support development; (5) Analytics—deliver insights from customer interactions to drive business performance; and/or (6) Coaching—feedback to promote efficient performance. By way of example, the integrated workforce optimization process and system can include planning and establishing goals—from both an enterprise and center perspective—to ensure alignment and objectives that complement and support one another. Such planning may be complemented with forecasting and scheduling of the workforce to ensure optimum service levels. Recording and measuring performance may also be utilized, leveraging quality monitoring/call recording to assess service quality and the customer experience.
Shift definition rules 220 and assignment rules 230 are provided as input to a scheduler component 240. In some embodiment, rules 220 and 230 are associated with a particular set of shifts and/or scheduling periods. Scheduler 240 also receives a workforce description 250, identifying a set of workers. Scheduler 240 produces a schedule 260 for the workers that attempts to optimize a goals input 270, while also meeting demand for a forecasted workload 280, and constraints imposed by rules 220 and 230.
An overview of a scheduling process implemented by one embodiment of scheduler 240 will now be described. In the scheduling scenario illustrated in
As each shift 330 is bound, a set of counts (340) is updated, where each count 340 is associated with an assignment rule 230. Scheduler 240 then uses counts 340 to determine a global score 350 for the particular schedule 320 under consideration. The scheduling process can be viewed as a search for a schedule 320 with a good, or good enough, score 350. The schedule 320 with the best score 350 so far is saved, and the search continues by removing some shift assignments and adding others.
Process 400 starts at block 405, where state variables used in the process are initialized. In this example embodiment, this initialization includes: Score=0; Best=0; Pass=1; and Schedule=None. Next, the set of slots to be bound (310S in
Processing continues at block 415, where the domain of shifts for binding (330D) is determined, based on shift definition rules 220. Next, a random sample of shifts from domain 220-A is selected at block 420. The binding order of slots 310 is then determined at block 425. Various orderings are possible, including greedy (i.e., shifts are scheduled according to how well each improves the global score), most-constrained-first (i.e. shifts are scheduled according to the number of allowable start times); and fill-outwards (start at some random day, and then schedule from before the starting point and then after of the starting point). Other variations allow each of the previous types of ordering, and also add the week that shift belongs to. In one embodiment, the first two passes use greedy and most-constrained-first slot orderings, and successive passes use a random one of the other orderings.
Next, at block 430, a set of shifts within the sample are selected and bound to slots in set 310S. This set of bindings represents a schedule 320, and the schedule 320 has a score that is computed as bindings are added to, and removed from, the schedule. This score can be viewed as an evaluation factor, against which a schedule is evaluated. The shifts are selected in a manner which results in the best score while not violating any hard constraints imposed by work rules. The binding and scoring process of block 430, which can also be viewed as a search, will be described in more detail in connection with the flowchart
Processing continues at block 435, which determines if the score of the current schedule under consideration is higher than the best score so far. If the current schedule has a better score, then the Best variable is updated at block 440 to reflect the current score. Thus, the Best variable can be considered as a different evaluation factor, and is compared to the first evaluation factor (score).
After this block, or if the current schedule does not have a better score, the Pass variable is compared to a maximum, at block 445. If Pass has reached a maximum, then the schedule currently under consideration is considered to be good enough, and processing is complete. In another embodiment, processing completes when the schedule has a score or evaluation factor that exceeds a threshold.
If Pass has not reached the maximum, then processing continues at block 450, where the current schedule is adjusted by removing one more bound shifts. In one embodiment, shifts are removed randomly. In another embodiment, shifts that decrease the global score the least are removed. Removing shifts and rescheduling has the effect of starting the search from a different schedule, which allows the overall process to explore different schedules.
Next, block 455 determines whether any work rules are violated by the current schedule as modified by the unbinding. If Yes, then the sample of shifts is expanded at block 460 to include other shifts in domain 330D. After block 460, or if no rules are violated, then processing returns to block 425.
A slot ordering is selected at block 460, and the search continues with the current schedule under consideration. This next iteration of the search may use a different set of shift bindings (as adjusted by block 450), and/or the sample of shifts may have been expanded. The process continues for a maximum number of passes (iterations), at which point the schedule under consideration is considered to be good enough.
Binding order of slots is important because of its interaction with constraint propagation. Constraint propagation works as follows. Suppose that a shift definition rule defines a worker's shifts as starting at 8 AM, 9 AM, 10 AM, or 11 AM for weekdays (M-F), and that another rule says “Shifts must start at the same time throughout the week”. On Monday, the best service level could be expected from an 8 AM start time, but on all the other days, the best service could be expected for an 11 AM start time. Consider the following slot orderings: (M, T, W, Th, F) and (W, M, T, Th, F). The first ordering (M, T, W, Th, F) schedules the Monday slot first, and Monday 8 AM shift is selected (best service level). Then, because of the “Shifts must start at same time” rule and constraint propagation, all other slot days (T, W, Th, F) is constrained to the 8 AM start time. The result in a less than optimal schedule in terms of service level, as four “best” 11 AM shifts beat one “best” 8 AM shift. However, the second ordering (W, M, T, Th, F) selects the 11 AM shift, and results in a better schedule.
Having discussed the importance of ordering, the benefits of particular orderings will now be discussed. Suppose that a shift definition rule defines a worker's shifts as starting at 8 AM Monday, or 8-11 AM for Tuesday-Friday, and that another rule says “Shifts must start at the same time throughout the week”. The ordering (W, M, T, Th, F) results in the selection of 11 AM for Wednesday, which would then eliminate the Monday 8 AM shift (due to “Shifts must start at same time” rule and constraint propagation). Thus, when time to schedule the Monday slot, there would be no legal start times left. The scheduler would be unable to schedule the slot (a “conflict”). However, using ‘Most constrained first’ ordering instead selects the Monday slot first, since it had the smallest domain (i.e. was most constrained) and results in a schedule with no conflicts.
To understand the “greedy” ordering, consider the previous examples, but replacing the “Shifts must start at the same time” rule with “Must work exactly 1 day each week” and “Must work exactly 1 Friday each week” rules. Now consider the ordering (M, T, W, Th, F). To satisfy the “exactly 1 day’”rule, a shift would be assigned to the Monday slot, and on Friday the scheduler would have a conflict—scheduling another shift on Friday violates the “exactly 1 day” rule. However, a “greedy” ordering would yield (F, M, . . . ), as binding the Friday slot to a shift satisfies two rules (giving the best possible score). Therefore, the “greedy” ordering leads to a good solution.
As described earlier, a particular assignment rule 230 could be confined to a single scheduling period, or could span across more than one scheduling period (e.g., an “every 2 weeks” rule with a single-week scheduling period). In the first case, the assignment rule 230 can be viewed as having a single target. In the second case, the assignment rule 230 can be viewed as having multiple targets, one for each schedule division in the rule period. Consider a hypothetical scenario in which the scheduling period is 2 weeks, and the assignment rule 230 is “Must work 1 weekend each 6 weeks”. This assignment rule 230 can then be considered to have one target for the first division (weeks 1-2), another target for the middle division (weeks 3-4), and yet another target for the last division (weeks 5-6). Scheduler 240 adjusts these multiple targets for rules that span scheduling periods by prorating, as follows.
For any such rule period that starts before/at, and ends during, the period, the target specified in the rule is used (i.e., the target is not adjusted). For any rule period that ends after the scheduling period, scheduler 240 determines how much of the rule period intersects with the scheduling period. Scheduler 240 then prorates the target by applying the percent of intersection to the rule target. That is, the target is divided among each division within the rule period. For example, if a rule having a target of 9 intersects the schedule by 33 percent, then the adjusted target for each of the schedule periods is an integer value of 3 days (0.33*9). However, if the prorated target is fractional, scheduler 240 rounds from a fraction to a whole unit, and the whole unit becomes the target of one of the multiple divisions, picked at random.
One embodiment of this fractional prorating works as follows. Scheduler 240 calculates how much time is left to satisfy the rule, expressed a fraction. For example, when the current scheduling period is division 1 (weeks 1 &2) of a 6-week rule, the time left is (6-2)/6=0.66, if the current period is division 2 (weeks 3&4), the time left is (6-4)/6=0.33, and if the current period is division 3 (weeks 5&6), then the time left is (6-6)/6=0. Scheduler 240 determines which division gets the rounded whole unit by comparing the prorated fractional target to a random fractional number between 0 and 1 (e.g., seeded on worker and week). When the random fractional number is greater than the time left to satisfy, then scheduler 240 rounds up and assigns the whole unit to the target for the following scheduling period. When the random fractional number is greater than the time left to satisfy, then scheduler 240 rounds down and assigns the whole unit to the target for the current scheduling period. This has the affect of distributing the target evenly across scheduling periods. For example, each scheduling period gets the same number of weekends, but a particular worker may or may not be scheduled on a weekend during a given scheduling period.
Consider an example scenario, with a rule “Must work 1 full weekend each 6 weeks” and a scheduling period of 2 weeks. The prorating calculation results in ( 2/6)=0.33*1 full weekend=0.33 full weekends each scheduling period. Suppose the random number is 0.42. When the first scheduling period in the 6-week rule is under consideration, the percent time left to satisfy the rule is 4/6=0.6666. Since 0.6666>0.42, scheduler 240 rounds down and assigns 0 to the target for the first 2-week period within the rule period. When the second scheduling period in the 6-week rule is under consideration, the percent time left is 2/6=⅓=0.3333. Since 0.3333<0.42, scheduler 240 rounds up, and assigns 1 to the target for the second 2-week period within the rule period. Note that comparing a fractional random number against percent time left leads to a round up at some point. In addition, seeding the pseudo-random number on worker and week guarantees that on average, the rounding will be distributed evenly across workers and weeks. An additional benefit of the seeded pseudo random number is that is maintains consistency when rescheduling the same week.
Some embodiments of scheduler 240 support a type of work rule designed to insure that shift assignments are fair (“fairness rules”). Because fairness rules do not have fixed targets, some of these embodiments compute targets as follows. Scheduler 240 initially ignores fairness rules and schedules for demand, a technique known as “relaxation”. Scheduler 240 next computes an average value for the worker group in the rule for the unit being counted. Then scheduler 240 does another pass and targets the computed average value, within some predetermined tolerance. In some embodiments, the tolerance is 1.
Consider an example scenario, where the rule period is 2 weeks, the tolerance is 1, and the schedule produced by the relaxation pass is such that 10 workers in the group have 10 weekends between them. Note that at this stage scheduler 240 may have assigned some workers 2 weekends, and some 0 (due to randomness or perhaps some other rule), but the average is 1 weekend for each worker. In this example, the tolerance of ±1 allows some workers to get 0 weekends and some to get 2, for the first scheduling period. At first glance, this would seem undesirable. However, if the rule period was defined over a year, the maximum unfairness over the whole year would still be 2 weekends, which is acceptable. On the other hand, reducing the tolerance to zero can result in fractional targets, which are undesirable. For example, 5 weekends between 10 workers is 0.5 weekends per worker, which gives a target of 0 weekends (resulting in under-staffing) or 1 weekend (resulting in overstaffing). Using a minimum tolerance of 1 reduces problems with fractional targets.
A “class” rule takes the form “workers A, B, C, and D must attend between X and Y sessions of class X in this time period”. With multi-week scheduling, classes can be assigned to any time period which falls within the scheduling period. The general problem is to schedule the least number of class sessions for given attendee availability. This involves determining the required number of sessions (a specific class at a specific time), and finding clusters of workers that are all available for a given class session. Each class session is subject to its own start time constraints, minimum and maximum attendee constraints, and simultaneous-start-time constraints.
The search space for this problem is large, and the solution is computationally infeasible using an unconstrained local search. This can be understood by examining an example scenario. Suppose a class rule states “Workers A, B, C, D must each attend 1 session of class Z during some shift”. Furthermore, class Z must have exactly 2 sessions, each with between 2 and 4 attendees, and the class sessions may be placed on any M, W, F (between the hours of 4 PM and 7 PM) within the 3 week period. Note that the rule states “during some shift”: the attendee must attend the class session during some scheduled shift. This creates a dependence on slot shift assignments.
Now consider a multi-week repair technique which only searches locally across a single worker's schedule, and add the assignment rule “Must work exactly 1 day each 3 weeks” to each worker. The work rule “work exactly 1 day” limits each worker to only 1 shift during the 3 week period, while the class rule specifies that each shift must coincide for the duration of the class. Therefore, the scheduler cannot schedule each worker independently. Instead, for each class rule, the scheduler loads all attendee slots, combined with the class sessions, into a single local search space. Consider the size of this search space: each worker has 21 slots; each slot has 10 possible start times; each class session may have 50 or so possible start times; leading to (10̂(21̂4)) (for 4 workers) possible schedules. This search space is computationally infeasible.
The class scheduling algorithm described herein addresses this problem. When binding an event to an attendee, the class scheduling algorithm insures that this event will eventually be bound to a start time when an attendee is available, greatly reducing the number of wrong paths. Furthermore, the algorithm eliminates even more wrong paths by binding the variable which is most constrained first.
The class scheduler operates as follows. A worker is bound to a session when the scheduler makes a decision to place the worker in a class session. A session is bound to a start time. Sessions may have workers bound to it before the session is bound to some particular start time. A session's start times are always consistent with respect to all workers that are currently bound to the session. This means that for each worker bound to that session, that worker must have slot start times that allow worker's shift assignment to fully intersect the class session. A worker's slot shift assignment start times are always consistent with sessions to which the worker is bound. To understand this, consider what gets bound first: the slot shift assignment; the worker to a session (which may be itself bound or unbound); or the session to a start time.
Ordering of slot variables was discussed above in connection with
The class scheduling algorithm typically binds attendees to sessions first, and then slots or sessions are bound first, accordingly to the current pass. The implications of binding the attendee are as follows. Initially, sessions are not bound to any start time, so they are essentially identical. Thus, binding the attendee implies merely that all attendees bound to some session must form an availability group (i.e. attendees must all be available during some intersecting time of duration that is at least as great as the duration of the session). As we the class scheduler binds attendees to sessions, any session start times that would not be consistent with that worker are constrained. Furthermore, a worker is not bound to a session if such a binding results in all start times being constrained (i.e. an empty domain). In this way, binding the attendees essentially forms the availability groups. However, during the search a certain amount of randomness exists in group selection. Thus, if more than one availability group exists during different passes, then different random groups are formed during each pass. The ordering of slots then determines which group is in fact better, in terms of service level and other work rules.
The example scenario described above produced (10̂(21̂4)) possible schedules initially. However, once binding of slots to shift assignments (i.e. start times) is commenced, the class scheduling algorithm described herein rapidly shrinks the search space. Here is a sample search path for that same example scenario, assuming that Workers A & B are available first week and Workers C & D are available second week. Further suppose that initial conditions are unbound sessions X & Y.
Although this illustrates only one pass through the algorithm, and there may be hundreds of passes, the algorithm has nonetheless reduced the search space to a fraction of its original size. Note that this example uses one possible ordering, but there are many orderings that may target specific problems.
The systems and methods disclosed herein can be implemented in software, hardware, or a combination thereof. In some embodiments, the system and/or method is implemented in software that is stored in a memory and that is executed by a suitable microprocessor (μP) situated in a computing device. However, the systems and methods can be embodied in any computer-readable medium for use by or in connection with an instruction execution system, apparatus, or device. Such instruction execution systems include any computer-based system, processor-containing system, or other system that can fetch and execute the instructions from the instruction execution system. In other embodiments, the system and/or method is implemented in hardware, including, but not limited to, a programmable logic device (PLD), programmable gate array (PGA), field programmable gate array (FPGA) or an application-specific integrated circuit (ASIC).
In the context of this disclosure, a “computer-readable medium” can be any means that can contain, store, communicate, propagate, or transport the program for use by, or in connection with, the instruction execution system. The computer readable medium can be, for example but not limited to, a system or propagation medium that is based on electronic, magnetic, optical, electromagnetic, infrared, or semiconductor technology.
Specific examples of a computer-readable medium using electronic technology would include (but are not limited to) the following: an electrical connection (electronic) having one or more wires; a random access memory (RAM); a read-only memory (ROM); an erasable programmable read-only memory (EPROM or Flash memory). A specific example using magnetic technology includes (but is not limited to) a portable computer diskette. Specific examples using optical technology include (but are not limited to) optical fiber and compact disc read-only memory (CD-ROM).
It should be noted that any process descriptions or blocks in flowcharts should be understood as representing modules, segments, or portions of code which include one or more executable instructions for implementing specific logical functions or steps in the process. As would be understood by those of ordinary skill in the art of the software development, alternate embodiments are also included within the scope of the disclosure. In these alternate embodiments, functions may be executed out of order from that shown or discussed, including substantially concurrently or in reverse order, depending on the functionality involved.
This description has been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the disclosure to the precise forms disclosed. Obvious modifications or variations are possible in light of the above teachings. The embodiments discussed, however, were chosen to illustrate the principles of the disclosure, and its practical application. The disclosure is thus intended to enable one of ordinary skill in the art to use the disclosure, in various embodiments and with various modifications, as are suited to the particular use contemplated. All such modifications and variation are within the scope of this disclosure, as determined by the appended claims when interpreted in accordance with the breadth to which they are fairly and legally entitled.
This application claims the benefit of U.S. Provisional No. 60/940,858, filed May 30, 2007.
Number | Date | Country | |
---|---|---|---|
60940858 | May 2007 | US |