Inverse is a general-purpose shell for solving
inverse and optimization problems. It is designed for solving practical
industrial problems as well as for academic use (i.e. for development
and
experimentation with various optimization and auxiliary tools within a
general optimization environment). In general it is supposed to be used
in conjunction with simulation programmes, although stand-alone use is
possible.
Openness, flexibility and portability it the basic guidance followed at Inverse development.
Openness means that the programme is easily integrated or interfaced with other programmes that accomplish performing specific functions not available in Inverse. It also means that different modules of the programme can be developed independently at different locations and then merged together at any time. Things which are not dependent one upon another are also implemented this way, therefore implementation and development of certain functionality does not affect already implemented functions. As a result, for example, someone who develops an interface with a specific simulation programme does not need to care about how optimization algorithms are implemented in the shell.
Flexibility means that the shell is
capable
of solving a great variety of problems that have very little in common.
A flexible user interface implemented as file interpreter plays the
main
role here. User of the shell has a great freedom at defining the
problem
and solution strategy. The shell is structured in several layers where
the most basic layers form a framework characterized by means common
more
or less to all optimization problems. For example, the fact that one or
more objective functions are defined and that the solution procedure of
optimization problems consists of repetitive evaluations of the
objective
and possibly some other functions define this framework. A minimum
amount
of standard conventions are defined at this level, e.g. the place where
the objective function value is stored. These conventions form the only
rules which user is usually obliged to keep.
Above the basic layer there are various tools of
different levels and complexity. The user can use these tools within
the
basic framework. By combining the existent tools it is possible to
solve
a great variety of optimization problems . Several high level and
specialized
tools can be added to ease solving of several specific classes of
problems.
Use of these tools is left to user choice.
Portability means that the programme can be easily ported to different computer environments. The basic framework of the programme is coded in ANSI C which is available on almost all platforms. Use of other higher level or less standard development tools and libraries is avoided within the Inverse development group. System requirements of the programme are also low. Programme is a terminal application and can therefore be used on any system from this point of view. It is possible that specific parts of the programme or upgrades of the user interface will not meet these requirements. However, in this case these parts will be implemented at a higher level so that they can be simply omitted on platforms which would not provide sufficient support for them.
Solution of practical optimization problems
usually
induces a number of sub problems that must be solved. This is
especially
true when definition of optimization objective includes response of a
complex
physical system, which is calculated by an appropriate mathematical
model
- and this is exactly the scenario for which the shell has been
primarily
designed. Inverse provides a number of tools for
various
kinds of sub problems related to different areas of optimization. They
are implemented as file interpreter and expression evaluator functions
organized in so called modules. These are sets of functions
oriented
towards solving problems of specific areas. The tendency is that
organization
of modules follow simple and clear mathematical logic where
provided
functionality is closely related with nature of the problems and
adapted
to user's way of thinking at the same time. Provided functions should
clearly
reflect basic feature of the problems they solve as are seen by user,
but
must hide from user solution details that are not essential for problem
understanding.