Giter Club home page Giter Club logo

mpbngcinterface.jl's Introduction

MPBNGCInterface.jl Tests

MPBNGCInterface.jl

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.

Installation

You can install MPBNGCInterface.jl through the Julia Package Manager by executing the following command in the Pkg REPL:

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.

To run the tests, we can then execute in the Pkg REPL,

test MPBNGCInterface

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).

Compilation with gfortan

This code uses gfortran to compile the Proximal Bundle Method MPBNGC.

The interface does not support compilers other than gfortan.

Custom Installation

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.

Manual

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.

References

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.

Acknowledgments

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.

Author

The module has been implemented by Johannes Milz.

mpbngcinterface.jl's People

Contributors

jia-kai avatar milzj avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.