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.linear.Array2DRowRealMatrix;
20  import org.hipparchus.linear.ArrayRealVector;
21  import org.hipparchus.linear.RealMatrix;
22  import org.hipparchus.linear.RealVector;
23  
24  public class HockSchittkowskiFunction78 extends TwiceDifferentiableFunction {
25  
26      @Override
27      public int dim() {
28          return 5;
29      }
30  
31      @Override
32      public double value(RealVector x) {
33          double x1 = x.getEntry(0);
34          double x2 = x.getEntry(1);
35          double x3 = x.getEntry(2);
36          double x4 = x.getEntry(3);
37          double x5 = x.getEntry(4);
38          //obj = x[1]*x[2]*x[3]*x[4]*x[5]
39          //min 1 + x[1] + x[2] + x[3] + x[4]
40          return x1*x2*x3*x4*x5;
41      }
42  
43      @Override
44      public RealVector gradient(RealVector x) {
45          RealVector grad=new ArrayRealVector(x.getDimension());
46          double x1 = x.getEntry(0);
47          double x2 = x.getEntry(1);
48          double x3 = x.getEntry(2);
49          double x4 = x.getEntry(3);
50          double x5 = x.getEntry(4);
51  
52          grad.setEntry(0,x2*x3*x4*x5);
53           grad.setEntry(1,x1*x3*x4*x5);
54            grad.setEntry(2,x1*x2*x4*x5);
55             grad.setEntry(3,x1*x2*x3*x5);
56              grad.setEntry(4,x1*x2*x3*x4);
57  
58  
59          return grad;
60      }
61  
62      @Override
63      public RealMatrix hessian(RealVector x) {
64          RealMatrix h=new Array2DRowRealMatrix(x.getDimension(),x.getDimension());
65          h.setEntry(0,0, 0);
66          h.setEntry(0,1, 0);
67          h.setEntry(0,2, 0);
68          h.setEntry(0,3, 0);
69  
70  
71          h.setEntry(1,0, 0);
72          h.setEntry(1,1, 0);
73          h.setEntry(1,2, 0);
74          h.setEntry(1,3, 0);
75  
76  
77          h.setEntry(2,0, 0);
78          h.setEntry(2,1, 0);
79          h.setEntry(2,2,0);
80          h.setEntry(2,3, 0);
81  
82  
83          h.setEntry(3,0, 0);
84          h.setEntry(3,1, 0);
85          h.setEntry(3,2, 0.0);
86          h.setEntry(3,3, 0);
87  
88  
89  
90  
91  
92          return h;
93      }
94  
95  }