PyOPUS Home
PyOPUS is a library for simulation-based optimization of arbitrary systems. It was developed with circuit optimization in mind. The library is the basis for the PyOPUS GUI that makes it possible to setup design automation tasks with ease. In the GUI you can also view the the results and plot the waveforms generated by the simulator.
PyOPUS GUi in action.
PyOPUS provides several optimization algorithms (Coordinate Search, Hooke-Jeeves, Nelder-Mead Simplex, Successive Approximation Simplex, PSADE (global), MADS, ...). Optimization algorithms can be fitted with plugins that are triggered at every function evaluation and have full access to the internals of the optimization algorithm.
PyOPUS has a large library of optimization test functions that can be used for optimization algorithm development. The functions include benchmark sets by Moré-Garbow-Hillstrom, Lukšan-Vlček (nonsmooth problems), Karmitsa (nonsmooth problems), Moré-Wild, global optimization problems by Yao, Hedar, and Yang, problems used in the developement of MADS algorithms, and an interface to thousands of problems in the CUTEr/CUTEst collection. Benchmark results can be converted to data profiles that visualize the relative performance of optimization algorithms.
The ``pyopus.simulator`` module currently supports SPICE OPUS, Ngspice, Xyce, HSPICE, and SPECTRE (supports OP, DC, TF, AC, TRAN, and NOISE analyses, as well as, collecting device properties like Vdsat). The interface is simple and can be easily extended to support any simulator.
PyOPUS provides an extensible library of postprocessing functions which enable you to easily extract performance measures like gain, bandwidth, rise time, slew-rate, etc. from simulation results. The collected performance measures can be further post-processed to obtain a user-defined cost function which can be used for guiding the optimization algorithms toward better circuits.
At a higher elvel of abstraction PyOPUS provides sensitivity analysis, parameter screening, worst case performance analysis, worst case distance analysis (deterministic approximation of parametric yield), and Monte Carlo analysis (statistical approximation of parametric yield). Designs can be sized efficiently across a large number of corners. PyOPUS fully automates the procedure for finding a circuit that exhibits the desired parametric yield. Most of these procedures can take advantage of parallel computing which significantly speeds up the process.
Parallel computing is supported through the use of the MPI library. A cluster of computers is represented by a VirtualMachine object which provides a simple interface to the underlying MPI library. Parallel programs can be written with the help of a simple cooperative multitasking OS. This OS can outsource function evaluations to computing nodes, but it can also perform all evaluations on a single processor. Writing parallel programs follows the UNIX philosophy. A function can be run remotely with the ``Spawn`` OS call. One or more remote functions can be waited on with the ``Join`` OS call. The OS is capable of running a parallel program on a single computing node using cooperative multitasking or on a set of multiple computing nodes using a VirtualMachine object. Parallelism can be introduced on multiple levels of the program (i.e. parallel performance evaluation across multiple corners, parallel optimization algorithms, solving multiple worst case performance problems in parallel, ...).
PyOPUS provides a plotting mechanism based on MatPlotLib and wxPython with an interface and capabilities similar to those available in MATLAB. The plots are handled by a separate thread so you can write your programs just like in MATLAB. Professional quality plots can be easily exported to a large number of raster and vector formats for inclusion in your documents. The plotting capability is used in the ``pyopus.visual`` module that enables the programmer to visualize the simulation results after an optimization run or even during an optimization run.
The latest version of PyOPUS is 0.11.2. Older versions are available in the download section.
PyOPUS is being developed by the Computer-Aided Circuit Design Laboratory at the Faculty of Electrical Engineering, University of Ljubljana, the home of a popular free circuit simulator SPICE OPUS.
Want to start quickly with PyOPUS?
Install it. Download and unpack the documetation and examples. Make sure one of the supported simulators is in the system PATH. Then run one of the GUI examples (one for each simulator) under
demo/gui/miller*
by typing
pyog miller.pog
A GUI window will open. Go to the Design Tasks tab, select the evaluate task and choose Task/Start locally from the menu. Then select Task/View results from the menu. This opens a tab with the task results. In the results tab choose Pass 1 verification and click on various items in the middle column of the results tab to inspect various aspects of the evaluated circuit.
Next, start a corner-based design run by selecting task corners in the Design Tasks tab, and starting the optimization run by choosing Task/Start locally. Open the results tab by choosing Task/View results and inspect the results as they are generated by the optimizer. Note that plots are available only for the pass verification result nodes. For all other result nodes only numerical results are available. Of course, you can change that. Just change the Save waveforms option under the tasks Output settings to For every saved result. Note that this way of running tasks can produce a lot of results and take a lot of space on your drive. Now stop the task and star it again. This time waveforms for all result nodes are available.
Fed up with slow optimization? Make sure task corners is selected in the Design Tasks tab and choose Task/Stop to stop the currently running task. Next, open the View/MPI hosts to open the hosts tab. Adjust the number of local processors you will be using. Then choose Task/Start on cluster in the menu. Go to the results tab and observe the results pouring in.
Note that at this point Ngspice has some startup issues so the parall speedup is not so obvious. Best results are obtained when using SPICE OPUS or Xyce.
News :
- 2024-08-26
PyOPUS 0.11.2 released - 2023-08-23
PyOPUS 0.11.1 released - 2023-06-01
PyOPUS 0.11 released - 2022-04-21
PyOPUS 0.10 released - 2018-09-10
PyOPUS 0.9 released - 2015-07-10
PyOPUS 0.8 released - 2012-12-04
PyOPUS 0.7 released - 2012-03-12
Windows Quickstart - 2011-10-15
PyOPUS 0.6 released
Links :
EDA Laboratory
Faculty of Electrical Engineering
University of Ljubljana
Maintained by Árpád Bűrmen
Design by Minimalistic Design