Previous Page | Next Page

The Sequential Quadratic Programming Solver

Example 15.6 Solving Large-Scale NLP Problems

The SQP solver exploits the sparsity of the Jacobian in NLP problems. This enables the SQP solver to solve reasonably large NLP problems. One such problem is the test example "porous1" from Vanderbei. It has 5184 variables and 4900 constraints. It is a known difficult problem to solve. Allocating a large amount of memory (roughly one gigabyte) might be necessary to achieve convergence; see the section Memory Limit for more information.


You can formulate this problem by using PROC OPTMODEL as follows:

proc optmodel;
title 'Vanderbei test example - porous1';
/*AMPL Model by Hande Y. Benson Copyright (C) 2001 Princeton
*University All Rights Reserved Permission to use, copy, modify,
*and distribute this software and its documentation for any
*purpose and without fee is hereby granted, provided that the
*above copyright notice appear in all copies and that the
*copyright notice and this permission notice appear in all
*supporting documentation. 
*Source: example 3.2.4 in S. Eisenstat and H. Walker, 
*"Choosing the forcing terms in an inexact Newton
*method" Report 6 / 94 / 75, Dept of Maths, Utah State University,
*1994. SIF input: Ph. Toint, July 1994. classification NOR2 - MN -
*V - V */

   number P = 72;
   number D = 50.0;
   number H = 1 / (P - 1); 
   var u{i in 1..P,j in 1..P} init 1 - (i - 1) * (j - 1) * H^2;
   minimize f = 0;
   con cons1{i in 2..P - 1, j in 2..P - 2}: ((u[i + 1,j]^2 + u[i -
      1,j]^2  + u[i,j - 1]^2 + u[i,j + 1]^2 - 4 * u[i,j]^2) / H^2 + D *
      (u[i + 1,j]^3 - u[i - 1,j]^3) / (2 * H)) = 0;
   con cons2{i in 2..P - 2, j in P - 1..P - 1}: ((u[i + 1,j]^2 + u[i -
      1,j]^2  + u[i,j - 1]^2 + u[i,j + 1]^2 - 4 * u[i,j]^2) / H^2 + D *
      (u[i + 1,j]^3 - u[i - 1,j]^3) / (2 * H)) = 0;
   con cons3: ((u[P,P - 1]^2 + u[P - 2,P - 1]^2  + u[P - 1,P - 2]^2 +
      u[P - 1,P]^2 - 4 * u[P - 1,P - 1]^2) / H^2 + D * (u[P,P - 1]^3 -
      u[P - 2,P - 1]^3) / (2 * H) + 50) = 0;
   for {j in 1..P} fix u[1,j] = 1.0;
   for {j in 1..P} fix u[P,j] = 0.0;
   for {i in 2..P - 1} fix u[i,P] = 1.0;
   for {i in 2..P - 1} fix u[i,1] = 0.0;
   solve with sqp / printfreq = 5;
quit;

The iteration log in Output 15.6.1 displays the optimization progress and the optimal solution.

Output 15.6.1 Iteration Log
Vanderbei test example - porous1

line
 
NOTE: The problem has 5184 variables (4900 free, 284 fixed).                    
NOTE: The problem has 0 linear constraints (0 LE, 0 EQ, 0 GE, 0 range).         
NOTE: The problem has 4900 nonlinear constraints (0 LE, 4900 EQ, 0 GE, 0 range).
NOTE: The OPTMODEL presolver removed 284 variables, 0 linear constraints, and 0 
      nonlinear constraints.                                                    
NOTE: The OPTMODEL presolved problem has 4900 variables, 0 linear constraints,  
      and 4900 nonlinear constraints.                                           
NOTE: Using analytic derivatives for objective.                                 
NOTE: Using analytic derivatives for nonlinear constraints.                     
NOTE: The SQP solver is called.                                                 
                    Objective                    Optimality                     
          Iter          Value  Infeasibility          Error  Complementarity    
             0              0  11642.1613329              0                0    
             5              0   1172.9374994   1046.5521577                0    
            10              0      2.6674644      0.7136361                0    
            15              0      0.0001096      0.0002980                0    
            20              0  0.00000011011      0.0000126                0    
            23              0  0.00000018123  0.00000420564                0    
NOTE: Converged.                                                                
NOTE: Objective = 0.                                                            
 
 

Previous Page | Next Page | Top of Page