CONOPT

From ASCEND

Jump to: navigation, search
NLA
QRSlv
CMSlv
IPSlv
Opt
NLP
CONOPT
IPOPT
TRON
MINOS
NGSlv
OptSQP
DAE/ODE
IDA
LSODE
DOPRI5
LA
linsolqr
linsol
LP
MakeMPS
Logic
LRSlv

CONOPT is an efficient large-scale Nonlinear Programming (NLP) (aka nonlinear optimisation) solver developed by ARKI Consulting and Development in Denmark. For information on obtaining a copy of CONOPT, see Obtaining CONOPT for ASCEND. The CONOPT solver can be used under ASCEND to solve optimisation problems (eg testconopt.a4c). It is also used as a sub-solver by CMSlv to perform boundary-crossing calculations.

The general form of problems that CONOPT can solve[1] is

\left . \begin{matrix} \min \\ \max \end{matrix} \right \rbrace \begin{cases}   x_k \\   f(x) \end{cases}

subject to

\begin{matrix} g_i(x) \lesseqqgtr_i c_i, & i \in [1,n_{rows}] \\ a_j \le x_j \le b_j, & j \in [1,n_{cols}] \end{matrix}

where

  • x is a vector of continuous real-valued variables of size ncols
  • g is vector of constraint functions with nrows elements
  • c is vector of constraint values for g.
  • a is a fixed vector of lower bounds for x.
  • b is a fixed vector of upper bounds for x.
  • \lesseqqgtr is a vector of relational operators, each of which may be \le, \ge, < or >.
  • the optimisation is to maximise or minimise either a function f(x) or a specific variable xk.

Contents

[edit] A simple example using CONOPT

CONOPT solves optimisation problems, which means that models sovled with CONOPT should have a MAXIMIZE or MINIMIZE statement to tell CONOPT what you are optimising.

For a complete example of CONOPT with ASCEND, see the following file in the ASCEND model library: testconopt.a4c

[edit] Implementation

ASCEND 'wraps' CONOPT as a standard solver using the file asc_conopt.c.

This file in turn calls conopt_dl.c which does either dlopens the CONOPT shared library, or is dynamically linked to it, depending on how you built ASCEND. This approach leaves the possibility of the user upgrading CONOPT without any need to recompile ASCEND, and permits us to distribute a CONOPT-capable version of ASCEND which builds and runs fine even in the absence of CONOPT.

The CMSlv conditional solver also makes use of conopt_dl.c, but doesn't use solvers/asc_conopt.c.

[edit] Building ASCEND with CONOPT

Normally ASCEND will be built with CONOPT support via dlopen which means that it does not need to be on your machine at the time when you build ASCEND. If you know that you will have a copy of CONOPT, you can dynamically link to CONOPT, and no need for dlopen. To do this, use the CONOPT_LINKED build option. If you have CONOPT in a strange location, there are some other build options to specify that. The CONOPT shared library is assumed to be called libconsub3.so on Linux, or conopt3.dll and conopt3.lib on Windows).

For CONOPT support to be provided, you will need to have CONOPT in your WITH_SOLVERS build option list.

At runtime, if you have not selected CONOPT_LINKED, then the environment variable CONOPT_PATH is used to locate the CONOPT shared library.

[edit] References

  1. A Drud, CONOPT reference manual, version 3.14
Personal tools