View Javadoc
1   /*
2    * Licensed to the Hipparchus project under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The Hipparchus project licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.hipparchus.optim.nonlinear.vector.constrained;
18  
19  import org.hipparchus.optim.OptimizationData;
20  
21  /** Parameter for SQP Algorithm.
22   * @since 3.1
23   */
24  public class SQPOption implements OptimizationData {
25  
26      /** Default convergence criteria. */
27      public static final int DEFAULT_CONV_CRITERIA = 1;
28  
29      /** Default tolerance for convergence and active constraint. */
30      public static final double DEFAULT_EPSILON = 1.0e-9;//>0
31  
32      /** Default weight for augmented QP subproblem. */
33      public static final double DEFAULT_RHO = 100.0;//rho>1
34  
35      /** Default max value admitted for additional variable in QP subproblem. */
36      public static final  double DEFAULT_SIGMA_MAX = 0.90;//0<sigma<1
37  
38      /** Default max iteration admitted for QP subproblem. */
39      public static final  int DEFAULT_QP_MAX_LOOP = 4;
40  
41      /** Default parameter for evaluation of Armijo condition for descend direction. */
42      public static final  double DEFAULT_MU = 0.1;//[0,0.5]
43  
44      /** Default parameter for quadratic line search. */
45      public static final  double DEFAULT_B = 0.1;//[0;1]
46  
47      /** Default flag for using BFGS update formula. */
48      public static final  boolean DEFAULT_USE_FUNCTION_HESSIAN = false;
49  
50      /** Default max iteration before reset hessian. */
51      public static final  int DEFAULT_MAX_LINE_SEARCH_ITERATION = 20;
52  
53      /** Convergence criteria*/
54      private int convCriteria;
55  
56      /** Tolerance for convergence and active constraint evaluation. */
57      private double eps;
58  
59      /** Weight for augmented QP subproblem. */
60      private double rhoCons;
61  
62       /** Max value admitted for the solution of the additional variable in QP subproblem. */
63      private double sigmaMax;
64  
65      /** Max iteration admitted for QP subproblem evaluation.
66       * (over this threshold the descend direction will be approximated using the merit function).
67       */
68      private int qpMaxLoop;
69  
70      /** Parameter for evaluation of Armijo condition for descend direction.
71       * (fhi(alfa)-fhi(0)<=mu * alfa * fhi'(0)) */
72      private double mu;
73  
74      /** Parameter for quadratic line search. */
75      private double b;
76  
77      /** Max Iteration for the line search. */
78      private int maxLineSearchIteration;
79  
80      /** Enable or Disable using direct the function Hessian. */
81      private boolean useFunHessian;
82  
83      /** Simple constructor.
84       * <p>
85       * This constructor uses all defaults values.
86       * </p>
87       */
88      public SQPOption() {
89          this.convCriteria           = DEFAULT_CONV_CRITERIA;
90          this.eps                    = DEFAULT_EPSILON;
91          this.rhoCons                = DEFAULT_RHO;
92          this.sigmaMax               = DEFAULT_SIGMA_MAX;
93          this.qpMaxLoop              = DEFAULT_QP_MAX_LOOP;
94          this.mu                     = DEFAULT_MU;
95          this.b                      = DEFAULT_B;
96          this.maxLineSearchIteration = DEFAULT_MAX_LINE_SEARCH_ITERATION;
97          this.useFunHessian          = DEFAULT_USE_FUNCTION_HESSIAN;
98      }
99  
100     /** Set convergence criteria.
101      * @param convCriteria convergence criteria
102      */
103     public void setConvCriteria(final int convCriteria) {
104         this.convCriteria = convCriteria;
105     }
106 
107     /** Get convergence criteria.
108      * @return convergence criteria
109      */
110     public int getConvCriteria() {
111         return convCriteria;
112     }
113 
114     /** Set tolerance for convergence and active constraint evaluation.
115      * @param eps tolerance for convergence and active constraint evaluation
116      */
117     public void setEps(final double eps) {
118         this.eps = eps;
119     }
120 
121     /** Get tolerance for convergence and active constraint evaluation.
122      * @return tolerance for convergence and active constraint evaluation
123      */
124     public double getEps() {
125         return eps;
126     }
127 
128     /** Set weight for augmented QP subproblem.
129      * @param rhoCons weight for augmented QP subproblem
130      */
131     public void setRhoCons(final double rhoCons) {
132         this.rhoCons = rhoCons;
133     }
134 
135     /** Get weight for augmented QP subproblem.
136      * @return weight for augmented QP subproblem
137      */
138     public double getRhoCons() {
139         return rhoCons;
140     }
141 
142     /** Set max value admitted for the solution of the additional variable in QP subproblem.
143      * @param sigmaMax max value admitted for the solution of the additional variable in QP subproblem
144      */
145     public void setSigmaMax(final double sigmaMax) {
146         this.sigmaMax = sigmaMax;
147     }
148 
149     /** Get max value admitted for the solution of the additional variable in QP subproblem.
150      * @return max value admitted for the solution of the additional variable in QP subproblem
151      */
152     public double getSigmaMax() {
153         return sigmaMax;
154     }
155 
156     /** Set max iteration admitted for QP subproblem evaluation.
157      * @param qpMaxLoop max iteration admitted for QP subproblem evaluation
158      */
159     public void setQpMaxLoop(final int qpMaxLoop) {
160         this.qpMaxLoop = qpMaxLoop;
161     }
162 
163     /** Get max iteration admitted for QP subproblem evaluation.
164      * @return max iteration admitted for QP subproblem evaluation
165      */
166     public int getQpMaxLoop() {
167         return qpMaxLoop;
168     }
169 
170     /** Set parameter for evaluation of Armijo condition for descend direction.
171      * @param mu parameter for evaluation of Armijo condition for descend direction
172      */
173     public void setMu(final double mu) {
174         this.mu  = mu;
175     }
176 
177     /** Get parameter for evaluation of Armijo condition for descend direction.
178      * @return parameter for evaluation of Armijo condition for descend direction
179      */
180     public double getMu() {
181         return mu;
182     }
183 
184     /** Set parameter for quadratic line search.
185      * @param b parameter for quadratic line search
186      */
187     public void setB(final double b) {
188         this.b = b;
189     }
190 
191     /** Get parameter for quadratic line search.
192      * @return parameter for quadratic line search
193      */
194     public double getB() {
195         return b;
196     }
197 
198     /** Set max Iteration for the line search
199      * @param maxLineSearchIteration max Iteration for the line search
200      */
201     public void setMaxLineSearchIteration(final int maxLineSearchIteration) {
202         this.maxLineSearchIteration = maxLineSearchIteration;
203     }
204 
205     /** Get max Iteration for the line search
206      * @return max Iteration for the line search
207      */
208     public int getMaxLineSearchIteration() {
209         return maxLineSearchIteration;
210     }
211 
212     /** Enable or Disable using direct the function Hessian.
213      * @param useFunHessian enable or Disable using direct the function Hessian
214      */
215     public void setUseFunHessian(final boolean useFunHessian) {
216         this.useFunHessian = useFunHessian;
217     }
218 
219     /** Check if using direct the function Hessian is enabled or disabled.
220      * @return true if using direct the function Hessian is enabled
221      */
222     public boolean useFunHessian() {
223         return useFunHessian;
224     }
225 
226 }