Here you will find a variety of resources (mostly Jupyter notebooks) related to the use of our optimization routines and modelling suite. If you are new to NAG's optimization solvers we highly recomment to read the E04 chapter of the NAG Library which is dedicated to local optimization. While if you are new to NAG Library for Python we encourage to review the NAG Python documentation and read the sections on How to install the NAG Library for Python and How to run the Jupyter notebook examples of this Readme
.
If you are already familiar with NAG's optimization offering and just need to find the right solver to use for your problem, then we recommend reviewing the Optimization Index or the Decision Tree for selecting the right Optimization solver.
![]() |
![]() |
Figure 1. Applied optimization examples. (left) DFO nonlinear least-square calibration for the Kowalik and Osborne function, red line shows the final solution. (right) Nonlinear least-squares fitting example, experimental data histogram (blue bars) is fitted with an aggregated model (green curve) while the unfolded models are the blue and red curves. Optimal parameter values are reported in the legend, for more details see here.
- Second Order Cone Programming (SOCP)
- First order active set CG (FOAS)
- Nonlinear Least-Squares (BXNL)
- Semi-Definite Programming (SDP)
- Derivative-Free Optimization (DFO)
- Tips and Tricks in modelling
- Assortment of example notebooks
In this section we illustrate how to install the NAG Library for Python, request a Trial Licence and make sure the Library is working. Details and further information regarding the installation can be found here.
Note Before starting make sure you have access to a host that has Python 3 (3.4 or more recent).
Installing the NAG Library is done using the pip
package manager, fire-up a terminal with Bash and create a Python 3 virtual environment where to install and test the NAG Library
guest@nag-37:~$ python3 -m venv nag3
guest@nag-37:~$ . nag3/bin/activate
(nag3) guest@nag-37:~$
Now use pip
to install the NAG Library for Python
(nag3) guest@nag-37:~$ python -m pip install --extra-index-url https://www.nag.com/downloads/py/naginterfaces_nag naginterfaces
or if you prefer the version of the package that relies on Intel MKL for optimized linear algebra routines, then use
(nag3) guest@nag-37:~$ python -m pip install --extra-index-url https://www.nag.com/downloads/py/naginterfaces_mkl naginterfaces
The output should be similar to
Collecting naginterfaces
Downloading https://www.nag.com/downloads/py/naginterfaces_nag/naginterfaces/naginterfaces-27.1.0.0-py2.py3-none-linux_x86_64.whl (55.8MB)
100% |████████████████████████████████| 55.8MB 21kB/s
Collecting numpy>=1.15 (from naginterfaces)
Downloading https://files.pythonhosted.org/packages/45/b2/6c7545bb7a38754d63048c7696804a0d947328125d81bf12beaa692c3ae3/numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl (13.4MB)
100% |████████████████████████████████| 13.4MB 70kB/s
Installing collected packages: numpy, naginterfaces
Successfully installed naginterfaces-27.1.0.0 numpy-1.19.5
The output indicates that the installation was successful.
The next step is to get the licensing info (product code and KUSARI ID) and use it to request a licence. From the same virtual terminal, try
(nag3) guest@nag-37:~$ python -m naginterfaces.kusari
The output should be similar to
The NAG Library for Python on this platform uses
underlying Library NLL6I271VL.
This Library has been installed as part of the package
and it requires a valid licence key.
No such key could be validated:
the key may not have been installed correctly or
it may have expired.
The Kusari licence-check utility reports the following:
User: guest
Directory: /home/guest
NAG_KUSARI_FILE=""
File /home/guest/nag.key does not exist
-------------------------------------------------------------------------------
Error: Licence not found; this product requires a key for NLL6I271VL
The above information has been generated on machine nag-37
For information on how to obtain a licence, please see
https://www.nag.com/numeric/py/nagdoc_latest/naginterfaces.kusari.html
KUSARI ID = "ADLXt-adEclJLmvnxlrU2sseteZoo,RopA-Ld"
The two important bits are the
-
product code shown as
underlying Library NLL6I271VL.
which identifies the licence to request, and -
KUSARI ID shown as
KUSARI ID = "ADLXt-adEclJLmvnxlrU2sseteZoo,RopA-Ld"
which identifies the host you are running the library on.
Note that the product code and KUSARI ID can be different from the previous example.
With these, you are set to contact NAG and request a trial licence.
The trial licence is a plain text chunk similar to
NLL6I271V TRIAL 2021/01/27 "RverXn0Pc-Ib?ctdgF=Wpis2j7I"
Save or copy the text into the file /home/guest/nag.key
.
The final step is to make sure the licence is valid and the library is working as expected.
The last step is to make sure the licence was correctly stored and that the NAG Library is working correctly. From the same virtual terminal re-run the Kusari licence module
(nag3) guest@nag-37:~$ python -m naginterfaces.kusari
This time the output should be similar to
Licence available; the required NLL6I271VL licence key for this product is valid
TRIAL licence, 27 days remaining (licence from file)
Now let's try a more interesting example (list of optimization examples)
This command runs the example for the FOAS (First-Order Active set method) solver and minimizes the Rosenbrock 2D function.
(nag3) guest@nag-37:~$ python -m naginterfaces.library.examples.opt.handle_solve_bounds_foas_ex
Should generate an outputsimilar to
Trying:
main()
Expecting:
naginterfaces.library.opt.handle_solve_bounds_foas Python Example Results.
Minimizing a bound-constrained Rosenbrock problem.
E04KF, First order method for bound-constrained problems
...
Status: converged, an optimal solution was found
Value of the objective 4.00000E-02
...
ok
indicating that the example was successfully executed. The source code can be found here.
To display the full list of example source files on disk, but not run them, execute
python -m naginterfaces.library.examples --locate
All examples may be executed sequentially by running
python -m naginterfaces.library.examples
Run python -m naginterfaces.library.examples --help
to see any additional usage.
This section briefly illustrates how to setup a host in order to open and run the Jupyter notebooks provided in this repository. Before running the notebooks make sure the NAG Library is installed and working. Before starting, it is advised to read Jupyter's installation page.
To install Jupyter, launch a terminal and activate the virtual environment used to install the NAG Library for Python
guest@nag-37:~$ . nag3/bin/activate
(nag3) guest@nag-37:~$ pip install notebook matplotlib
Collecting notebook
Downloading https://files.pythonhosted.org/packages/74/19/50cd38acf22e33370d01fef764355f1e3517f6e12b4fceb8d434ece4f8fd/notebook-6.2.0-py3-none-any.whl (9.5MB)
100% |████████████████████████████████| 9.5MB 115kB/s
Collecting argon2-cffi (from notebook)
...
Successfully installed jupyter-client-6.1.11 jupyterlab-pygments-0.1.2 ... wcwidth-0.2.5
This indicates that Jupyter and matplotlib were successfully installed. The next section shows how to start the notebok interface and open an example.
To run an example, grab a copy of the notebook of interest and start up the notebook interface.
For example, download the Rosenbrock 2D optimization example notebook rosenbrock2d.ipynb
into the current directory
(nag3) guest@nag-37:~$ curl -O https://raw.githubusercontent.com/numericalalgorithmsgroup/NAGPythonExamples/master/local_optimization/FOAS/rosenbrock2d.ipynb
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 61961 100 61961 0 0 382k 0 --:--:-- --:--:-- --:--:-- 382k
and now open it using jupyter-notebook
(nag3) guest@nag-37:~$ jupyter-notebook rosenbrock2d.ipynb
[I 12:24:07.336 NotebookApp] Serving notebooks from local directory: /home/guest
[I 12:24:07.336 NotebookApp] Jupyter Notebook 6.2.0 is running at:
[I 12:24:07.336 NotebookApp] http://localhost:8888/?token=f1836a06799a92f25ef9966439bf3491b2f0960dcb51806d
...
This command will fire-up your web browser and open the rosenbrock2d.ipynb
notebook, the window should be similar to