Enhancements in successive versions of FFSQP Version 3.7b : January 1998 1. Fixed a bug involving the indexing of the array istore(), an integer array used to avoid repeating function evaluations at the same trial point in dir() and step1(). The bug could cause access violations in dir(), or affect the line search by forcing the algorithm to skip the evaluation of a constraint or objective when, in fact, it is necessary. (Thanks go to David Gay of Lucent Technologies and Hans Mittelmann of Arizona State University for uncovering this bug) 2. Removed a possible out-of-bounds access of the array iact() in dir(). This bug had no effect on the performance of the algorithm. (Thanks go to Rohit Sharma of IIT Bombay for pointing this out) Version 3.7a : May 1997 1. Fixed a sign mistake in the Lagrange multipliers estimates returned from CFSQP for nonlinear equality constraints. (Thanks go to David Gay of Lucent Technologies for pointing out this error) 2. If the initial point is optimal, the Lagrange multiplier estimates for the nonlinear equality constraints are now computed. (Thanks again go to David Gay for pointing out this oversight) Version 3.7: April 1997 1. Changed the line search criterion back to what it was for all versions prior to Version 3.6. It was incorrectly changed for Version 3.6. 2. Fixed error in logic involving penalty parameter updates which could lead to the algorithm getting stuck at a point when the search direction is essentially zero even though nonlinear equality constraints may not be satisfied. 3. Fixed a bug accessing iskip[] in step1(). 4. The incorrect constraint gradients were displayed during Phase I for iprint=3, this was corrected. 5. More information is displayed when execution is halted due to an error. 6. Fixed a small bug in out.f (Thanks to Robert Wolpert of Duke) 7. Removed underscores from some variable names to be f77 compliant. (Thanks to Mark Stone) Version 3.6: June 1996 1. Changed nonmonotone line search algorithm so that a decrease in the objective function is required in at most three iterations for all cases (this was previously the case only for problems with no nonlinear constraints). This was done for uniformity sake. On the average, performance on test problems is unaffected. 2. The criterion for accepting a feasible initial point in phase I has been modified. If a trial point in the line search is feasible, it is accepted. (Thanks go to Capt. Linda B. Smith of WPAFB for suggesting this improvement) 3. The printed value of SCV did not correspond to what the manual claimed it to be. This has been corrected and renamed to SNECV. 4. If only one objective function is present, an objective multiplier equal to 1 is now returned. (Thanks go to Joao Luis Cardoso Soares of Columbia University for pointing out this oversight) 5. We now exit with a normal termination, displaying all appropriate information, when the maximum number of iterations have been reached. Version 3.5: September 1995 1. FSQP has been officially changed to FFSQP. This requires the user to change the calling name from FSQPD to FFSQP in the main program. 2. A bug in the printout with iprint=3 is fixed. 3. Incorrect use of fM and fmax is corrected. 4. A few of the parameters for the equality constraints part of the algorithm were changed. Specifically, the initial value of the penalty parameter was changed from 10 to 2 and the penalty parameter increase factor delta was decreased from 5 to 2. Further, a flaw in this portion of the algorithm was detected and fixed. These changes produced, in general, a great increase in performance on equality constrained problems. 5. The QP multipliers for linear equality constraints are now used as the linear equality multiplier estimates instead of solving for these as part of the least squares problem (thus saving some computation). (Thanks go to Adam Schwartz of UC Berkeley for suggesting this) 6. The Lagrange multipliers returned to the users main program were incorrect for nonlinear equality constraints. This has been corrected. (Thanks go to Deng Wanhong of Nanyang Technological University, Singapore for pointing this out) 7. For iprint>=1, the appropriate information is now displayed at the final iterate when termination is caused by the maximum number of iterations being reached. (Thanks again to Adam Schwartz) 8. Logical variable x_is_new added to common block fsqpus indicate to the user when the value of x sent to user-defined functions has been changed within FFSQP. 9. In the algorithm FSQP-NL, do not increase Ck if rhol is equal to 1. (see manual for definitions) Version 3.4: December 1994 1. Changed the algorithm to avoid an unnecessary computation of d1 in mode 1 (nonmonotone line search). The sequence of iterates is unaffected. 2. Allow for problems with nonlinear equality constraints and no objective function. Useful for computing a root of a nonlinear quation. (Thanks go to Tomas Schonthal of the Lund Institute of Technology for suggesting this extension) 3. We now only require the number of linear equality constraints (versus the total number of equality constraints) to be less than the number of variables. A warning message will be given if the total number of equality constraints is larger than the number of variables. 4. When a numerical equivalence of iterates error occurs, all information is now displayed (for iprint>0) instead of simply terminating with an error message. 5. Fixed bug possibly causing a crash on some problems when loading the integer array iw for the phase I (generation of feasible initial point) computation of dtilde (Thanks go to Vivek Sharma of U. of Minnesota for reporting this problem) 6. Fixed bug in Phase I for assignment of ninq (internal variable) in the computation of dtilde, when neqn is not equal to 0. 7. Fixed bug in printout when there is no objective function. Version 3.3b : September 1993 1. Correction is made to count "ncallg" correctly. The correction should affect the value only if there are nonlinear equality constraints. Version 3.3a : May 1993 1. In "call resign ..." in the subroutine step.f, w(2) is replaced by w(ntwo) to fool some compilers that do not like the fact that while w is declared of dimension 1 (dummy dimension declaration for a formal argument), its second component is invoked. Version 3.3 : April 1993 1. If the user so requests (via "mode"), during the line search, FSQP will now evaluate objectives only after having determined that all constraints are satisfied. This is of value when some objective functions are not defined outside the feasible set. 2. The reserved common block "fsqpst" is no longer used by FSQP. Instead, a new reserved common block "fsqpus" is provided to give the users a choice of several possible stopping criteria. (As a side-effect, the user is not allowed any more to have his/her own block data; see Section 4 of the manual for details.) 3. Some imperfections are fixed (e.g., comparision of double precision number to hard zero, and incorrect checking of value of "mode"). Version 3.2 : March 1993 1. The user is given the option to print output at every Nth iteration and at the end, where N is a multiple of 10. Version 3.1a : January 1993 1. Bugs are fixed (with the help of Yaguang Yang). These bugs have to do with finding a feasible point. There should be no effect if the user's problem does not contain both nonlinear and linear equality constraints. Version 3.1 : November 1992 1. Possible division by zero is avoided. 2. Objective and constraint values at initial feasible point are printed out if iprint >=1. 3. Estimates of Lagrange multipliers are made available on output even when execution is terminated abnormally in phase 2. 4. Incorrect descriptions of nineq, neq, iwsize and nwsize in the user's manual and in the comments in fsqpd.f are corrected. Version 3.0d : October 1992 1. Some imperfections (identified by WATFOR) are cleaned up. 2. Erroneous declaration of dummy argument in sampl*.f are corrected. Version 3.0c : September 1992 1. A bug in identifying the active set of objectives is fixed. (Thanks go to Yaguang Yang.) 2. Some imperfections (identified by WATFOR) are cleaned up. (Thanks go to Jaroslav Dolezal and Jiri Fidler at CZ Academy of Sciences.) Version 3.0b : August 1992 1. A bug in assigning iskip(*) is fixed. This has to do with finding a feasible point. 2. Other bugs associated with nonlinear equality constraints are fixed. The effect is on nonmonotone line search. (Thanks go to Yaguang Yang at the Institute for Systems Research, University of Maryland at College Park.) Version 3.0a : June 1992 1. A bug in check.f is fixed and a typo is corrected. 2. A bug in initpt.f is fixed. 3. Printout message is adjusted for various situations. 4. Computation of initial equality constraint violation is corrected. (Thanks go to Jaroslav Dolezal and Jiri Fidler at CZ Academy of Sciences) 5. An output error for function values is corrected. Version 3.0 : June 1992 1. FSQP now also handles nonlinear equality constraints. "Semi-feasibility" for these constraints is maintained in the following sense: given a scalar constraint h(x)=0, if h(x0)<=0 (resp. >=0), then h(xk)<=0 (resp. >=0) for all k. 2. An option is added to allow users to have their own stopping criterion. 3. The interface for QPSOL is no longer part of the standard distribution (but it is still available on request). 4. Objective and constraints now must be provided in Fortran "subroutines" rather than "functions". 5. Concerning the default stopping criterion, the norm requirement on the Kuhn-Tucker vector is replaced by a norm requirement on the Newton direction. 6. The meaning of "mode" is redefined to encompass several attributes. 7. The argument list to call FSQPD is modified. 8. The Hessian matrix is reset to the identity whenever the line search fails to complete after a specified number of step reductions, provided the last reset occurred at least 5*nparam iterations earlier (it used to be 1*nparam). Version 2.4b : November 1991 1. Bugs are fixed that affected the computation of a feasible point and the initialization of iskp. (Thanks go to Klaus Schittkowski at U Bayreuth and John Hauser at USC.) Version 2.4a : November 1991 Mostly fixes on problems uncovered by Roque Donizete de Oliveira (Michigan.) 1. A bug is fixed that affected the multipliers given on output. 2. A few unused statements are commented out. 3. small() is modified to avoid too small a number on machines that use extra-length registers for internal computations (with Roque's help). Version 2.4 : October 1991 1. The Hessian matrix is reset to the identity whenever the line search fails to complete after a specified number of step reductions, provided the last reset occurred at least nparam iterations earlier. Version 2.3B : September 1991 1. A bug is fixed in reordering active functions. Version 2.3A : September 1991 1. A bug is fixed in reordering active functions. Version 2.3 : July 1991 1. KKT multipliers at the solution point are provided on output. 2. Bugs are fixed and code is adapted to be accepted by some "tough" compilers (with the help of K. Schittkowski). Version 2.2 : June 1991 1. In computing d~, only the most "active" constraints and objectives are taken into account, thus reducing the number of function evaluations. 2. Refinements of nonmonotone line search are implemented for minimax problems without nonlinear constraints. 3. Line search is more efficient. 4. A bug is fixed in the computation of d~ in mode=1. 5. The calling sequences of both gradcn and gradob are simplified. Version 2.1 : April 1991 1. FSQP can use either of two quadratic programming codes: QPSOL or QLD. 2. Reorder constraints and objectives to enable more efficient line search. Version 2.0B : March 1991: Bugs are fixed Version 2.0A : October 1990: Bugs are fixed Version 2.0 : August 1990 1. Extension to the solution of constrained minimax problems. Version 1.0B : June 1990: Bugs are fixed Version 1.0A : December 1989: Bugs are fixed Version 1.0 : August 1989