Layout optimization is the process of finding a best location scheme for a set of interactional objects in a constrained geographical area. Generally, each interactional object is affected by other nearby objects in terms of benefit and cost to the whole system, and the optimized layout can maximize the overall benefit and minimize the overall cost. Since the optimized location of one interactional object can be dependent on all of the other interactional objects, a solution to a layout optimization problem is not trivial. The lack of an ability to accurately solve layout optimization problems can results in, among other things, inefficiency in a system to be optimized, loss of revenue, a loss of marketing, sales, and/or business opportunities, and/or a failure of the system.
The present disclosure relates to computer-implemented methods, computer-readable media, and computer systems for finding a best location scheme for a set of interactional objects in a constrained geographical area. A geographic region representing a wind farm is partitioned into a plurality of lattices. Initial chromosomes are generated, where a particular chromosome is a binary series used to represent the presence of a wind turbine in a layout of the plurality of lattices. A cost associated with each wind turbine associated with the initial chromosomes is evaluated. Parent chromosomes are selected for a genetic operation, and following the genetic operation, a cost associated with each wind turbine if evaluated. The parent chromosomes are updated using a fitness value.
One computer-implemented method includes partitioning, a geographic region representing a wind farm into a plurality of lattices, generating initial chromosomes, wherein a particular chromosome is a binary series used to represent the presence of a wind turbine in a layout of the plurality of lattices, evaluating a cost associated with each wind turbine associated with the initial chromosomes, selecting parent chromosomes for a genetic operation, evaluating, following the genetic operation, a cost associated with each wind turbine, and updating the parent chromosomes using a fitness value.
Other implementations can include corresponding computer systems, apparatuses, and computer programs recorded on one or more computer storage devices, each configured to perform the actions of the methods. A system of one or more computers can be configured to perform particular operations or actions by virtue of having software, firmware, hardware, or a combination of software, firmware, or hardware installed on the system that in operation causes or causes the system to perform the actions. One or more computer programs can be configured to perform particular operations or actions by virtue of including instructions that, when executed by data processing apparatus, cause the apparatus to perform the actions.
The foregoing and other implementations can each optionally include one or more of the following features, alone or in combination:
A first aspect, combinable with the general implementation, wherein the genetic operation includes at least one of a crossover or mutation operation.
A second aspect, combinable with any of the previous aspects, comprising determining whether a generated value has met a maximum threshold value.
A third aspect, combinable with any of the previous aspects, establishing a candidate pool of feasible lattices associated with a wind farm, randomly selecting a lattice within the pool of feasible lattices, installing a wind turbine on the selected lattice, calculating a wind effect from the selected lattice, updating wind speed associated with neighboring lattices, removing the selected lattice from the candidate pool, and ranking wind speed of lattices in the candidate pool.
A fourth aspect, combinable with any of the previous aspects, comprising determining whether multiple lattices in the candidate pool have identical largest wind speeds.
A fifth aspect, combinable with any of the previous aspects, comprising determining and selecting a best lattice from among the multiple lattices in the candidate pool with identical largest wind speeds or selecting at random a best lattice from among the multiple lattices in the candidate pool with identical largest wind speeds.
A sixth aspect, combinable with any of the previous aspects, comprising updating the selected lattice with a wind turbine.
The subject matter described in this specification can be implemented in particular implementations so as to realize one or more of the following advantages. First, instead of approximating wind farm construction and maintenance costs relative to a particular number of wind turbines, specific values for factors (e.g., road construction, geographic constraints, etc.) are considered on a case-by-case basis. Second, a greedy initialization approach is proposed, which improves efficiency of a genetic algorithm (GA) and provides several good initial solutions with little time cost. Third, an optimal road construction methods/cost is proposed according to a given layout of wind turbines and existing public roads. This proposal permits evaluation of a wind farm layout with respect to specific wind farm conditions, factors, situations, etc. Fourth, setback constraints for prohibited areas are considered to help mitigate effects of the prohibited areas. Other advantages will be apparent to those skilled in the art.
The details of one or more implementations of the subject matter of this specification are set forth in the accompanying drawings and the description below. Other features, aspects, and advantages of the subject matter will become apparent from the description, the drawings, and the claims.
Like reference numbers and designations in the various drawings indicate like elements.
The following detailed description is presented to enable any person skilled in the art to make, use, and/or practice the disclosed subject matter, and is provided in the context of one or more particular implementations. Various modifications to the disclosed implementations will be readily apparent to those skilled in the art, and the general principles defined herein may be applied to other implementations and applications without departing from scope of the disclosure. Thus, the present disclosure is not intended to be limited to the described and/or illustrated implementations, but is to be accorded the widest scope consistent with the principles and features disclosed herein.
Layout optimization is the process of finding a best location scheme for of a set of interactional objects in a constrained geographical area. Generally, each interactional object is affected by other nearby objects in terms of benefit and cost to the whole system, and the optimized layout can maximize the overall benefit and minimize the overall cost. Since the optimized location of one interactional object can be dependent on all of the others interactional objects, a solution to a layout optimization problem is not trivial.
As will be understood by those of ordinary skill in the art, there are several real-world applications of this problem, such as layout designs of integrated circuits, placement of power generation units (e.g., such as wind turbines and tide turbines) in power plants, and/or distribution plans of sensor networks. While the following description focuses on wind farm layout optimization, wind power generation, and related interactional objects, computer-implemented methods, computer-readable media, and computer systems, the description is intended only to illustrate and enhance understanding of described concepts and is not meant to limit application of the described concepts to only the described example. Those of ordinary skill will understand modifications to at least the described systems and methods that are necessary to generalize the described concepts for applicability for other applications.
Wind energy has become one of the most important and fast-growing sources of renewable energy. Transformation of wind power into electrical power is performed by wind turbines, which are usually clustered together in a wind farm within a certain geographic region, called a “windy site.” To obtain wind energy efficiently, a wind farm layout optimization problem to optimize the layout of wind turbines in the windy site is an important phase of the wind farm's design. Several factors must be considered simultaneously during the optimization process, such as the cost of turbine installation, the cost of road building, the cost of maintenance, and the efficiency of overall electricity production. We call this problem the.
A genetic algorithm (GA) has traditionally been used to solve the wind farm layout optimization problem. However, GA is a population-based method suffering from both delayed result times and requiring a high computational burden during execution. Moreover, wind farm construction and maintenance costs are usually approximately expressed relative to a particular number of wind turbines 102. In actuality, some real-world factors (e.g., road construction, geographic constraints, etc.) are different from case-to-case and should be treated specifically, otherwise a generated optimal solution cannot be guaranteed, even if feasible.
The following detailed description describes various improvements to the use of GA for the wind farm layout optimization problem. First, instead of approximating wind farm construction and maintenance costs relative to a particular number of wind turbines, specific values for factors (e.g., road construction, geographic constraints, etc.) are considered on a case-by-case basis. Second, a greedy initialization approach is proposed, which improves GA efficiency and provides several good initial solutions with little time cost. Third, an optimal road construction method is proposed according to a given layout of wind turbines and existing public roads. This proposal permits evaluation of a wind farm layout with respect to specific wind farm conditions, factors, situations, etc. Fourth, setback constraints for prohibited areas are considered to help mitigate effects of the prohibited areas.
At a high level, a method is described to solve a layout optimization problem, in particular, a wind farm layout optimization problem, with a consideration of road construction costs. A GA approach is also proposed to solve the wind farm layout optimization problem with a good initial status and an adaptive evaluation function for high efficiency.
A GA is an algorithm that simulates the behaviors of genes to find the near-optimal solution for a particular problem. In the natural world, genes can crossover with each other, mutate, or be removed from the population due to its unfitness to the nature. After several generations the best genes may survive from the selection of nature. The process of solving a problem with a GA is similar.
Each potential solution (e.g. a layout of interactional objects over the constrained area) can be regarded as a gene (a.k.a. chromosome, or individual)—for the purposes of this disclosure, it is an array (e.g., of 0's and 1's) indicating the absence and presence of a wind turbine in a specific grid cell.
The algorithm first generates an initial population of genes (i.e. potential solutions) and then enters an iterative cycle to create the best gene (i.e. the optimal solution). In each iteration, a set of most fitting genes (i.e., with the highest fitness scores) are selected, and allowed to crossover with a random gene mate within the group. These crossovers can then generate another group of new genes. This new group of genes is then added to the original population, and those genes that have the lowest fitness scores from the original population are removed. After several rounds of iterations, the best genes (i.e. the optimal solutions) can be determined.
In some implementations, wind farm layout optimization begins by evenly partitioning target land into lattices. Lattices with any prohibited factor are eliminated.
Before a GA is implemented to solve the wind farm layout optimization problem, several potential solutions (i.e., possible layouts of objects) are generated as a part of a group of initial individual solutions for use by the GA. There are many methods for generating an initial population. For the purposes of this disclosure, the typical methods used are fully-random generation and greedy generation. The fully-random method generates each gene (i.e., a solution) fully randomly (i.e., placing n wind turbines randomly in an area to make a possible solution. The greedy generation method generates each gene by placing n wind turbines one-by-one to best locations. In other implementations, as will be appreciated by those of ordinary skill in the art, other methods consistent with this disclosure can be used for generating an initial population. Other methods for generating an initial population are considered to be within the scope of this disclosure.
A particular GA is then implemented to search for the best solution, in which, each individual solution is evaluated with consideration of a wake effect in benefit and an optimal road construction method in cost. For efficiency purposes, a general and simplified cost expression is utilized at the beginning phase of GA fitness evaluation, which is replaced by a proposed cost expression in a latter phase(s) to improve accuracy.
Problem Description
In some implementations, all wind turbines are assumed to be placed on a given windy site , where each component is defined as:
A total number (N) of wind turbines 102 is, in some implementations, fixed in advance. A layout of wind turbines 102, denoted by:
={p1,p2, . . . ,pN},
is a set of N points, each point corresponding to a wind turbine 102 of all wind turbines 102 placed on the windy site 200b. In some implementations, different layouts of wind turbines can correspond to different expected annual electricity production, denoted by:
E
total()
as well as different overall costs, denoted by:
C
total().
Therefore, the wind farm layout optimization problem is to find a layout () on a windy site (), such that the value of an objective function F() (i.e., “fitness”):
is maximized.
System Architecture
Input Data
In typical implementations, input data is stored in a database 302. In the provided example, the database is a column-store, in-memory database. In other implementations, a row-store and/or conventional database can be used. The input data includes geographic information, wind turbine information and other necessary parameters for electricity output computation.
For example, in some implementations, the geographic information used to describe properties of land in a wind farm 100 can be stored in the database 302 in a separate geographical information database table (Table 1) storing data similar to:
In the example geographical information table, each location in a certain geographical area is labeled by characteristics for a wind farm layout (e.g., statistical data of wind speed on the geographic area). In some implementations, the availability of a grid cell is indicated in the “Label” column in Table 1. A geographical area is suitable for wind turbine installation if and only if an applied label is set to “available” (or an equivalent). A label of “prohibited” (or the equivalent) is used in the case of, for example, a lake, buildings, livestock, and so on (i.e., prohibited areas) and indicates that no turbine can be placed within in it. A prohibited area affects the process of generating initial solutions, crossover, mutation, and selection in GA.
In some implementations, the technical parameters of a wind turbine used for computational purposes can be stored in the database 302 in a separate wind turbine information table (Table 2) storing data similar to:
In the example wind turbine information table, several parameters of the wind turbine are provided. Of particular note are rotor diameter and hub height values that are useful for wake effect calculations related to the particular wind turbine 102.
In some implementations, necessary parameters for cost evaluation and algorithm tuning can be stored in the database 302 in a separate algorithm parameter table (Table 3) storing data similar to:
Output Data
In typical implementations, output data is also stored in a database 302. The output data can be visualized through display device 320 (e.g., computing display, projector, etc.) using graphical user interface (GUI) 322 (e.g., a visual/icon-driven interface, etc.). For example, GUI 322 can show positions of wind turbines in the wind farm 100. Since a lattice partition is used for processing, a lattice position can be provided instead of an actual geographical location on the map. GUI 322 can also contain particular user interface designs to show optimization results (e.g., graphic visualization of wind farm layout and/or various dashboards).
In some implementations, the output data describing a wind farm 200 layout can be stored in the database 302 in a separate output data table (Table 4) storing data similar to:
In some implementations, the computing handler 304 is a computing module managing output computing and cost computing functions. In these implementations, an output computing 306 module includes a theoretical output evaluation 307a module for evaluating a layout of wind farm and its theoretical value without considering wake effects among wind turbines and an interactive effect evaluation 307b module to evaluate wake effect influence among wind turbines. A cost computing 308 module is used to calculate cost(s) for wind farm and manages main cost 309a and miscellaneous cost 309b functions. The main cost 309a module determines/contains the cost of wind turbines while the miscellaneous cost 309b module determines/contains miscellaneous costs (e.g., road construction costs, installation costs, transportation costs, and/or the like).
In some implementations, the optimization handler 310 is computing module to cope with layout optimization by using a GA and managing chromosome generator 312, fitness evaluator 314, genetic operator 316, and chromosome selection and update operator 316 functions. In these implementations, the chromosome generator 312 module encodes potential solutions as a chromosome. The fitness evaluator 314 module evaluates each chromosome with help of an included chromosome decode 315a module and a fitness function evaluation 315b module (e.g., using the objective function in the description of
Objective Function Calculations
In typical implementations, the objective function calculations use results of the above-described output computing and cost computing functions.
Electricity Production
With respect to calculation of power output, there are several existing methods to model expected annual electricity production value in the industry, such as a Jensen model and a CFD (computational fluid dynamics) model. For the purposes of this disclosure, the Jensen model is used and assumes that wind turbines are placed enough far from others, and computes the wake effect (i.e., the wind speed loss due to upwind turbines) by a linear equation, such that the overall electricity production is:
where E(s) denotes the electricity that can be produced by a wind turbine for a given wind speed, Wd(i) denotes all the affected downstream wind turbines due to wake effects generated by wind turbine i, and vji denotes the velocity deficit (i.e. wind speed loss) of wind turbine j caused by wind turbine i.
Wake Effect Calculation
r
x
=α·x+r
0,
where α determines how quickly the wake expands. Every downstream wind turbine 102 in the affected area of the wake effect should be included in Wd(i).
The velocity deficit value of a wind turbine j affected by the wake of wind turbine i 102 is determined by:
where A is called an axial induction factor and rd is called downstream rotor radius. The above-mentioned three intermediate variables α, A, and rd are, respectively, determined by:
where z is the hub height of the wind turbine, z0 is a constant called surface roughness, and CT is a constant called trust coefficient. In typical implementations, these three values are predefined parameters.
Cost Model
With respect to cost models, two different cost models may be used. The first cost model is relatively simpler—it is just a function of the number of turbines, for example:
C
total()=N·(λ+(1−λ)·e−μ·N
where λ and μ are two empirically predefined parameters. The value of this function can be efficiently calculated, therefore this cost model is typically used for fast calculations of early generations of the genetic algorithm.
In contrast, when populations of genes (i.e., individuals or potential solutions) become steady, a more accurate but more computationally-expensive second cost model is used. In the second cost model, total cost consists of two components: 1) cost of installation, which is similar to the previous model, and 2) a cost of building roads at the wind farm 100 site, for example:
C
total()=N·(λ+(1−λ)·e−ρ·N
where ρ is another empirically predefined parameter. The cost of building roads is considered proportional to the total length of roads that should be built to connect each of the wind turbines 102. Given a windy site and a possible wind farm layout, the cost of generating a set of new roads, denoted by , (generation discussed below) where the road building cost is minimized is given by:
Road Planning
In typical implementations, road planning for a given wind farm layout is a sub-problem of the wind farm optimization problem. Given a layout plan of wind turbines 102 in a windy site, a road network is calculated that can:
1) Connect all wind turbines,
2) Use as many existing roads as possible,
3) Avoid going across any prohibited area, and
4) Minimize overall building cost
In typical implementations, road planning includes three steps:
1. new point sampling,
2. network generation, and
3. network optimization.
Road Planning—New Point Sampling
A set of new points is thus obtained in the windy site, denoted by . In practice, the sampling interval δ can be set to and value (e.g., a relatively finer granularity, such as 100 m). In
Road Planning—Network Generation
A planar graph is generated, where is the set of vertices and E is the set of all possible edges. Here p0 denotes a predefined entry point 510 on the boundary of the windy site 500, from where construction vehicles can get into the windy site 500. In this way, a possible road network can be obtained for the windy site 500, although its building cost is extremely high. To generate such a planar graph, in some implementations, a Delaunay triangulation is generated. A Delaunay triangulation for a set of points in a plane is a triangulation such that no point in the set is inside a circumcircle of any triangle and maximize the minimum angle of all the angles of the triangles in the triangulation and tend to avoid skinny triangles. For the point set , the Delaunay triangulation is generated, in some implementations, by converting the point set's Voronoi diagram using the well-known Fortune's algorithm to its dual graph, and then adding all edges corresponding to existing roads to the graph and removing those edges that lay across prohibited areas. In other implementations, other methods of generating a planar graph can be used and are considered to be within the scope of this disclosure.
Table 5 illustrates an example of a network generation method according to an implementation:
Function GeneratePlanarGraph (V):
Road Planning—Network Optimization
After Network Optimization, a connected sub-graph ′ in remains, where all the points of wind turbines 102 and the entry point 510 are included, while the sum of edge lengths is minimized. This task is equivalent to finding the minimum Steiner tree in the graph , where all points in are Steiner points (i.e., they are not required to be included in ) and all points in ∪{p0} are terminals (i.e., they are required to be included in ).
In typical implementations, the length of an edge is defined as follows:
In typical implementations, the algorithm of finding the minimum Steiner tree in can be represented as follows:
Function FindMinimumSteinerTree (S, T, E):
After calculation of a minimum Steiner tree, each edge is added in the calculated Steiner tree to set if it is not a part of an existing road.
Optimization Algorithm
GA is used to optimize a wind farm layout to simultaneously maximize power output and minimize cost. GA is a method for solving optimization problems based on a natural selection process that mimics biological evolution (a genetic algorithm). The genetic algorithm repeatedly modifies a population of individual solutions. At each step, the genetic algorithm randomly selects individuals from the current population and uses them as parents to produce children for the next generation. Over successive generations, a population “evolves” toward an optimal solution.
For clarity of presentation, the description that follows generally describes method 700 in the context of
At 702, an entire geographical area is first partitioned into lattices (e.g., 50×50 lattices in a 25 km2 region) where a wind turbine could be placed. From 702, method 700 proceeds to 704.
At 704, initial chromosomes are generated (e.g., randomly—see
Turning to
At 706, each solution is evaluated for fitness. For example, the objective function defined with respect to
From 706, method 700 proceeds to 708.
At 708, the highest valued solutions in terms of “fitness” are selected as parent chromosomes for crossover and mutation operations to generate child chromosomes (refer to
At 710, crossover and mutation operations are performed using the selected parent chromosomes from 708. From 710, method 700 proceeds to 712.
At 712, the children and evaluated for “fitness” (e.g., see objective function with respect to
At 714, the parent chromosomes from 708 are updated using the highest valued solutions determined from 712. Here good solutions are selected to replace their parents. In this way, a new (better) generation is formed from which an eventual solution is selected. From 714, method 700 proceeds to 716.
At 716, a determination is made whether a maximum number of generations has been reached. In some implementations, a maximum number of generations is a pre-defined parameter and can depend upon on specific applications. For example, in solving a wind farm layout optimization problem, the maximum number of generations can be set to 1000 or some other value. In other implementations, this value can be dynamically generated. If the maximum number of generations has not been reached, method 700 proceeds to 708. If the maximum value has been reached, method 700 ends.
For clarity of presentation, the description that follows generally describes method 900 in the context of
At 902, a candidate wind farm is selected and partitioned into lattices (e.g., 50×50 lattices in a 25 km2 region) where a wind turbine could be placed. From 902, method 900 proceeds to 904.
At 904, a lattice is selected at random and a wind turbine installed. If any prohibited area is located in a lattice, the lattice (gene) is typically eliminated from the chromosome to avoid infeasible solution. For example, in some implementations, if a prohibited area covers the center of a particular lattice cell, then no turbine can be placed in this cell. In other implementations, a wind turbine could be situated precisely within a lattice to avoid a prohibited area if possible (e.g., move the turbine to the side of a lattice cell to avoid a prohibited area encroaching into the lattice cell). From 904, method 900 proceeds to 906.
At 906, a determination is made whether a number of turbines has reached a threshold value. For example, in some implementations, the threshold value can be predefined and set to 33 or some other value. In other implementations, this value can be dynamically generated. If the number of turbines has not reached the threshold level, method 900 proceeds to 908. If so, method 900 ends.
At 908, a wind effect calculation is performed on the selected lattice. From 908, method 900 proceeds to 910.
At 910, wind speeds of neighboring lattices are updated based on the calculated wind effect calculation of 908. From 910, method 900 proceeds to 912.
At 912, the selected lattice is removed from the candidate pool. From 912, method 900 proceeds to 904.
At 914, the wind speed(s) associated with the remaining lattices in the candidate pool are ranked. From 914, method 900 proceeds to 916.
At 916, a determination is made whether there are multiple lattices with the same highest wind speed. If YES, method 900 proceeds to 918. If NO, method 900 proceeds to 922.
At 918, a “best” lattice is selected from the multiple lattices with the same highest wind speed. From 918, method 900 proceeds to 920.
At 920, the selected “best” lattice is updated with a wind turbine. From 920, method 900 proceeds back to 906.
At 922, a “best” lattice is selected from the multiple lattices with the same highest wind speed using available criteria. Typically, the intrinsic goodness (or “best”) lattice is predefined by domain experts and is an input parameter). In other implementations, it can be possible for different factors (e.g., location, output power, total output, total cost, and/or other factors) to be used to determine which lattice is considered the “best” (e.g., by a dynamic calculation, possibly including the goodness parameter predefined by the domain experts as part of the calculation). From 922, method 900 proceeds to 920 where the selected “best” lattice is updated with a wind turbine. From 920, method 900 proceeds back to 906.
Crossover and Mutation
In some implementations, it is possible to move a turbine assigned to a particular lattice to a different lattice using one or more genetic operators introduced into the GA.
As shown in
β(0<β<1)
The computer 1102 can process for/serve as any component of the EDCS 300 (whether or not illustrated) or other system, component, etc. describe in this disclosure. The illustrated computer 1102 is communicably coupled with a network 330. In some implementations, one or more components of the computer 1102 may be configured to operate within a cloud-computing-based environment.
At a high level, the computer 1102 is an electronic computing device operable to receive, transmit, process, store, or manage data and information associated with the EDCS 300. According to some implementations, the computer 1102 may also include or be communicably coupled with a cloud-computing server, application server, e-mail server, web server, caching server, streaming data server, business intelligence (BI) server, and/or other server.
The computer 1102 can receive requests over network 330 from a client application (e.g., a mobile UI and/or web-based application UI executing on another computer 1102 in use by a customer) and responding to the received requests by processing the said requests in an appropriate software application. In addition, requests may also be sent to the computer 1102 from internal users (e.g., from a command console or by other appropriate access method), external or third-parties, other automated applications, as well as any other appropriate entities, individuals, systems, or computers.
Each of the components of the computer 1102 can communicate using a system bus 1103. In some implementations, any and/or all the components of the computer 1102, both hardware and/or software, may interface with each other and/or the interface 1104 over the system bus 1103 using an API 1112 and/or a service layer 1113. The API 1112 may include specifications for routines, data structures, and object classes. The API 1112 may be either computer-language independent or dependent and refer to a complete interface, a single function, or even a set of APIs. The service layer 1113 provides software services to the computer 1102 and/or the EDCS 300. The functionality of the computer 1102 may be accessible for all service consumers using this service layer. Software services, such as those provided by the service layer 1113, provide reusable, defined business functionalities through a defined interface. For example, the interface may be software written in JAVA, C++, or other suitable language providing data in extensible markup language (XML) format or other suitable format. While illustrated as an integrated component of the computer 1102, alternative implementations may illustrate the API 1112 and/or the service layer 1113 as stand-alone components in relation to other components of the computer 1102 and/or EDCS 300. Moreover, any or all parts of the API 1112 and/or the service layer 1113 may be implemented as child or sub-modules of another software module, enterprise application, or hardware module without departing from the scope of this disclosure.
The computer 1102 includes an interface 1104. Although illustrated as a single interface 1104 in
The computer 1102 includes a processor 1105. Although illustrated as a single processor 1105 in
The computer 1102 also includes a database 302 and memory 1108 that hold data for the computer 1102 and/or other components of the EDCS 300. Although illustrated as a single database 302 and memory 1108 in
The application 1107 is an algorithmic software engine providing functionality according to particular needs, desires, or particular implementations of the computer 1102 and/or the EDCS 300, particularly with respect to functionalities required for finding a best location scheme for a set of interactional objects in a constrained geographical area. For example, application 1107 can serve as any component of the EDCS 300 (whether or not illustrated). Further, although illustrated as a single application 1107, the application 1107 may be implemented as multiple applications 1107 on the computer 1102. In addition, although illustrated as integral to the computer 1102, in alternative implementations, the application 1107 can be external to the computer 1102 and/or the EDCS 300.
There may be any number of computers 1102 associated with, or external to, the EDCS 300 and communicating over network 330. Further, the term “client,” “user,” and other appropriate terminology may be used interchangeably as appropriate without departing from the scope of this disclosure. Moreover, this disclosure contemplates that many users may use one computer 1102, or that one user may use multiple computers 1102.
Implementations of the subject matter and the functional operations described in this specification can be implemented in digital electronic circuitry, in tangibly-embodied computer software or firmware, in computer hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Implementations of the subject matter described in this specification can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions encoded on a tangible, non-transitory computer-storage medium for execution by, or to control the operation of, data processing apparatus. Alternatively or in addition, the program instructions can be encoded on an artificially-generated propagated signal, e.g., a machine-generated electrical, optical, or electromagnetic signal that is generated to encode information for transmission to suitable receiver apparatus for execution by a data processing apparatus. The computer-storage medium can be a machine-readable storage device, a machine-readable storage substrate, a random or serial access memory device, or a combination of one or more of them.
The term “data processing apparatus,” “computer,” and/or “electronic computer device” (or equivalent as understood by one of ordinary skill in the art) refers to data processing hardware and encompasses all kinds of apparatus, devices, and machines for processing data, including by way of example, a programmable processor, a computer, or multiple processors or computers. The apparatus can also be or further include special purpose logic circuitry, e.g., a central processing unit (CPU), a FPGA (field programmable gate array), or an ASIC (application-specific integrated circuit). In some implementations, the data processing apparatus and/or special purpose logic circuitry may be hardware-based and/or software-based. The apparatus can optionally include code that creates an execution environment for computer programs, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them. The present disclosure contemplates the use of data processing apparatuses with or without conventional operating systems, for example LINUX, UNIX, WINDOWS, MAC OS, ANDROID, IOS or any other suitable conventional operating system.
A computer program, which may also be referred to or described as a program, software, a software application, a module, a software module, a script, or code, can be written in any form of programming language, including compiled or interpreted languages, or declarative or procedural languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A computer program may, but need not, correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data, e.g., one or more scripts stored in a markup language document, in a single file dedicated to the program in question, or in multiple coordinated files, e.g., files that store one or more modules, sub-programs, or portions of code. A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network. While portions of the programs illustrated in the various figures are shown as individual modules that implement the various features and functionality through various objects, methods, or other processes, the programs may instead include a number of sub-modules, third-party services, components, libraries, and such, as appropriate. Conversely, the features and functionality of various components can be combined into single components as appropriate.
The processes and logic flows described in this specification can be performed by one or more programmable computers executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., a CPU, a FPGA, or an ASIC.
Computers suitable for the execution of a computer program can be based on general or special purpose microprocessors, both, or any other kind of CPU. Generally, a CPU will receive instructions and data from a read-only memory (ROM) or a random access memory (RAM) or both. The essential elements of a computer are a CPU for performing or executing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to, receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio or video player, a game console, a global positioning system (GPS) receiver, or a portable storage device, e.g., a universal serial bus (USB) flash drive, to name just a few.
Computer-readable media (transitory or non-transitory, as appropriate) suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., erasable programmable read-only memory (EPROM), electrically-erasable programmable read-only memory (EEPROM), and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM, DVD+/-R, DVD-RAM, and DVD-ROM disks. The memory may store various objects or data, including caches, classes, frameworks, applications, backup data, jobs, web pages, web page templates, database tables, repositories storing business and/or dynamic information, and any other appropriate information including any parameters, variables, algorithms, instructions, rules, constraints, or references thereto. Additionally, the memory may include any other appropriate data, such as logs, policies, security or access data, reporting files, as well as others. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
To provide for interaction with a user, implementations of the subject matter described in this specification can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube), LCD (liquid crystal display), LED (Light Emitting Diode), or plasma monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse, trackball, or trackpad by which the user can provide input to the computer. Input may also be provided to the computer using a touchscreen, such as a tablet computer surface with pressure sensitivity, a multi-touch screen using capacitive or electric sensing, or other type of touchscreen. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user's client device in response to requests received from the web browser.
The term “graphical user interface,” or “GUI,” may be used in the singular or the plural to describe one or more graphical user interfaces and each of the displays of a particular graphical user interface. Therefore, a GUI may represent any graphical user interface, including but not limited to, a web browser, a touch screen, or a command line interface (CLI) that processes information and efficiently presents the information results to the user. In general, a GUI may include a plurality of user interface (UI) elements, some or all associated with a web browser, such as interactive fields, pull-down lists, and buttons operable by the business suite user. These and other UI elements may be related to or represent the functions of the web browser.
Implementations of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of wireline and/or wireless digital data communication, e.g., a communication network. Examples of communication networks include a local area network (LAN), a radio access network (RAN), a metropolitan area network (MAN), a wide area network (WAN), Worldwide Interoperability for Microwave Access (WIMAX), a wireless local area network (WLAN) using, for example, 802.11 a/b/g/n and/or 802.20, all or a portion of the Internet, and/or any other communication system or systems at one or more locations. The network may communicate with, for example, Internet Protocol (IP) packets, Frame Relay frames, Asynchronous Transfer Mode (ATM) cells, voice, video, data, and/or other suitable information between network addresses.
The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.
In some implementations, any or all of the components of the computing system, both hardware and/or software, may interface with each other and/or the interface using an application programming interface (API) and/or a service layer. The API may include specifications for routines, data structures, and object classes. The API may be either computer language independent or dependent and refer to a complete interface, a single function, or even a set of APIs. The service layer provides software services to the computing system. The functionality of the various components of the computing system may be accessible for all service consumers using this service layer. Software services provide reusable, defined business functionalities through a defined interface. For example, the interface may be software written in JAVA, C++, or other suitable language providing data in extensible markup language (XML) format or other suitable format. The API and/or service layer may be an integral and/or a stand-alone component in relation to other components of the computing system. Moreover, any or all parts of the service layer may be implemented as child or sub-modules of another software module, enterprise application, or hardware module without departing from the scope of this disclosure.
While this specification contains many specific implementation details, these should not be construed as limitations on the scope of any invention or on the scope of what may be claimed, but rather as descriptions of features that may be specific to particular implementations of particular inventions. Certain features that are described in this specification in the context of separate implementations can also be implemented in combination in a single implementation. Conversely, various features that are described in the context of a single implementation can also be implemented in multiple implementations separately or in any suitable sub-combination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a sub-combination or variation of a sub-combination.
Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Moreover, the separation and/or integration of various system modules and components in the implementations described above should not be understood as requiring such separation and/or integration in all implementations, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products.
Particular implementations of the subject matter have been described. Other implementations, alterations, and permutations of the described implementations are within the scope of the following claims as will be apparent to those skilled in the art. For example, the actions recited in the claims can be performed in a different order and still achieve desirable results.
Accordingly, the above description of example implementations does not define or constrain this disclosure. Other changes, substitutions, and alterations are also possible without departing from the spirit and scope of this disclosure.