Ioptlib
This page
provides some information about the Ioptlib (Investigative Optimization
Library) , whose experimental version should be released soon
(see comment on availability).
About
the library
Ioptlib (a shortcut for Investigative Optimization Library) is
an open optimization library designed to sustain development and
testing of algorithms for solving practical optimization problems. A
priority goal is to develop algorithms suited to problems with
computationally expensive and possibly noisy evaluation of the response
(i.e. objective and constraint) functions. The library is intended to
provide modular building blocks for constructing such algorithms,
standardized templates for interfacing tools obtained form other
libraries, and testing environment where different performance aspects
of algorithms can be readily extensively tested during and after the
development stage. Currently most of the efforts are devoted to
algorithms based on successive solution of approximated problems
obtained by local sampling and approximation of the response functions.
Such algorithms have complex designs and involve solution of many
sub-problems such as non-linear or quadratic programming problems,
matrix algebra, optimal sampling strategies, etc. The intention is
therefore to gradually accumulate efficient routines for solving these
problems, which will lead to broader serviceability of the library. Any
attempt was made to keep open the possibility of starting development
of new algorithms or attaching to the existent functionality at any
level. The basic library is therefore intended to be distributed as
free open source under certain conditions. A couple of algorithms will
be available under different negotiable terms since this is necessary
to provide the funding for library development, however their building
blocks together with a set of quite useful algorithms will be provided
with the basic set that is more open what concerns availability.
The original motivation for the library was obtained in
optimization of forming processes where evaluation of objective and
constraint functions typically involves complex numerical simulation
with hundreds of thousands of degrees of freedom, very non-linear and
path dependent materials, multi-physics and multi-scale phenomena etc.
As result, not only the calculation of the objective and constraint
functions takes very long times even on the fastest computers or
parallel architectures, but these functions often contain substantial
amount of numerical noise. These conditions impose a substantial turn
in how algorithm performance is viewed. On one hand the most important
measure of algorithm efficiency becomes the number of function
evaluations it takes for calculating optimum up to a given accuracy.
The CPU time spent by the algorithm becomes somehow less important
because function evaluations will normally require incomparably more
computational time. Because running optimization procedures will often
be just on the limit of affordable, the goal will not always be to find
an optimal solution up to a specified accuracy, but rather to achieve
significant improvement within affordable computational time.
The targeted scope of the library is beyond the area of its
original motivation. It is intended to provide a pool of algorithms for
different problems and facilities for extending this pool. Beside that,
interaction with other libraries and use of the library in existing or
future software is accounted for as much as possible. A lot of stress
is put on defining standard data types and function prototypes used for
different purposes, such as evaluation of response functions and their
derivatives or for storing results of such evaluation and their use in
building approximations. These standards are defined in such a way that
routines for similar tasks from other libraries can be easily
incorporated in the system, and functions that are consistent with
library standards can be easily exported in standard forms required in
other software environments. Wrapping functions and data converters are
provided for some common cases, and the way how one can create own
tools for this is being documented in manuals. The standards are
designed in such a way that they are suitable for any environment, in
particular to allow recursive calls and work in multi-threaded
environment.
The library comes with a set of basic utilities that are
extensively used in implementation of basic building blocks and
algorithms. This includes e.g. basic matrix and vector operations and
generic implementation of data containers such as stacks. These
utilities are well documented in source code while overview is given in
documentation.
Many of elementary utilities make use of other free libraries.
Contribution of people who designed these libraries and made them
available is gratefully acknowledged.
Availability
I hope the library will be available by october 2005 at the
latest. Until then I must write some documentation and implement some
routines which will make the library useful for other users. I intend
to release an experimental version first, which is mainly intended for
those who have an interest in contributing to the library or
cooperating at decisions about library design. After a given period,
the official version will be released. In the official versions, I will
attempt to enforce backward compatibility as much as possible for the
functionality that is intended for average users, while the
experimental version may be subject to changes in function names and
organization.
The main user of the library will be C3M and the library will be
at some stage included in Inverse. However, a part of the
library will be publically available in order to promote the exchange
of ideas between researchers working on similar problems in
optimization. Some commercial algorithms will not be freely available,
but I will do my best to make them easily available for research
purposes in exchange for quotation, exchange of results, or
contributions to the library.
Note: This site is under
construction.
Number of accesses since April
2005:
If you don't see the access counter properly then please follow this link!