{"id":1275,"date":"2023-05-31T08:54:35","date_gmt":"2023-05-31T08:54:35","guid":{"rendered":"https:\/\/nag.com\/?page_id=1275"},"modified":"2023-07-14T14:19:05","modified_gmt":"2023-07-14T14:19:05","slug":"limited-memory-nonlinear-conjugate-gradient-solver","status":"publish","type":"page","link":"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/","title":{"rendered":"Limited-Memory Nonlinear Conjugate Gradient Solver"},"content":{"rendered":"\n<div class=\"gbc-title-banner ta ta-lg ta-xl\" style='background-color: #082d48ff; color: #ffffffff; border-radius: 0px; '>\n    <div class=\"container\" style='border-radius: 0px; '>\n        <div class=\"row justify-content--center\" style='color: #ffffffff;'>\n            <div class=\"col-12\"  >\n                <div class=\"wrap pv-4 \" style=\"0px\">\n                                <div class=\"col-12 col-md-12 col-lg-10 col-xl-8  banner-content\"  >\n    \n                                             <h1>Limited-Memory Nonlinear Conjugate Gradient Solver<\/h1>\n                    \n                    <div class=\"mt-1 mb-1 content\"><\/div>\n\n                    \n                                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<!-- Spacer -->\n<div class=\"pt-4 pt-lg-4 pt-xl-4\" ><\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-12 col-lg-10 col-xl-8\">\n            <p>At Mark 27 <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG introduced a novel solver\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">handle_solve_bounds_foas (e04kf)<\/a>\u00a0<\/span>for large-scale unconstrained or bound-constrained nonlinear optimization problems. It offers a significant performance improvement over other available alternatives. It is based on the nonlinear conjugate gradient method. Thanks to its low memory requirements it is suitable even for problems with millions of variables and beyond. It is part of <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG&#8217;s ongoing effort to expand and improve its offering in mathematical optimization.<\/p>\n<p>Large-scale nonlinear optimization problems of the form<\/p>\n<p><span id=\"eqn1\" class=\"math display\">\\[ \\begin{align} \\min f(x)&amp; \\label{p}\\\\ \\text{subject to}&amp;\\quad\\ell\\leq x\\leq u,\\quad x\\in\\mathbb{R}^n, \\nonumber \\end{align} \\]<\/span>(1)<\/p>\n<p>where\u00a0<span class=\"math inline\">\\(f(x)\\)<\/span>\u00a0is smooth with first-order derivatives, are quite ubiquitous in real-life applications. This kind of problem becomes quite challenging to solve when the search space is substantially large (<span class=\"math inline\">\\(n=10^5\\)<\/span>\u00a0or more). It is often the case that evaluating the second-order derivatives (Hessian) is prohibitively expensive (in time or resources) or outright impossible. First-order methods are designed to rely only on first-order derivatives (gradient) and make clever use of gradient information to build a model of\u00a0<span class=\"math inline\">\\(f(x)\\)<\/span>\u00a0to find good search directions. Methods such as conjugate gradient (CG) or quasi-Newton (QN) have been well studied and are commonly used to solve\u00a0(1).<\/p>\n<h2 id=\"improving\">Improving on Well-established Methods<\/h2>\n<p>CG methods have their origin in linear optimization and have been successfully extended to nonlinear optimization. The main aspect that characterize these methods are their low memory requirements and convergence speed. They have gained recent popularity with the introduction of new ways on how to deal with numerical ill-conditioning and the coupling with very fast linesearch algorithms. CG methods represent an attractive compromise between the simple steepest descent method and the more memory hungry QN methods.<\/p>\n<p>Implementations of first-order methods are not only ubiquitous and have widespread use, but have also demonstrated that they endure the challenges of ever-growing problem size imposed by industry. Most notable are applications in statistics and Machine Learning, e.g. parameter calibration for log-linear models and conditional random fields (<span class=\"math inline\">\\(\\ell_2\\)<\/span>-regularization).<\/p>\n<p>One of the most used first-order method is\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/en.wikipedia.org\/wiki\/Limited-memory_BFGS\">L-BFGS-B<\/a><\/span>\u00a0which is a limited-memory bound constrained version of the\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/en.wikipedia.org\/wiki\/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm\">BFGS<\/a>\u00a0<\/span>QN algorithm. The main idea is to approximate the inverse Hessian matrix using a limited amount of direction and gradient vectors to represent implicitly the approximation. Recent CG methods incorporate QN ideas\u00a0[5]\u00a0in which they retain convergence speed and low memory requirement while exploiting curvature information provided by the QN approximation to the Hessian. This combination has made the limited-memory CG a competitive alternative to L-BFGS-B.<\/p>\n<p><span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG&#8217;s\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0is a modern implementation of a bound-constrained nonlinear CG method that incorporates a limited-memory QN approximation similar in idea to L-BFGS-B. The methods implemented into this new solver have a very low memory footprint and are based on groundbreaking research in the field of first-order methods.<\/p>\n<h2 id=\"features\">Features of the New Solver<\/h2>\n<ul>\n<li>Designed to solve large-scale nonlinear problems subject to box bounds;<\/li>\n<li>Uses only first-order information;<\/li>\n<li>Only approximates the Hessian when numerical difficulties arise due to ill-conditioned problems;<\/li>\n<li>Incorporates a state-of-the-art bracketed linesearch\u00a0[3];<\/li>\n<li>Ability to recover when it is not possible to evaluate the function\u00a0<span class=\"math inline\">\\(f(x)\\)<\/span>\u00a0or its gradient at a given point;<\/li>\n<li>Memory requirement is half of L-BFGS-B. While this algorithm requires to store separately direction and gradient information,\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>only stores recent directions, thus halving the memory footprint. It can be a one-to-one replacement for L-BFGS-B.<\/li>\n<\/ul>\n<p><span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>was designed to create a competitive alternative to QN methods. Benchmark on 130 problems of the CUTEst set shows that\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>is considerably faster than L-BFGS-B (3.0).\u00a0<a href=\"https:\/\/www.nag.com\/content\/limited-memory-nonlinear-conjugate-gradient-solver#fig1\">Figure 1<\/a>\u00a0shows the performance profiles in time and gradient calls. Contrasting the solvers on plots (a) and (b) shows that both solvers use roughly the same amount of gradient calls (b) yet\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>solves 70% of the problems faster (a).<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Spacer -->\n<div class=\"pt-4 pt-lg-4 pt-xl-4\" ><\/div>\n\n\n\n<div class=\"content-split-three pv-4 \" >\n    <div class=\"container\">\n        <div class=\"row justify-content--center content-area-default\">\n            \n \n                <div class=\"col-4                            col-lg-4 \n                            col-xl-4                             ta ta-lg ta-xl                            content-split-three__wrap\n                            order-1 order-lg-1                            mb-0                            \">\n                    <div class=\"content-split-three__col\">\n                        <p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1276\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/kf_lbfgsb_medium_tokyo_notriv-nt.png\" alt=\"\" width=\"1525\" height=\"1263\" \/><\/p>\n<p class=\"para-sm\" style=\"text-align: center;\"><span style=\"white-space: nowrap;\">(a)<\/span><\/p>\n                    <\/div>\n                <\/div>\n\n            \n \n                <div class=\"col-4                            col-lg-4 \n                            col-xl-4                             ta ta-lg ta-xl                            content-split-three__wrap\n                            order-2 order-lg-2                            mb-0                            \">\n                    <div class=\"content-split-three__col\">\n                        <p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1277\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/kf_lbfgsb_medium_tokyo_notriv-ng.png\" alt=\"\" width=\"1525\" height=\"1263\" \/><\/p>\n<p class=\"para-sm\" style=\"text-align: center;\">(b)<\/p>\n                    <\/div>\n                <\/div>\n\n            \n            \n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-12 col-lg-10 col-xl-8\">\n            <p class=\"para-sm\"><em>Figure 1: Performance profiles for 130 CUTEst nonlinear bound constrained and unconstrained problems, higher line represent faster solver. In (a) comparison metric is time while in (b) the metric is the number of gradient calls.<\/em><\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Spacer -->\n<div class=\"pt-4 pt-lg-4 pt-xl-4\" ><\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-12 col-lg-10 col-xl-8\">\n            <h2 id=\"replacement\">Replacement for <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Solver\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04dgf.html\">uncon_conjgrd_comp (e04dg)<\/a><\/span><\/h2>\n<p>One of the main design objectives for\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>was to provide a modern and attractive replacement for the CG solver\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04dgf.html\">uncon_conjgrd_comp (e04dg)<\/a>\u00a0<\/span>introduced at Mark 12. While the\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04dgf.html\">e04dg<\/a>\u00a0<\/span>solver was targeted for unconstrained NLPs,\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>not only has been extended to solve bound-constrained NLPs but also offers noticeable performance gains.\u00a0<a href=\"https:\/\/www.nag.com\/content\/limited-memory-nonlinear-conjugate-gradient-solver#fig2\">Figure 2<\/a>\u00a0reports a benchmark using performance profiles over a set of CUTEst unconstrained NLP problems for both solvers\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>and\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04dgf.html\">e04dg<\/a><\/span>. Contrasting the two plots, it can be seen that the new solver is more efficient in time and in terms of user call-backs: it solves 45% of the problems faster (left plot) and 60% of the problems require less gradient evaluations (right plot). The benchmark timing data also showed that 13% of the problems where solved 10 times or more faster which includes a 7% that where solved at least 100 times faster. These results show a clear advantage of\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>over\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04dgf.html\">e04dg<\/a>\u00a0<\/span>and current users of\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04dgf.html\">uncon_conjgrd_comp (e04dg)<\/a><\/span>\u00a0are highly encourage to upgrade.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Spacer -->\n<div class=\"pt-4 pt-lg-4 pt-xl-4\" ><\/div>\n\n\n\n<div class=\"content-split-three pv-4 \" >\n    <div class=\"container\">\n        <div class=\"row justify-content--center content-area-default\">\n            \n \n                <div class=\"col-4                            col-lg-4 \n                            col-xl-4                             ta ta-lg ta-xl                            content-split-three__wrap\n                            order-1 order-lg-1                            mb-0                            \">\n                    <div class=\"content-split-three__col\">\n                        <p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1278 size-full\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/kf_dg_unconst_tokyo_notriv-nt.png\" alt=\"\" width=\"366\" height=\"303\" \/><\/p>\n<p class=\"para-sm\" style=\"text-align: center;\"><span style=\"white-space: nowrap;\">(a)<\/span><\/p>\n                    <\/div>\n                <\/div>\n\n            \n \n                <div class=\"col-4                            col-lg-4 \n                            col-xl-4                             ta ta-lg ta-xl                            content-split-three__wrap\n                            order-2 order-lg-2                            mb-0                            \">\n                    <div class=\"content-split-three__col\">\n                        <p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1279 size-full\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/kf_dg_unconst_tokyo_notriv-ng.png\" alt=\"\" width=\"366\" height=\"303\" \/><\/p>\n<p class=\"para-sm\" style=\"text-align: center;\">(b)<\/p>\n                    <\/div>\n                <\/div>\n\n            \n            \n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-12 col-lg-10 col-xl-8\">\n            <p class=\"para-sm\"><em>Figure 2: Performance profiles comparing solvers\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>and\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04dgf.html\">e04dg<\/a>\u00a0<\/span>over 114 CUTEst unconstrained NLP problems. Performance measure are: time (a) and number of gradient calls (b). For the time plot (a), higher line indicates faster solver. For the plot (b), higher line represent less gradients calls.<\/em><\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Spacer -->\n<div class=\"pt-4 pt-lg-4 pt-xl-4\" ><\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-12 col-lg-10 col-xl-8\">\n            <h2 id=\"choosing\">Choosing the right solver<\/h2>\n<p>A frequent issue when it comes to solving optimization problems is, which solver to use? The go-to solution for using the most powerful solver is not always the best choice. In general, simpler first-order (gradient) methods such as\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>require more iterations than second-order (Hessian) counterparts such as\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04stf.html\">e04st<\/a><\/span>. For problems where evaluating the gradient has negligible cost compared to evaluating the Hessian, first-order methods can be very competitive. Despite having a higher iteration count, the overall cost can be considerably less. As an illustrative example,\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>and\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04stf.html\">e04st<\/a>\u00a0<\/span>are used to solve the CUTEst COSINE(<span class=\"math inline\">\\(n\\)<\/span>) problem for an increasing value of the decision space,\u00a0<span class=\"math inline\">\\(n\\)<\/span>.\u00a0Figure 3\u00a0plots the time required for\u00a0<a href=\"https:\/\/www.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0and\u00a0<a href=\"https:\/\/www.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04stf.html\">e04st<\/a>\u00a0to solve each instance of\u00a0<span class=\"math inline\">\\(n\\)<\/span>\u00a0from 10 to 1000000. It can be observed that after a given size, evaluating and factorizing the Hessian matrix has a non-negligible cost. In effect, when\u00a0<span class=\"math inline\">\\(n=10^6\\)<\/span>\u00a0it can be seen that\u00a0<a href=\"https:\/\/www.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0is\u00a0<span class=\"math inline\">\\(18\/5=3.6\\)<\/span>\u00a0faster than\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04stf.html\">e04st<\/a><\/span>. This is one reason why it is important to know and match solver strengths with the characteristics of the problem to solve.<\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1280\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/cmp_kf_st_sm.png\" alt=\"\" width=\"1233\" height=\"1242\" \/><\/p>\n<div id=\"fig3\">\n<p class=\"para-sm\">Figure 3: Performance comparison in time (s) of\u00a0<a href=\"https:\/\/www.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0and\u00a0<a href=\"https:\/\/www.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04stf.html\">e04st<\/a>\u00a0when solving different size (<span class=\"math inline\">\\(n\\)<\/span>) instances of CUTEst COSINE problem.<\/p>\n<\/div>\n<p class=\"para-sm\"><span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04kff.html\">e04kf<\/a>\u00a0<\/span>is part of the\u00a0<span style=\"color: #ff7d21;\"><a style=\"color: #ff7d21;\" href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04intro.html#optsuite\"><span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Optimization Modelling Suite<\/a><\/span>, it offers clarity and consistency of the interface of the solvers within the suite.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Spacer -->\n<div class=\"pt-4 pt-lg-4 pt-xl-4\" ><\/div>\n\n\n<div class=\"gbc-title-banner ta ta-lg ta-xl\" style='color: #ffffffff; border-radius: 20px; '>\n    <div class=\"container\" style='border-radius: 20px; '>\n        <div class=\"row justify-content--center\" style='color: #ffffffff;'>\n            <div class=\"col-12\"  >\n                <div class=\"wrap pv-4 \" style=\"border-radius: 20px;background-color: #082d48ff\">\n                                <div class=\"col-12 col-md-12 col-lg-10 col-xl-8  banner-content\"  >\n    \n                                             <h2>References<\/h2>\n                    \n                    <div class=\"mt-1 mb-1 content\"><p>[1] D. C. Liu and J. Nocedal. (1989). On the Limited Memory Method for Large Scale Optimization. Mathematical Programming B. 45 (3) 503\u2013528.<\/p>\n<p>[2] R. H. Byrd, P. Lu and J. Nocedal. (1995). A Limited Memory Algorithm for Bound Constrained Optimization. SIAM Journal on Scientific and Statistical Computing, 16(5) 1190\u20131208.<\/p>\n<p>[3] W. W. Hager and H. Zhang. (2005). A New Conjugate Gradient Method with Guaranteed Descent and an Efficient Line Search. SIAM J. Optim. 16(1) 170\u2013192.<\/p>\n<p>[4] W. W. Hager and H. Zhang. (2006b). A New Active Set Algorithm for Box Constrained Optimization. SIAM J. Optim. 17(2) 525\u2013557.<\/p>\n<p>[5] W. W. Hager and H. Zhang. (2013). The Limited Memory Conjugate Gradient Method. SIAM J. Optim. 23(4) 2150\u20132168.<\/p>\n<p>\u00a0<\/p>\n<\/div>\n\n                    \n                    <a href='https:\/\/nag.com\/nag-library#KeyContent' style='background-color: #ff7d21ff; border-radius: 30px; font-weight: 600; ' class='btn mr-1  ' ><span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library Key Content <i class='fas fa-angle-right'><\/i><\/a>                <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<!-- Spacer -->\n<div class=\"pt-4 pt-lg-4 pt-xl-4\" ><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"content-type":"","footnotes":""},"class_list":["post-1275","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Limited-Memory Nonlinear Conjugate Gradient Solver - nAG<\/title>\n<meta name=\"description\" content=\"NAG introdcued a novel solver for large-scale unconstrained or bound-constrained nonlinear optimization problems.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Limited-Memory Nonlinear Conjugate Gradient Solver - nAG\" \/>\n<meta property=\"og:description\" content=\"NAG introdcued a novel solver for large-scale unconstrained or bound-constrained nonlinear optimization problems.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/\" \/>\n<meta property=\"og:site_name\" content=\"nAG\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-14T14:19:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nag.com\/wp-content\/uploads\/2024\/02\/NAG-Logo-White-On-Blue.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"12770\" \/>\n\t<meta property=\"og:image:height\" content=\"4353\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@NAGTalk\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/\",\"url\":\"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/\",\"name\":\"Limited-Memory Nonlinear Conjugate Gradient Solver - nAG\",\"isPartOf\":{\"@id\":\"https:\/\/nag.com\/#website\"},\"datePublished\":\"2023-05-31T08:54:35+00:00\",\"dateModified\":\"2023-07-14T14:19:05+00:00\",\"description\":\"NAG introdcued a novel solver for large-scale unconstrained or bound-constrained nonlinear optimization problems.\",\"breadcrumb\":{\"@id\":\"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/nag.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Limited-Memory Nonlinear Conjugate Gradient Solver\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nag.com\/#website\",\"url\":\"https:\/\/nag.com\/\",\"name\":\"NAG\",\"description\":\"Robust, trusted numerical software and computational expertise.\",\"publisher\":{\"@id\":\"https:\/\/nag.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nag.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nag.com\/#organization\",\"name\":\"Numerical Algorithms Group\",\"alternateName\":\"NAG\",\"url\":\"https:\/\/nag.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nag.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png\",\"contentUrl\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png\",\"width\":1244,\"height\":397,\"caption\":\"Numerical Algorithms Group\"},\"image\":{\"@id\":\"https:\/\/nag.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NAGTalk\",\"https:\/\/www.linkedin.com\/company\/nag\/\",\"https:\/\/www.youtube.com\/user\/NumericalAlgorithms\",\"https:\/\/github.com\/numericalalgorithmsgroup\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Limited-Memory Nonlinear Conjugate Gradient Solver - nAG","description":"NAG introdcued a novel solver for large-scale unconstrained or bound-constrained nonlinear optimization problems.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/","og_locale":"en_US","og_type":"article","og_title":"Limited-Memory Nonlinear Conjugate Gradient Solver - nAG","og_description":"NAG introdcued a novel solver for large-scale unconstrained or bound-constrained nonlinear optimization problems.","og_url":"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/","og_site_name":"nAG","article_modified_time":"2023-07-14T14:19:05+00:00","og_image":[{"width":12770,"height":4353,"url":"https:\/\/nag.com\/wp-content\/uploads\/2024\/02\/NAG-Logo-White-On-Blue.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@NAGTalk","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/","url":"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/","name":"Limited-Memory Nonlinear Conjugate Gradient Solver - nAG","isPartOf":{"@id":"https:\/\/nag.com\/#website"},"datePublished":"2023-05-31T08:54:35+00:00","dateModified":"2023-07-14T14:19:05+00:00","description":"NAG introdcued a novel solver for large-scale unconstrained or bound-constrained nonlinear optimization problems.","breadcrumb":{"@id":"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nag.com\/limited-memory-nonlinear-conjugate-gradient-solver\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nag.com\/"},{"@type":"ListItem","position":2,"name":"Limited-Memory Nonlinear Conjugate Gradient Solver"}]},{"@type":"WebSite","@id":"https:\/\/nag.com\/#website","url":"https:\/\/nag.com\/","name":"NAG","description":"Robust, trusted numerical software and computational expertise.","publisher":{"@id":"https:\/\/nag.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nag.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/nag.com\/#organization","name":"Numerical Algorithms Group","alternateName":"NAG","url":"https:\/\/nag.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nag.com\/#\/schema\/logo\/image\/","url":"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png","contentUrl":"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png","width":1244,"height":397,"caption":"Numerical Algorithms Group"},"image":{"@id":"https:\/\/nag.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NAGTalk","https:\/\/www.linkedin.com\/company\/nag\/","https:\/\/www.youtube.com\/user\/NumericalAlgorithms","https:\/\/github.com\/numericalalgorithmsgroup"]}]}},"_links":{"self":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/pages\/1275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/comments?post=1275"}],"version-history":[{"count":4,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/pages\/1275\/revisions"}],"predecessor-version":[{"id":3253,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/pages\/1275\/revisions\/3253"}],"wp:attachment":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/media?parent=1275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}