@@ -656,10 +656,15 @@ bool hiopAlgFilterIPMBase::evalNlpAndLogErrors(const hiopIterate& it,
656
656
// the one norms
657
657
// double nrmDualBou=it.normOneOfBoundDuals();
658
658
// double nrmDualEqu=it.normOneOfEqualityDuals();
659
- double nrmDualBou, nrmDualEqu;
660
- it.normOneOfDuals (nrmDualEqu, nrmDualBou);
659
+ double sc;
660
+ double sd;
661
+ double nrmDualBou;
662
+ double nrmDualEqu;
663
+ if (!it.compute_sc_sd (sc, sd, nrmDualEqu, nrmDualBou)) {
664
+ return false ;
665
+ }
661
666
662
- nlp->log ->printf (hovScalars , " nrmOneDualEqu %g nrmOneDualBo %g\n " , nrmDualEqu, nrmDualBou);
667
+ nlp->log ->printf (hovWarning , " nrmOneDualEqu %g nrmOneDualBo %g\n " , nrmDualEqu, nrmDualBou);
663
668
if (nrmDualBou > 1e+10 ) {
664
669
nlp->log ->printf (hovWarning,
665
670
" Unusually large bound dual variables (norm1=%g) occured, "
@@ -684,8 +689,11 @@ bool hiopAlgFilterIPMBase::evalNlpAndLogErrors(const hiopIterate& it,
684
689
}
685
690
686
691
// scaling factors
687
- double sd = fmax (p_smax, (nrmDualBou + nrmDualEqu) / (n + m)) / p_smax;
688
- double sc = n == 0 ? 0 : fmax (p_smax, nrmDualBou / n) / p_smax;
692
+ // double sd = fmax(p_smax, (nrmDualBou + nrmDualEqu) / (n + m)) / p_smax;
693
+ // double sc = n == 0 ? 0 : fmax(p_smax, nrmDualBou / n) / p_smax;
694
+
695
+ sd = fmax (p_smax, sd) / p_smax;
696
+ sc = n == 0 ? 0 : fmax (p_smax, sc) / p_smax;
689
697
690
698
sd = fmin (sd, 1e+8 );
691
699
sc = fmin (sc, 1e+8 );
@@ -696,7 +704,7 @@ bool hiopAlgFilterIPMBase::evalNlpAndLogErrors(const hiopIterate& it,
696
704
// finally, the scaled nlp error
697
705
nlpoverall = fmax (nlpoptim / sd, fmax (cons_violation, nlpcomplem / sc));
698
706
699
- nlp->log ->printf (hovScalars ,
707
+ nlp->log ->printf (hovWarning ,
700
708
" nlpoverall %g nloptim %g sd %g nlpfeas %g nlpcomplem %g sc %g cons_violation %g\n " ,
701
709
nlpoverall,
702
710
nlpoptim,
@@ -731,13 +739,15 @@ bool hiopAlgFilterIPMBase::evalNlpAndLogErrors2(const hiopIterate& it,
731
739
nlp->runStats .tmSolverInternal .start ();
732
740
733
741
size_type n = nlp->n_complem (), m = nlp->m ();
734
- // the one norms
735
- // double nrmDualBou=it.normOneOfBoundDuals();
736
- // double nrmDualEqu=it.normOneOfEqualityDuals();
737
- double nrmDualBou, nrmDualEqu;
738
- it.normOneOfDuals (nrmDualEqu, nrmDualBou);
742
+ double sc;
743
+ double sd;
744
+ double nrmDualBou;
745
+ double nrmDualEqu;
746
+ if (!it.compute_sc_sd (sc, sd, nrmDualEqu, nrmDualBou)) {
747
+ return false ;
748
+ }
739
749
740
- nlp->log ->printf (hovScalars , " nrmOneDualEqu %g nrmOneDualBo %g\n " , nrmDualEqu, nrmDualBou);
750
+ nlp->log ->printf (hovWarning , " nrmOneDualEqu %g nrmOneDualBo %g\n " , nrmDualEqu, nrmDualBou);
741
751
if (nrmDualBou > 1e+10 ) {
742
752
nlp->log ->printf (hovWarning,
743
753
" Unusually large bound dual variables (norm1=%g) occured, "
@@ -762,18 +772,21 @@ bool hiopAlgFilterIPMBase::evalNlpAndLogErrors2(const hiopIterate& it,
762
772
}
763
773
764
774
// scaling factors
765
- // sd = max { p_smax, ||zl||_H + ||zu||_H + (||vl||_1 + ||vu||_1)/m } /p_smax
766
- // sc = max { p_smax, ||zl||_H + ||zu||_H } /p_smax
775
+ // sd = max { p_smax, ||zl||_M + ||zu||_M + (||vl||_1 + ||vu||_1)/m } /p_smax
776
+ // sc = max { p_smax, ||zl||_M + ||zu||_M } /p_smax
767
777
// nlpoptim = ||gradf + Jc'*yc + Jd'*Jd - M*zl - M*zu||_Hinv
768
778
// ||yd+vl-vu||_inf
769
779
// nlpfeas = ||crhs- c||_inf
770
780
// ||drs- d||_inf
771
- // ||x-sxl-xl||_H
772
- // ||x-sxu+xu||_H
781
+ // ||x-sxl-xl||_inf
782
+ // ||x-sxu+xu||_inf
773
783
// ||d-sdl-dl||
774
784
//
775
- double sd = fmax (p_smax, (nrmDualBou + nrmDualEqu) / (n + m)) / p_smax;
776
- double sc = n == 0 ? 0 : fmax (p_smax, nrmDualBou / n) / p_smax;
785
+ // double sd = fmax(p_smax, (nrmDualBou + nrmDualEqu) / (n + m)) / p_smax;
786
+ // double sc = n == 0 ? 0 : fmax(p_smax, nrmDualBou / n) / p_smax;
787
+
788
+ sd = fmax (p_smax, sd) / p_smax;
789
+ sc = n == 0 ? 0 : fmax (p_smax, sc) / p_smax;
777
790
778
791
sd = fmin (sd, 1e+8 );
779
792
sc = fmin (sc, 1e+8 );
@@ -784,7 +797,7 @@ bool hiopAlgFilterIPMBase::evalNlpAndLogErrors2(const hiopIterate& it,
784
797
// finally, the scaled nlp error
785
798
nlpoverall = fmax (nlpoptim / sd, fmax (cons_violation, nlpcomplem / sc));
786
799
787
- nlp->log ->printf (hovScalars ,
800
+ nlp->log ->printf (hovWarning ,
788
801
" nlpoverall %g nloptim %g sd %g nlpfeas %g nlpcomplem %g sc %g cons_violation %g\n " ,
789
802
nlpoverall,
790
803
nlpoptim,
@@ -1159,7 +1172,7 @@ hiopSolveStatus hiopAlgFilterIPMQuasiNewton::run()
1159
1172
solver_status_ = NlpSolve_Pending;
1160
1173
1161
1174
while (true ) {
1162
- bret = evalNlpAndLogErrors (*it_curr,
1175
+ bret = evalNlpAndLogErrors2 (*it_curr,
1163
1176
*resid,
1164
1177
_mu,
1165
1178
_err_nlp_optim,
@@ -1252,7 +1265,7 @@ hiopSolveStatus hiopAlgFilterIPMQuasiNewton::run()
1252
1265
1253
1266
// ! should perform only a partial update since NLP didn't change
1254
1267
resid->update (*it_curr, _f_nlp, *_c, *_d, *_grad_f, *_Jac_c, *_Jac_d, *logbar);
1255
- bret = evalNlpAndLogErrors (*it_curr,
1268
+ bret = evalNlpAndLogErrors2 (*it_curr,
1256
1269
*resid,
1257
1270
_mu,
1258
1271
_err_nlp_optim,
0 commit comments