1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.hipparchus.optim.nonlinear.scalar;
23
24 import java.util.ArrayList;
25 import java.util.Comparator;
26 import java.util.List;
27
28 import org.hipparchus.exception.MathIllegalArgumentException;
29 import org.hipparchus.exception.NullArgumentException;
30 import org.hipparchus.optim.BaseMultiStartMultivariateOptimizer;
31 import org.hipparchus.optim.PointValuePair;
32 import org.hipparchus.random.RandomVectorGenerator;
33
34
35
36
37
38
39
40
41 public class MultiStartMultivariateOptimizer
42 extends BaseMultiStartMultivariateOptimizer<PointValuePair> {
43
44 private final MultivariateOptimizer optimizer;
45
46 private final List<PointValuePair> optima;
47
48
49
50
51
52
53
54
55
56
57
58
59
60 public MultiStartMultivariateOptimizer(final MultivariateOptimizer optimizer,
61 final int starts,
62 final RandomVectorGenerator generator)
63 throws MathIllegalArgumentException, NullArgumentException {
64 super(optimizer, starts, generator);
65 this.optimizer = optimizer;
66 this.optima = new ArrayList<>();
67 }
68
69
70
71
72 @Override
73 public PointValuePair[] getOptima() {
74 optima.sort(getPairComparator());
75 return optima.toArray(new PointValuePair[0]);
76 }
77
78
79
80
81 @Override
82 protected void store(PointValuePair optimum) {
83 optima.add(optimum);
84 }
85
86
87
88
89 @Override
90 protected void clear() {
91 optima.clear();
92 }
93
94
95
96
97 private Comparator<PointValuePair> getPairComparator() {
98 return new Comparator<PointValuePair>() {
99
100 @Override
101 public int compare(final PointValuePair o1,
102 final PointValuePair o2) {
103 if (o1 == null) {
104 return (o2 == null) ? 0 : 1;
105 } else if (o2 == null) {
106 return -1;
107 }
108 final double v1 = o1.getValue();
109 final double v2 = o2.getValue();
110 return (optimizer.getGoalType() == GoalType.MINIMIZE) ?
111 Double.compare(v1, v2) : Double.compare(v2, v1);
112 }
113 };
114 }
115 }