Source code for naginterfaces.library.examples.opt.nlp1_rcomm_ex

#!/usr/bin/env python3
"``naginterfaces.library.opt.nlp1_rcomm`` Python Example."

# NAG Copyright 2017-2019.

# pylint: disable=invalid-name,too-many-locals

import numpy as np

from naginterfaces.library import opt
from naginterfaces.base import utils as b_utils

[docs]def main(): """ Example for :func:`naginterfaces.library.opt.nlp1_rcomm`. Dense NLP. >>> main() naginterfaces.library.opt.nlp1_rcomm Python Example Results. Solve Hock and Schittkowski Problem 71. Final objective value is 1.7014017e+01 """ print( 'naginterfaces.library.opt.nlp1_rcomm Python Example Results.' ) print('Solve Hock and Schittkowski Problem 71.') # Initialize the solver: comm = opt.nlp1_init('nlp1_rcomm') # The initial guess: x = np.array([1., 5., 5., 1.]) # The linear constraints: a = np.array([[1.]*len(x)]) # There are two nonlinear constraints defined by cb_confun: ncnln = 2 # The bounds: bl = [1., 1., 1., 1., -1.0E+25, -1.0E+25, 25.] bu = [5., 5., 5., 5., 20., 40., 1.0E+25] n = len(x) istate = np.zeros(n + 1 + ncnln, dtype=b_utils.EngineIntNumPyType) c = np.empty(max(1, ncnln)) cjac = np.zeros((ncnln, n)) clamda = np.zeros(n + 1 + ncnln) objgrd = np.empty(n) r = np.zeros((n, n)) irevcm = 0 itera = 0 objf = 0. needc = np.empty(ncnln, dtype=b_utils.EngineIntNumPyType) while True: irevcm, itera, objf, needc = opt.nlp1_rcomm( irevcm, a.shape[0], a, bl, bu, itera, istate, c, cjac, clamda, objf, objgrd, r, x, comm, ) if irevcm == 0: break if irevcm in [1, 3]: objf = x[0]*x[3]*(x[0] + x[1] + x[2]) + x[2] if irevcm in [2, 3]: objgrd[:] = [ x[3]*(2*x[0] + x[1] + x[2]), x[0]*x[3], x[0]*x[3] + 1.0, x[0]*(x[0] + x[1] + x[2]), ] if irevcm in [4, 6]: if needc[0] > 0: c[0] = (x[0]**2 + x[1]**2 + x[2]**2 + x[3]**2) if needc[1] > 0: c[1] = x[0]*x[1]*x[2]*x[3] if irevcm in [5, 6]: if needc[0] > 0: cjac[0, :] = 2*x[:] if needc[1] > 0: cjac[1, :] = [ x[1]*x[2]*x[3], x[0]*x[2]*x[3], x[0]*x[1]*x[3], x[0]*x[1]*x[2], ] print('Final objective value is {:.7e}'.format(objf))
if __name__ == '__main__': import doctest import sys sys.exit( doctest.testmod( None, verbose=True, report=False, optionflags=doctest.REPORT_NDIFF, ).failed )