User configured optimizer

An adaptable graphical user interface is provided. The interface may include a setup region to display a group of available solvers to a user and to display parameters for at least one of the group of solvers to the user. The interface may include an options region to display a first group of active options to a user without requiring a user input for the first group of active options, where the first group of active options is determined based on a selected one of the group of solvers. The options region may further display a second group of active options to the user when another one of the solvers is selected by the user, where the second group of active options differs from the first group of active options.

BACKGROUND INFORMATION

Users in disciplines, such as mathematics, science, engineering, finance, statistics, medicine, etc., may wish to optimize an objective or model to determine a minimum or a maximum of an objective or model. Some of these users may wish to optimize using computers to take advantage of processing capabilities provided by modern computers. Performing computer based optimizations can become problematic for some users because complicated optimization solvers may be required, constraints may need to be specified, tolerances for the optimization may need to be determined or selected, etc. In addition, certain optimization problems may benefit when certain types of optimization solvers are used. For example, a first optimization solver may provide a first result that is less satisfactory than a second result that is provided when a second optimization solver is used.

Certain users may further have difficulty performing computer-based optimizations because these users may not be highly skilled in performing optimizations, selecting optimization solvers appropriate for a particular optimization problem, determining constraints for optimization problems, determining optimization tolerances, etc. In addition, these users may have difficulty interacting with the computer environment because these users may not be skilled programmers or may not be skilled at representing mathematical expressions or functions in forms that can be interpreted by computers (e.g., representing an optimization algorithm or optimization problem in a textual form that is compatible with the computer). The shortcomings of available computer-based optimization applications may discourage some users from using computers to solve optimization problems.

SUMMARY

In accordance with an embodiment, an interactive optimizer is provided. The interactive optimizer may include a graphical user interface to display a first pane to a user, where the first pane displays information about a group of available solvers, where one or more of the group of solvers are run against a problem to produce a result. The graphical user interface may display a second pane to the user, where the second pane displays options, where the options are displayed based on a selected one of the plurality of solvers, and wherein the options are displayed to the user without accepting a user input related to the second pane. The graphical user interface may further display the result to the user.

In accordance with another embodiment, a computer-readable medium is provided, where the computer-readable medium includes executable instructions optimize a problem when the instructions are executed. The computer-readable medium may include instructions for displaying a first pane to a user, where the first pane displays solvers to the user. The computer-readable medium may include instructions for displaying a second pane to the user, where the second pane displays options that are related to one or more of the solvers, and wherein the options are displayed to the user without requiring a user input related to the second pane. The computer-readable medium may include instructions for identifying options related to a selected one of the solvers and instructions for running the selected solver against a problem to produce a result. The computer-readable medium may include instructions for displaying the result to the user or for storing the result in a memory.

In accordance with still another embodiment, an adaptable graphical user interface is provided. The adaptable graphical user interface may include a setup region to display a group of available solvers to a user and to display parameters for at least one of the group of solvers to the user. The adaptable graphical user interface may include an options region to display a first group of active options to a user without requiring a user input related to the first group of active options, where the first group of active options is determined based on a selected one of the group of solvers. The options region may further display a second group of active options to the user when another one of the group of solvers is selected by the user, where the second group of active options differs from the first group of active options, wherein the displaying of the second group of active options represents adaptation of the graphical user interface based on a user input.

DETAILED DESCRIPTION

Conventional computing applications may be inadequate for solving certain types of optimization problems, such as technical optimization problems that can be encountered in fields like science, engineering, medicine, economics, etc. For example, a conventional computing application may perform processing operations based on information entered via a text-based interface (e.g., a command line interface). Users may find it difficult to convert complex optimization problems and/or parameters into a syntax that can be entered into the text-based interface and interpreted by the computer.

Conventional computing applications may also make it difficult for a user to try a variety of optimization solvers on a problem because the user may not know what optimization solvers are available, may not understand differences between one optimization solver and another optimization solver (e.g., parameters that differ between the two solvers, strengths or weaknesses of one solver versus the other solver for a given problem, etc.). Users may need to look elsewhere, such as in hardcopy user guides, textbooks, etc., to find information about optimization solvers used with the computing applications (e.g., information on the behavior of available solvers). The shortcomings associated with conventional computer-based optimization solvers may leave users dissatisfied (e.g., due to the difficulty and amount of time it takes to setup and perform optimizations).

Conventional computing applications may also make it difficult for a user to efficiently process a large number of optimization problems using an optimization solver. For example, a conventional application may require that a user enter an optimization problem via a command line each time the solver is run. For large numbers of optimization problems, the user may have to setup each optimization problem and invocation of the solver, which may significantly lengthen total time spent by the user for solving the set of problems. These cumbersome interactions may discourage certain users from taking advantage of computerized optimizations.

Exemplary embodiments provide an integrated optimizer that allows the user to select a solver from a list of available solvers, configure a selected solver, run the selected solver, obtain help with setting up or using the selected solver, and display results for the selected solver using a single graphical user interface (GUI). Exemplary embodiments may allow a user to enter information, e.g., an objective function, using a mathematics editor, a text editor, a graphical editor (e.g., an editor that uses graphical representations), etc., through the integrated GUI. Users that do not have expertise in computer programming, using optimizers, etc., may find interactions with exemplary embodiments to be intuitive as compared to user interactions with conventional computer-based optimization solvers.

For example, an exemplary embodiment may provide an interactive optimizer that uses a GUI to allow a user to select among a number of system or user provided optimization solvers. For example, the GUI may display a number of regions (e.g., panes, windows, etc.) to the user that allow the user to specify optimization solvers and/or other information. For example, the GUI may further provide the user with information about options associated with a selected optimization solver. For example, an options region of the GUI may identify parameters that need to be specified for a selected solver and/or may provide the user with suggestions on how to choose appropriate parameters. The GUI may further include a reference region that provides the user with help and/or other types of information that may be useful in choosing an optimization solver, setting up a selected optimization solver, running a selected optimization solver, etc. GUIs used with exemplary embodiments may be displayed using one or more display devices operated by one or more users (e.g., a first region may be displayed on a first display device and a second and third region may be displayed on a second display device).

Exemplary embodiments may further allow the user to generate executable code based on a selected optimization solver and related options. For example, a user may need to process a data set of 1000 problems. The user may interactively select and run one or more optimization solvers using the GUI until the user is satisfied that a selected solver will produce satisfactory results when run on problems in the data set. The user may make a selection (e.g., by clicking a mouse button) to generate code for the selected optimization solver and associated options. The user may run the generated code against the data set to efficiently process problems in the data set. For example, the generated code may automatically read problems and apply the specified optimization solver to the problems to produce a number of results. Exemplary embodiments may further generate outputs, such as reports, according to determined parameters, such as style guides.

Exemplary embodiments may operate with statically typed programming languages or dynamically typed programming languages to provide interactive optimization capabilities in a number of computing environments. Exemplary embodiments may further be implemented locally on a single machine or may be implemented in distributed (e.g., parallel) computing environments. For example, an interactive optimization application may be provided to a remote client device using a web service hosted by a server. The web service may also allow the client to perform optimizations using a number of parallel processors.

Exemplary embodiments can provide users with real-time feedback on the operation and/or configuration of optimization solvers without requiring that the users interact with a standalone text-based editor, without requiring that the users have an expertise in using optimization solvers, etc. The configurability and ease of use provided by exemplary embodiments of the interactive optimizer makes these exemplary embodiments useful for educational institutions, corporations, government institutions, medical facilities, etc., for processing single optimization problems or large data sets that can contain substantially any number of optimization problems.

Exemplary System

FIG. 1illustrates an exemplary system100that can be configured to practice an exemplary embodiment. System100may include computer100, GM110, solver120, problem130, objective functions140, constraints150, result160and code generator170. The embodiment ofFIG. 1and/or embodiments shown in other figures included herein are exemplary and alternative embodiments may include more devices, fewer devices, and/or devices in arrangements other than the arrangements shown in the figures included herein.

Computer100may include a device capable of performing processing operations, display operations, communication operations, etc. For example, computer100may include a desktop computer, a laptop computer, a client, a server, a mainframe, a personal digital assistant (PDA), a web-enabled cellular telephone, a smart phone, smart sensor/actuator, or another computation or communication device that executes instructions to perform one or more activities and/or generate one or more results.

Computer100may further perform communication operations by sending data to or receiving data from another device, such as a server. “Data,” as used herein, may refer to any type of machine-readable information having substantially any format that may be adapted for use in one or more networks and/or with one or more devices. Data may include digital information or analog information. Data may further be packetized and/or non-packetized.

GUI110may include an interface that allows a user to interact with a computing device, such as computer100. For example, GUI110may allow a user to interact with icons and/or other graphical representations displayed to the user via one or more display devices connected to computer100. GUI110may accept user inputs from an input device, such as a keyboard, mouse, trackball, biometric input device, etc. In one embodiment, GUI110may use widgets and textual labels to provide information to a user. Embodiments of GUI110may be user configurable (e.g., a user may change the look and/or feel of GUI110) and/or GUI110may not be user configurable (e.g., the arrangement of information on GUI110may be determined by a system). Embodiments of GUI110may be configured to adapt based on user interactions with computer100. For example, GUI110may adapt based on problem selections, selected display regions (e.g., based on a user selecting an options pane or another pane in GUI110), etc.

Exemplary embodiments of GUI110may be rendered to a user using software applications, such as a web browser. Embodiments of GUI110may further be rendered on one or more displays of computer100based on local processing operations (e.g., operations performed on computer100) or may be rendered to the display based on processing operations performed by a remote device. For example, GUI110may display information that is received from a web service running on a remote server.

Solver120may include hardware or software based logic that performs optimization operations on behalf of a device or a user. For example, solver120may be an optimization solver that operates to minimize or maximize a function by systematically choosing values of real or integer variables from an allowed set. Solver120may operate with one or more objective functions140to minimize or maximize the function.

Problem130may include information that is operated on by solver120. Problem130may be user defined (e.g., by entering information via a keyboard), may be system defined (e.g., retrieved from a storage device), or may be defined by an entity (e.g., an instructor, a third party device, etc.). In an embodiment, such as shown inFIG. 1, problem130may include objective functions140and/or constraints150. Other embodiments of problem130, not shown inFIG. 1, may include other types of information.

Objective functions140may include a number of functions that are used by solver120to perform optimizations. Objective functions140may reside locally on computer100or may be accessed from remote devices via computer100over a network. Objective functions140may be system defined (e.g., computer100may include a library of available objective functions) or objective functions140may be user defined (e.g., a user may enter one or more objective functions that can be used in problem130and/or by solver120).

Constraints150may include values or equations that are used by objective functions140and/or solver120. For example, constraints150may act as bounds, or limits, that are true while an optimization is performed on problem130.

Result160may include information produced when solver120operates on problem130. For example, a result may include a minimum, a maximum, and/or a point at which a minimum/maximum is achieved. Result160may be displayed to a user via GUI110(e.g., via a graph, tabular data, etc.), sent to a destination (e.g., another computer, a printer, a remote display, etc.), stored, etc.

Code generator170may include hardware or software based logic that generates code based on an input. For example, code generator170may generate code that implements a solver that was setup by a user via GUI110. For example, a user may interact with GUI110to create a solver that can be run against a data set that includes multiple problems. The user may generate code for the solver using code generator170. The user may use the generated code to operate on the data set. Embodiments of code generator170may further be used to generate other types of code, such as code that reproduces GUI110, information displayed in GUI110(e.g., reference information, options information, etc.), etc.

Exemplary Functional Diagram

FIG. 2illustrates an exemplary functional diagram. Functional diagram200can include processing logic210, input logic220, output logic230, optimization logic240, problem logic250, storage logic260and code generation logic270. Logic inFIG. 2can reside on a single device, such as computer100, or the logic ofFIG. 2can be distributed across multiple devices. Moreover, the logic ofFIG. 2can be implemented in hardware based logic, software based logic, a combination of hardware and software based logic (e.g., hybrid logic, wetware, etc.), etc. The implementation ofFIG. 2is exemplary, and computer100and/or other devices may include more or fewer functional components without departing from the spirit of the invention.

Processing logic210may include logic to process instructions or data. For example, processing logic210may instruct other logic to perform operations, may parse problem130into a number of portions that can be sent to different processors, combine results received from different processors into a single result160, perform arithmetic operations, etc. Processing logic210may be implemented in a single device that can include one or more cores, or processing logic210may be implemented in a number of devices that can be local with respect to each other or remote with respect to each other (e.g., distributed over a network).

Input logic220may receive information from a user, a component in computer100, another device, an object (e.g., a software object), etc. Output logic230may send information to a destination component, device, object, etc. For example, output logic230may send result160to a display device where result160is displayed to a user. In one embodiment, input logic220and output logic230may include a code-based interface (e.g., an application program interface (API)), and in another implementation, may include a hardware interface, such as a network interface card (NIC).

Optimization logic240may include logic that performs one or more optimizations. For example, optimization logic240may operate in solver120to implement a number of optimizations based on a user selection. Problem logic250may include logic that implements problem130or information related to problem130, such as objective functions140, constraints150, and/or other types of information that can be used with problem130.

Storage logic260may store user inputs, optimizations, constraints, results, variables, etc. Storage logic260may be implemented via static storage (e.g., a hard disk) or dynamic storage (e.g., random access memory). Storage logic260may reside on computer100or may be remote with respect to computer100. Storage logic260may further include a single storage device or a number of storage devices (e.g., an array of storage devices).

Code generating logic270may generate code. Code generating logic270may be user controlled or may be controlled by a device. Code generating logic270may further generate code in substantially any language or format based on the type of generation logic used and/or based on selections made with respect to parameters associated with code generating logic270.

Exemplary User Interface

FIG. 3illustrates an exemplary user interface, such as a GUI300, that can be used with an exemplary embodiment. GUI300may include a toolbar310, setup region320, results region330, options region340, reference region350, and/or miscellaneous region360. GUI300is exemplary and other embodiments may include more regions, fewer regions, and/or regions in arrangements that differ from the arrangement ofFIG. 3. Embodiments of GUI300may allow a user to configure the layout and content thereof, or GUI300may include a layout that cannot be configured by a user.

In the embodiment ofFIG. 3, GUI300includes a number of regions, also referred to herein as “panes”. Regions may include portions of a display area that include certain types of information. Regions may be defined by borders, patterns, colors, etc., to help distinguish one region from another region or from other information in GUI300. Regions may be selectable by the user via an input device, such as a mouse. For example, a user may make a region an active region by clicking on a border for the region, where an active region allows the user to enter information into the region. The user may make another region active by clicking on that region. In alternative embodiments, regions or panes may be displayed in more than one window within a single GUI or spread across multiple GUIs without departing from the spirit of the invention (e.g., multiple GUIs may be spread across multiple display devices in one embodiment).

Toolbar310may include information that allows a user to perform operations using GUI300. For example, toolbar310may include headings (e.g., File, Edit, Help, etc.) that provide the user with drop down menus when one or more headings are selected by a user. Setup region320may include information that allows the user to select a solver (e.g., a type of optimization solver), an algorithm, problem constraints, etc.

Results region330may include information associated with a result generated by a solver. Options region340may include information that is used with setup region320to configure a solver, algorithm, problem, constraint, etc. For example, options region340may include information about iterations, tolerances for constraints or functions, etc.

Reference region350may include information that is related to setup region320, results region330, options region340, etc. For example, reference region350may include help information that is related to a solver identified in setup region320. Reference region350may also include links to additional information, advertising, etc. Miscellaneous region360may include other types of information that can be useful to a user of GUI300. For example, region360may include a telephone listing of other users that are working with optimizers identified in setup region320, information about disk usage, processing cycle usage, etc.

Exemplary embodiments may display information associated with GUI300in a single window or may spread information associated with GUI300across multiple windows. For example, setup region320may be displayed in a first window and options region340and reference region350may be displayed in a second window, where the second window may be on a display device containing the first window or may be on a separate display device.

Exemplary Setup Region

FIG. 4Aillustrates an exemplary setup region of GUI300for an exemplary solver. Setup region320may be displayed in a window on a display device and may include solver selector401, algorithm selector402, and problem area403.

Solver selector401may include a drop down menu, such as that shown inFIG. 4B, that provides a user with a list of available solvers that can be used to solve a problem. Solvers identified in the drop down menu may be system defined (e.g., selected from a solver library stored in a storage device on computer100) or may be user defined (e.g., a solver entered by a user using an editor, read from a file, retrieved from a remote location via a link, etc.). Embodiments of system100may include substantially any number of system defined and/or user defined solvers. Solver selector401may allow a user to indicate a selection by, for example, highlighting a background proximate to a name for a solver. For example, selection406(FIG. 4B) may identify a solver that has been selected for a particular problem.

Returning toFIG. 4A, algorithm selector402may allow a user to enter an algorithm, algorithm name, algorithm link, etc., for use on a problem. For example, in one embodiment a drop down menu can be provided to a user. In another embodiment, a user can type in the name of an algorithm or for a filename containing an algorithm using a keyboard or other type of input device.

Problem area403may include a portion of setup region320where a user enters information about a problem, such as an optimization problem. For example, a user may enter or select an objective function, derivatives and/or a starting point for processing. In one embodiment, problem area403may include constraints information that allows a user to enter or select information related to constraints150that are used with a problem, such as problem130. Constraints information may include linear inequalities or equalities, bounds, nonlinear constraint functions, derivatives, etc. Other embodiments of setup region320may include other types of information without departing from the spirit of the invention.

In an exemplary embodiment, setup region320may allow a user to select one of sixteen solvers that can be applied to an optimization problem. For example, a user may select a solver to:

(1) solve a binary integer programming problem (solver name: bintprog);

(3) find the minimum of a single-variable function on a fixed interval (solver name: fminbnd);

(4) find a minimum of a constrained nonlinear multivariable function (solver name: fmincon);

(5) find the minimum of the worst-case value of a set of multivariable functions (solver name: fminmax);

(6) find the minimum of an unconstrained nonlinear multivariable functions using a derivative-free method (solver name: fminsearch);

(7) find a minimum of an unconstrained nonlinear multivariable function (solver name: fininunc);

(8) find the minimum of a semi-infinitely constrained nonlinear multivariable function (solver name: fseminf);

(9) solve a system of nonlinear equations (solver name: fsolve);

(10) find a root (zero) of a nonlinear equation (solver name: fzero);

(12) solve a nonlinear curve fitting (data fitting) problem in the least-squares sense (solver name: lsqcurvefit);

(15) find the minimum of a nonnegative least-squares problem (solver name: lsqnormeg); and

(16) solve a quadratic programming problem (solver name: quadprog). Other exemplary embodiments of setup region320may include additional solvers, fewer solvers, etc.

A user may select one of the sixteen solvers and may then define a problem by specifying a function to minimize. The user may further specify other parameters, such as a start point and/or constraints that may be specific to the selected solver. Exemplary embodiments may provide a user with windows that are unique to a selected solver to facilitate entry of correct information by the user. For example,FIGS. 4C-4Rillustrate exemplary solvers and windows that can be used with an exemplary GUI in system100.

A user may select solver bintprog and may be provided with setup window407(FIG. 4C). The user may specify a problem as a function (e.g., a linear function), constraints that can include linear inequalities or linear equalities, and/or a start point.

Setup window408(FIG. 4D) may be provided to the user when the user selects solver fgoalattain. The user may enter an objective function to minimize, derivatives, a start point, goals that the objective function attempts to obtain, weights to control the relative underattainment or overattainment of the objectives, constraints that can include linear inequalities or linear equalities, lower or upper bounds on variables used with the solver, a nonlinear constraint function to define nonlinear constraints, and/or derivatives that can be supplied in the nonlinear constraint function or approximated by the solver.

Setup window409(FIG. 4E) may be provided to the user when the user selects solver fminbnd. The user may enter an objective function that is minimized, a left endpoint of an interval over which the objective function is minimized (x1), and/or a right endpoint of an interval over which the objective function is minimized (x2).

Setup window410(FIG. 4F) may be provided to the user when the user selects solver fmincon. The user may specify whether he/she wants to use a large scale algorithm or a medium scale algorithm with solver fmincon. The user may enter the objective function to minimize, derivatives, a start point for the algorithm, one or more constraints, linear inequalities, linear equalities, lower and/or upper bounds, a nonlinear constraint function, and/or derivatives for the nonlinear constraint function.

Setup window411(FIG. 4G) may be provided to the user when the user selects solver fminimax. The user may enter an objective function to minimize, derivatives, constraints that can include linear inequalities and/or linear equalities, lower or upper bounds, a nonlinear constraint function, and/or derivatives for the nonlinear constraint function.

Setup window412(FIG. 4H) may be provided to the user when the user selects solver fminsearch. The user may specify an objective function to minimize and/or a start point.

Setup window413(FIG. 4I) may be provided to the user when the user selects solverfminunc. The user may specify whether he/she wants a large scale algorithm or a medium scale algorithm. The user may further specify an objective function to minimize, derivatives for the objective function and/or a start point for the algorithm.

Setup window414(FIG. 4K) may be provided to the user when the user selects solver fseminf The user may specify an objective function to minimize, derivatives that may specify whether a gradient is supplied by the user in the objective function or whether the gradient should be approximated by the solver, a start point for the algorithm, a number of semi-infinite constraints that are in a constraints function, a semi-infinite constraints function, linear inequalities, linear equalities, and/or lower and/or upper bounds on variables used with the solver.

Setup window416(FIG. 4J) may be provided to the user when the user selects solver fsolve. The user may specify whether a large scale or a medium scale algorithm should be used. For example, one embodiment may allow the user to select among the trust region dogleg, the Levenberg-Marquardt, or the Gauss-Newton algorithm when the user indicates that a medium scale algorithm should be used. The user may further specify an objective function that describes a system of nonlinear equations that the user wants to solve, derivatives that specify whether the Jacobian is supplied in the objective function or whether the Jacobian should be approximated by the solver, and/or a start point for the algorithm.

Setup window417(FIG. 4L) may be provided to the user when the user selects solver fzero. The user may specify a function (or equation) whose zero is to be computed and/or an interval that contains a zero of the function (equation). In one embodiment, a user may specify an interval using two parameters, such as x1and x2, or the user may allow the algorithm to find an interval containing a point by specifying a single point, such as x.

Setup window418(FIG. 4M) may be provided to the user when the user selects solver linprog. The user may specify whether a large scale algorithm or a medium scale algorithm should be used. The user may further specify a function to minimize that may contain coefficients of a linear function, constraints, linear inequalities, linear equalities, lower bounds, upper bounds, and/or a start point for the algorithm.

Setup window419(FIG. 4N) may be provided to the user when the user selects solver lsqcurvefit. The user may specify whether a large or medium scale algorithm should be used. The user may further specify an objective function whose sum of squares is to be minimized, derivatives, a start point, input data (x data), output data (y data) to which the solver finds coefficients to best fit the specified objective function, lower bounds, and/or upper bounds.

Setup window420(FIG. 4O) may be provided to the user when the user selects solver Isqlin. The user may specify whether a large or medium scale algorithm should be used. The user may further specify a matrix C and a vector d to solve the linear system C*x=d in the least squares sense subject to specified constraints, constraints that may include linear inequalities or linear equalities, lower bounds, upper bounds, and/or a start point for the algorithm.

Setup window421(FIG. 4P) may be provided to the user when the user selects solver Isqnonlin. The user may specify whether a large or medium scale algorithm should be used. The user may further specify an objective function to be minimized (e.g., a nonlinear vector function whose sum of squares is to be minimized), derivatives, a start point, lower bounds, and/or upper bounds.

Setup window422(FIG. 4O) may be provided to the user when the user selects solver lsqnormeg. The user may enter a matrix C and vector d that solves the system C*x−d in the least-squares sense subject to x≧0 where both C and d can be real, and/or a start point.

Setup window423(FIG. 4R) may be provided to the user when the user selects solver quadprog. The user may specify whether large or medium scale algorithms should be used. The user may further specify a matrix H and vectorfto minimize (e.g., to minimize ½*x′*H*x+f*x subject to specified constraints), constraints (e.g., linear equalities or inequalities), lower bounds and/or upper bounds.

Exemplary Results Region

FIG. 5illustrates an exemplary implementation of results region330in an exemplary GUI. Results region330may display results produced when one or more algorithms (e.g., optimization algorithms) are run. In on exemplary embodiment, results region330may include buttons510that can include a start button, a pause button, and/or a stop button. For example, selecting the start button using a pointing device may commence an optimization run. Results region330may include a portion in which information about iterations is displayed. For example, a number identifying a current iteration for an optimization may be displayed.

Results region330may further include a results window520in which results for an optimization are displayed to a user. Results window520may display text, graphics, and/or other types of information to a user depending on particular configurations of computer100and/or solver120. Final point window530may display information about a final point associated with an optimization run.

Exemplary Options Region

FIG. 6Aillustrates an exemplary implementation of options region340in an exemplary GUI. Options region340may include information that allows a user to specify parameters associated with one or more optimization runs. For example, a user may select a particular solver, such as fmincon, and computer100may display a particular configuration of options region330based on the selected solver. Assume, for sake of example, that the information inFIG. 6Ais displayed when fmincon is selected. InFIG. 6Aselections610may be active and may be identified by darker text as compared to text used to identify inactive portions620of options region340.

Further assume that the user decides to select a different solver, such as quadprog. Options region340may change so that some or all of regions610may become inactive while some or all of previously inactive regions become active. Options region340may adapt based on a selected solver or based on other user selections so as to allow a user to select only meaningful information and/or to enter only meaningful information into computer100. Options region340may further adapt by displaying, adding, removing, etc., items based on a selected solver.

FIG. 6Billustrates an alternative implementation of an options region (e.g., options region640). The implementation of options region640illustrated inFIG. 6Billustrates the information fromFIG. 6Aalong with additional selections643,644, and645. Selections643,644and645may be collapsed in a first state (shown inFIG. 6Bas group642) and expanded in a second state (not shown inFIG. 6B). Icons, such as a “+” may identify that a collapsed selection includes information that can be displayed when the selection is expanded. For example, selection643may identify a function value check that includes information about values returned by a user supplied objective function or nonlinear constraint function. Information relevant to the function value check may be displayed for the user when the user selects the function value check (e.g., by clicking a mouse button). Exemplary embodiments may include substantially any number of selections643-645, etc.

FIGS. 6C-6Killustrate exemplary selections that can be made from options region640ofFIG. 6B. Specifically,FIGS. 6C to 6Killustrate exemplary selections that can be made by a user for function value check643(FIG. 6C), user-supplied derivatives644(FIG. 6D), algorithm settings645(FIG. 6E), approximated derivatives646(FIG. 6F), multiobjective problem settings647(FIG. 6G), inner iteration stopping criteria648(FIG. 6H), plot functions649(FIG. 6I), output function650(FIG. 6J), and display to command window651(FIG. 6K). InFIGS. 6C to 6K, active regions, or selections, may be in a dark font (e.g., black) whereas inactive regions, or selections, may be in a lighter font (e.g., gray) so that the user's attention is drawn to active regions, or selections. Other embodiments may use other identification mechanisms to identify active and/or inactive regions/selections.

Exemplary Reference Region

FIG. 7illustrates an exemplary GUI700that includes a reference region350. GUI700may include toolbar310, setup region320, results region330, options region340, reference region350, selected solver710and selected solver help720. Selected solver710may identify a solver (e.g., fmincon) that has been chosen for a particular problem. In one embodiment, selected solver710may be linked to reference region350and/or options region340. For example, selected solver help720may display a heading for fmincon and may display other information related to fmincon. For example, information about problem setup, options and/or other types of information may be displayed to a user. Selected solver help720may change when a user selects a different solver in selected solver710. In an exemplary embodiment, information displayed in options region340may also change based on a solver displayed in selected solver710. Information in reference region350may be static or dynamic depending on particular implementations of the interactive optimizer. For example, a help index can be dynamically updated whenever new information is added, changed, deleted, etc., in the index. Exemplary Distributed Implementation

FIG. 8illustrates an exemplary distributed implementation of an optimizer that includes a GUI. System800may provide a distributed environment for performing optimization operations and can include computer100, network820, service provider830, target environment840, and cluster850. The embodiment ofFIG. 8is exemplary, and other embodiments can include more devices, fewer devices, or devices in arrangements that differ from the arrangement ofFIG. 8. Computer100may include GUI110and technical computing environment (TCE)810.

TCE810may include hardware and/or software based logic that provides a computing environment that allows users to perform tasks related to disciplines, such as, but not limited to, mathematics, science, engineering, medicine, business, etc., more efficiently than if the tasks were performed in another type of computing environment, such as an environment that required the user to develop code in a conventional programming language, such as C++, C, Fortran, Pascal, etc.

In one implementation, TCE810may include a dynamically typed language that can be used to express problems and/or solutions in mathematical notations familiar to those of skill in the relevant arts. For example, TCE810may use an array as a basic element, where the array may not require dimensioning. In addition, TCE810may be adapted to perform matrix and/or vector formulations that can be used for data analysis, data visualization, application development, simulation, modeling, algorithm development, etc. These matrix and/or vector formulations may be used in many areas, such as statistics, finance, image processing, signal processing, control design, life sciences, education, discrete event analysis and/or design, state based analysis and/or design, etc.

TCE810may further provide mathematical functions and/or graphical tools (e.g., for creating plots, surfaces, images, volumetric representations, etc.). In one implementation, TCE810may provide these functions and/or tools using toolboxes (e.g., toolboxes for signal processing, image processing, data plotting, parallel processing, optimization, etc.). In another implementation, TCE810may provide these functions as block sets (e.g., an optimization block set). In still another implementation, TCE810may provide these functions in another way, such as via a library, etc. TCE810may be implemented as a text based environment, a graphically based environment, or another type of environment, such as a hybrid environment that is both text and graphically based.

Network820may include network devices, such as routers, switches, firewalls, and/or servers (not shown). Network820may be a hardwired network using wired conductors and/or optical fibers and/or may be a wireless network using free-space optical, radio frequency (RF), and/or acoustic transmission paths. In one implementation, network820may be a substantially open public network, such as the Internet. In another implementation, network820may be a more restricted network, such as a corporate virtual network. Implementations of networks and/or devices operating on networks described herein are not limited to any particular data type, protocol, architecture/configuration, etc.

Service provider830may include a device that makes a service available to another device. For example, service provider830may include an entity (e.g., an individual, a corporation, an educational institution, a government agency, etc.) that provides one or more services to a destination using a server and/or other devices. Services may include instructions that are executed by a destination to perform an operation (e.g., an optimization operation). Alternatively, a service may include instructions that are executed on behalf of a destination to perform an operation on the destination's behalf.

Target environment840may include a device that receives information over network820. For example, target environment840may be a device that receives optimization results from computer100. In one embodiment, target device840may use optimization results to perform an operation, such as a display operation, a storage operation, a displacement operation (e.g., moving a robotic arm), etc.

Cluster850may include a number of units of execution (UEs)860and may perform processing on behalf of computer100and/or another device, such as service provider830. For example, in one embodiment cluster850may perform parallel processing on an optimization problem received from computer100and/or TCE810. Cluster850may include UEs860that reside on a single device or chip or that reside on a number of devices or chips.

UEs860may include processing devices that perform operations on behalf of a device, such as a requesting device. UEs860may be hardware based UEs or software based UEs. A “hardware UE,” as the term is used herein, is to be broadly interpreted to include a device (e.g., a hardware resource) that performs and/or participates in remote (e.g., parallel) programming/processing activities. For example, a hardware UE may perform and/or participate in parallel programming activities in response to a request and/or a task it has received (e.g., received directly or via a proxy). A hardware UE may perform and/or participate in substantially any type of parallel programming (e.g., task, data, stream processing, etc.) using one or more devices. For example, in one implementation, a hardware UE may include a single processing device that includes multiple cores and in another implementation, the hardware UE may include a number of processors. For example, a first portion of an optimization may be performed in a first core and a second portion of the optimization may be performed in a second core, where the first and second core are associated with a single processor or are spread across multiple processors. A hardware UE may also be a programmable device, such as a field programmable gate array (FPGA), an application specific integrated circuit (ASIC), a digital signal processor (DSP), etc. Devices used in a hardware UE may be arranged in substantially any configuration (or topology), such as a grid, ring, star, etc. A hardware UE may support one or more threads (or processes) when performing processing operations.

A “software UE,” as the term is used herein, is to be broadly interpreted to include a software resource (e.g., a technical computing environment [e.g., MATLAB software], a worker, a lab, etc.) that performs and/or participates in remote (e.g., parallel) programming/processing activities. For example, a software UE may perform and/or participate in parallel programming activities in response to a receipt of a program and/or one or more portions of the program. A software UE may perform and/or participate in substantially any type of parallel programming using one or more hardware UEs. Embodiments of a software UE may support one or more threads and/or processes when performing processing operations.

Embodiments of UE860may include code, such as code for TCE810. For example, a UE may run a portion of TCE810that pertains to parallel processing activities. In one embodiment, service provider830may operate cluster850and may provide interactive optimization capabilities to computer100on a subscription basis (e.g., via a web service). Computer100may be able to perform optimization operations using GUI110when computer100maintains a subscription to the service.

Exemplary Processing

FIGS. 9A-9Cillustrates exemplary processing that can be performed using an interactive optimizer. A user may start an interactive optimizer by, for example, double clicking on an icon or link associated with the optimizer (act905). GUI300may be displayed to a user when the optimizer is operating. Solver120may receive setup information via input logic220and setup region320(act910). For example, a user may select a solver via solver selector401and an algorithm via algorithm selector402. Solver120may display options and reference information that are relevant to setup region320via options region340and reference region350, respectively (act915).

By way of example, a user may select a first solver and options region340may display a first set of active options that can be used with the selected solver. In addition, reference region350may list a first list of reference topics that are relevant to active options and to the selected solver. The user may then select another solver and options region340and reference region350may dynamically update to display different content based on the new user selection. In some implementations, options may be disjoint between a first solver and a second solver, where disjoint refers to options that do not overlap between the two solvers. In other implementations, options may partially overlap between the first solver and the second solver, where partially overlapping options share some, but not all, options. Embodiments of solver120may maintain explicit or implicit relationships between information displayed in setup region320and information displayed in options region340and/or reference region350.

Referring now toFIG. 9B, computer100may determine whether the user has indicated that he/she needs help (act920). For example, a user may be unsure as to how to select a particular option associated with a selected solver. The user may select a help topic in reference region350using a mouse. When a user selection for a help topic is detected at act920, appropriate information for the help topic is displayed to the user (act925). In one embodiment, help information can be retrieved from local storage on computer100and in another embodiment, help information can be retrieved from a remote location using a link, pointer, file name, etc. Processing may go to act930once the help topic is displayed.

When no user request for help is detected at act920, an optimization may be performed (act930). For example, the user may have specified a problem in problem area403and an optimization may be performed on that problem using a selected solver. A result for the optimization may be displayed to the user via a display device when the optimization is complete (act940). For example, a result can be displayed as a graph, text, etc., in results region330.

Computer100may determine whether another optimization should be performed (act945). For example, a user may plan to run a number of solvers against a problem, a single solver against a number of problem formulations, etc., to determine which solver produces a satisfactory answer. The user may choose to perform another optimization using a new solver (or may alter options associated with a selected solver) in act945. When the user wishes to perform another optimization, processing returns to act920. In contrast, when the user does not wish to perform another optimization in act945, processing advances to act950(FIG. 9C).

Referring now toFIG. 9C, computer100may determine whether code should be generated for solver120, problem130, etc. (act950). When a user indicates that code should not be generated, processing may stop. In contrast, when a user indicates that code should be generated, code is generated at act955. Exemplary embodiments may generate code in substantially any language, such as C, C++, Perl, assembly language, M (a language used by MATLAB), etc., using code generator170.

Computer100may store the generated code in a storage device or may display the generated code to the user via a display device (act960). In one embodiment, generated code may be stored for use at a later time, for display to a display device, for transmission to a destination device, etc. Generated code may be run on computer100and/or on another device to perform an operation, such as another optimization (act965).

Exemplary Alternative Embodiments

A first alternative embodiment may enable a user to override system defaults displayed in regions of GUI300. For example, computer100may populate GUI300with items that computer100determines are acceptable selections for a given solver. A user of computer100may determine that one or more of the populated items are unacceptable. The user may replace the one or more items with new selections determined by the user.

A second alternative embodiment may use an interactive optimizer for educational purposes. For example, a professor may be teaching a mathematics course where optimizations are to be studied as part of the curriculum. The professor may create a number of objective functions and/or solutions and may make them available to the students. The students may be required to run a number of solvers against a particular objective function using a number of different parameters, such as constraints, start point, lower bounds, upper bounds, etc., to determine which solver and set of parameters produces a best solution. The students may compare their results to the solutions prepared by the professor.

A third alternative embodiment may employ guidelines with an interactive optimizer. For example, a corporation may determine that certain solvers and parameter sets are preferred for solving optimization problems typically encountered in the industry in which the corporation operates. GUI300may be configured to display only the preferred solvers and parameters to a user as default solvers and/or parameters. The user may select from the default solvers and/or parameters when working on optimization problems at the corporation. The corporation may further employ guidelines, such as style guidelines, with code that may be generated by the interactive optimizer, such as code generated when the user is satisfied with a particular solver and/or set of parameters for a given problem. Generated code and/or other types of outputs (e.g., plots, reports, files, etc.) may be produced in accordance with the guidelines.

In a fourth alternative embodiment, the interactive optimizer may generate a first piece of code to call a selected solver or to generate code for the selected solver itself, and the interactive optimizer may generate a second piece of code for options that are used with the solver. For example, a user may interact with setup region320and options region340when working on an optimization problem. The user may identify a best solution to the problem and may wish to generate code for use on other similar problems. The user may further wish to have the options captured in a separate code file so that the user can use the options with another solver.

In a fifth alternative embodiment, the interactive optimizer can operate with function handles or other techniques that can be used to interact with functions. For example, a user may be interacting with GUI300and may prefer to enter a value that identifies a function, such as the objective function. Computer100may retrieve the identified objective function using the identifier (or handle) and may input the objective function into GUI300for processing based on other information, such as options, in GUI300. Other information in GUI300may also be identified using function handles and/or other identifiers without departing from the spirit of the invention.

In a sixth alternative embodiment, an interactive optimizer may operate with a number of units of execution. For example, a user may operate on an objective function by choosing a solver. Solver120may determine that ten units of execution are available and may run the solver selected by the user on a first UE and may run nine other solvers on the remaining UEs. Solver120may determine which solver produces the best result based on options used with the solvers (e.g., user selected options with the first solver and system selected options with the other nine solvers). GUI300may provide the user with a rating, or score, for each solver based on the answer produced by respective solvers. The user may select the solver that produces the best answer. Embodiments of interactive optimizers that operate with multiple processors may allow parallel and/or distributed processing techniques to be applied to optimization problems to reduce processing times.

A seventh alternative embodiment may implement TCE810using one or more text-based products. For example, a text-based TCE810, may be implemented using products such as, but not limited to, MATLAB® by The MathWorks, Inc.; Octave; Python; Comsol Script; MATRIXx from National Instruments; Mathematica from Wolfram Research, Inc.; Mathcad from Mathsoft Engineering & Education Inc.; Maple from Maplesoft; Extend from Imagine That Inc.; Scilab from The French Institution for Research in Computer Science and Control (INRIA); Virtuoso from Cadence; or Modelica or Dymola from Dynasim.

An eighth alternative embodiment may implement TCE810in a graphically-based TCE using products such as, but not limited to, Simulink®, Stateflow®, SimEvents™, etc., by The MathWorks, Inc.; VisSim by Visual Solutions; LabViewe by National Instruments; Dymola by Dynasim; SoftWIRE by Measurement Computing; WiT by DALSA Coreco; VEE Pro or SystemVue by Agilent; Vision Program Manager from PPT Vision; Khoros from Khoral Research; Gedae by Gedae, Inc.; Scicos from (INRIA); Virtuoso from Cadence; Rational Rose from IBM; Rhopsody or Tau from Telelogic; Ptolemy from the University of California at Berkeley; or aspects of a Unified Modeling Language (UML) or SysML environment.

A ninth alternative embodiment may be implemented in a language that is compatible with a product that includes a TCE, such as one or more of the above identified text-based or graphically-based TCE's. For example, MATLAB (a text-based TCE) may use a first command to represent an array of data and a second command to transpose the array. Another product, that may or may not include a TCE, may be MATLAB-compatible and may be able to use the array command, the array transpose command, or other MATLAB commands. For example, the other product may use the MATLAB commands to perform optimizations on one or more units of execution.

A tenth alternative embodiment may be implemented in a hybrid TCE that combines features of a text-based and graphically-based TCE. In one implementation, one TCE may operate on top of the other TCE. For example, a text-based TCE (e.g., MATLAB) may operate as a foundation and a graphically-based TCE (e.g., Simulink) may operate on top of MATLAB and may take advantage of text-based features (e.g., commands) to provide a user with a graphical user interface and graphical outputs (e.g., graphical displays for data, dashboards, etc.).

An eleventh alternative embodiment may allow information to be exported from GUI300to a destination, such as a sharable workspace that can be used by TCE810and/or another application or device. For example, a user may select a solver and may enter information about options relevant to the selected solver. The user may enter a selection that exports information in setup region320, options region340and/or other regions of GUI300to the workspace, where information in the workspace can be used by other applications or devices. For example, TCE810may read information from the workspace and may perform additional processing on the information. TCE810may further generate a result that can be stored, displayed, or used by still another application or device to perform other operations.

Still other alternative implementations are possible consistent with the spirit of the invention.

Embodiments described herein produce useful and tangible results. For example, tangible results (e.g., results that can be perceived by a human) can be produced when a result is displayed to a user, when a device makes a sound, vibrates, performs an operation (e.g., moves, interacts with a person, etc.), etc. Useful results may include, but are not limited to, storage operations, transmission operations (e.g., sending information or receiving information), display operations, displacement operations, etc. Tangible and/or useful results may include still other activities, operations, etc., without departing from the spirit of the invention.

CONCLUSION

Implementations may provide devices and techniques that perform optimization operations based on user interactions with an optimizer, such as a graphically based optimizer.

The foregoing description of exemplary embodiments of the invention provides illustration and description, but is not intended to be exhaustive or to limit the invention to the precise form disclosed. Modifications and variations are possible in light of the above teachings or may be acquired from practice of the invention. For example, while a series of acts has been described with regard toFIGS. 9A-9C, the order of the acts may be modified in other implementations consistent with the principles of the invention. Further, non-dependent acts may be performed in parallel.

In addition, implementations consistent with principles of the invention can be implemented using devices and configurations other than those illustrated in the figures and described in the specification without departing from the spirit of the invention. Devices and/or components may be added and/or removed from the implementations ofFIGS. 1,2, and8depending on specific deployments and/or applications. Further, disclosed implementations may not be limited to any specific combination of hardware.

Further, certain portions of the invention may be implemented as “logic” that performs one or more functions. This logic may include hardware, such as hardwired logic, an application-specific integrated circuit, a field programmable gate array, a microprocessor, software, wetware, or a combination of hardware and software.