PyHO - Hybrid optimizer in Python

PyHO is a prototype of an universal two-stage optimizer written in Python.

This project is based on the original C++ optimizer module from FMDT (Flow Meter Design Tool) project.

Current status

  • Objective function optimization with a genetic algorithm engine
    • Support for customized genetic operators
    • Support for PyEvolve specific allele operators
  • Second stage optimization with Levenberg-Marquardt algorithm
  • Optimization speedup using memoization
  • Parallel processing using network or local worker processes
    • Local mode with automatic worker management
    • Network mode with arbitrary number of worker nodes
  • Currently optimizer and worker processes need access to the same file system (passing files through the network channel is not implemented nor designed)
  • Reading original FMDT input file formats (coil and grid definitions)
  • Optimizer can be successfully launched by the FMDT GUI.


PyHO has some hard dependencies:

  • zmq Python package (called python-zmq in Debian based systems) - version 2.1.9 or newer is highly recommended
  • The ZeroMQ library (or libzmq1) with sources (libzmq-dev) - again the 2.1.9+ version is preferred.

If you want to use hybrid optimization mode make sure you also have:

  • Source distribution of BLAS (libblas-dev) and LAPACK (liblapack-dev) libraries
  • The NumPy Python library (try python-numpy)

PyHO also uses following Python packages:

  • Cython (version at least 0.16)
  • pyximport
  • PyEvolve
  • levmar (modified version supporting user initiated breaks)

All these libraries are included in the libs directory for convenience. When present in the standard Python path, system installed versions take precedence.

A note of warning: This project uses custom levmar package, officially available version cannot be used, as it will break during hybrid optimization.

Quick start

You can start the optimizer directly by launching run_optimizer Python script from the root project directory. Running it with --help option will show all available options.

You can use example evaluator based on FMDT project by using run_bc_evaluator shell script. There are example coil/grid definition files located in assets directory under examples/fmdt/ path.

There are 32-bit Linux and 64-bit Linux precompiled binaries of FMDT GUI application packaged in a GUI directory. Run it by calling Kanal_v1 shell script.