MPBNGCInterface.jl is a Julia module that interfaces
the Fortran77 code
Multiobjective Proximal Bundle Method MPBNGC
.
The Multiobjective Proximal Bundle Method MPBNGC
can be applied to the nonsmooth, nonconvex multiobjective optimization problem
min f₁(x), ..., fₘ(x)
s.t. x ∈ Rⁿ,
lb ≤ x ≤ ub,
lbc ≤ C' x ≤ ubc,
fᵢ(x) ≤ 0, i = m+1, ..., m+ngcon,
where
n
, m
, nlin
, ngcon
is the number of
optimization variables,
objective functions,
linear constraints,
general constraints, respectively.
lb
and ub
are lower and upper bounds on x
,
lbc
and ubc
are lower and upper bounds on C' x
,
C
is a n x nlin
-matrix,
fᵢ
are objective and general constraint functions,
and C'
is the transposed of C
.
You can install MPBNGCInterface.jl
through the
Julia Package Manager:
] add https://github.com/milzj/MPBNGCInterface.jl.git
The command should download the module and compile
the Bundle method if you have gfortran
installed.
The code build.jl
located in deps
when executed attempts to download the
source code
of the
Proximal Bundle Method MPBNGC
and tries to compile it together with its dependencies.
The module is an unregistered Julia package. It has successfully been tested
on Linux and Mac OS using Travics CI
with julia version 1.0.5, 1.1.1, 1.2.0 and 1.3.1
.
Moreover, it has been tested on Windows 10 Education (version 10.0.16299) (64bit) with
julia version 1.3.1
and gfortran
of mingw-w64 (x86_64)
.
This code uses gfortran
to compile the
Proximal Bundle Method MPBNGC
.
The interface does not support other compiles than gfortan
.
You can download the
Proximal Bundle Method MPBNGC
manually and use your favourite compiler flags to compile
and build mpbngc.f
together with its dependences.
You would need to create a
shared library
and place it in the subdirectory deps/usr
.
There is no user manual or help file available for the module. I recommend to have a look at the examples and tests to figure out how to use the module.
The objective and constraint functions fᵢ
need to implemented
in a single function having the following signature:
function fasg!(n::Int64, x::Vector{Float64}, mm::Int64,
f::Vector{Float64}, g::Matrix{Float64})
even if you consider a single objective optimization problem.
Function and subgradient evaluations are stored in
f
(a vector of length mm
) and
g
(a matrix of size n x mm
), respectively.
f[1:m]
are the objective function values and
f[m+1:mm]
the general constraint function values.
("!" is optional.)
If you consider a bound-constrained optimization problem,
the "types" of the bounds lb
and ub
are stored in ib
. Meaning,
the components of ib
indicate whether the corresponding
component of x
is unconstrained, fixed, bounded from below and/or
bounded from above.
The "classification" is performed by the function classify_bounds
called by the inner constructor
of the mutable struct BundleProblem
according to
the rules indicated in the documentation of the function classify_bounds
(see src/Bounds.jl). The variable ib
matches
the input variable IX
of the Fortran code of the bundle method.
You can modify ib
before calling solveProblem
, which
calls the Fortran implemenation of the
Proximal Bundle Method MPBNGC
.
The bounds lbc
and ubc
(if present) get "classified" similarly
via the same function. The types are stored in ic
corresponding to
the input variable IC
of the Fortran code.
A user manual for the
Proximal Bundle Method MPBNGC
is provided in
M.M. Mäkelä: Multiobjective proximal bundle method for nonconvex nonsmooth optimization: Fortran subroutine MPBNGC 2.0. Reports of the Department of Mathematical Information Technology, Series B. Scientific Computing B 13/2003, University of Jyväskylä, Jyväskylä (2003)
Further details are provided in
M.M. Mäkelä, N. Karmitsa, O. Wilppu: Proximal Bundle Method for Nonsmooth and Nonconvex Multiobjective Optimization in Mathematical Modeling and Optimization of Complex Structures. T. Tuovinen, S. Repin and P. Neittaanmäki (eds.), Vol. 40 of Computational Methods in Applied Sciences, pp. 191--204, Springer, 2016.
I would like to thank Professor Marko M. Mäkelä
for making the source code of the
Proximal Bundle Method MPBNGC
available online. I would like to acknowledge
Prof. Dr. Michael Ulbrich
and Dr. Christian Ludwig
for explaining me how to interface Fortran code.
I appreciate very much that Christian took time to meet with me and to answer questions
I had about interfacing Fortran(77) code, and that he has allowed me to reuse
large parts of his ODEInterface.jl code.
The module has been implemented by Johannes Milz.