@@ -29,9 +29,9 @@ public <T> Decision<T> chooseFrom(List<T> variants) {
2929
3030 Map allGivens = decisionModel .combinedGivens (givens );
3131 List scores = decisionModel .scoreInternal (variants , allGivens );
32- Object best = ModelUtils .topScoringVariant (variants , scores );
32+ T best = ( T ) ModelUtils .topScoringVariant (variants , scores );
3333
34- Decision decision = new Decision (decisionModel );
34+ Decision < T > decision = new Decision (decisionModel );
3535 decision .variants = variants ;
3636 decision .best = best ;
3737 decision .givens = allGivens ;
@@ -74,24 +74,14 @@ public <T> Decision<T> chooseFirst(List<T> variants) {
7474 return chooseFrom (variants , ModelUtils .generateDescendingGaussians (variants .size ()));
7575 }
7676
77+ public <T > T first (List <T > variants ) {
78+ return chooseFirst (variants ).get ();
79+ }
80+
7781 /**
7882 * @see ai.improve.DecisionModel#first(Object...)
7983 */
80- public Object first (Object ... variants ) {
81- if (variants == null ) {
82- throw new IllegalArgumentException ("variants can't be null" );
83- }
84- if (variants .length <= 0 ) {
85- throw new IllegalArgumentException ("first() expects at least one variant" );
86- }
87-
88- if (variants .length == 1 ) {
89- if (!(variants [0 ] instanceof List ) || ((List )variants [0 ]).size () <= 0 ) {
90- throw new IllegalArgumentException ("If only one argument, it must be a non-empty list." );
91- }
92- return chooseFirst ((List )variants [0 ]).get ();
93- }
94-
84+ public <T > T first (T ... variants ) {
9585 return chooseFirst (Arrays .asList (variants )).get ();
9686 }
9787
@@ -108,49 +98,47 @@ public <T> Decision<T> chooseRandom(List<T> variants) {
10898 /**
10999 * @see ai.improve.DecisionModel#random(Object...)
110100 */
111- public Object random (Object ... variants ) {
112- if (variants == null ) {
113- throw new IllegalArgumentException ("variants can't be null" );
114- }
115- if (variants .length <= 0 ) {
116- throw new IllegalArgumentException ("random() expects at least one variant" );
117- }
118- if (variants .length == 1 ) {
119- if (!(variants [0 ] instanceof List ) || ((List )variants [0 ]).size () <= 0 ) {
120- throw new IllegalArgumentException ("If only one argument, it must be a non-empty list." );
121- }
122- return chooseRandom ((List )variants [0 ]).get ();
123- }
101+ public <T > T random (T ... variants ) {
124102 return chooseRandom (Arrays .asList (variants )).get ();
125103 }
126104
105+ public <T > T random (List <T > variants ) {
106+ return chooseRandom (variants ).get ();
107+ }
108+
127109 /**
128- * @see ai.improve.DecisionModel#chooseMultiVariate (Map)
110+ * @see ai.improve.DecisionModel#chooseMultivariate (Map)
129111 */
130- public Decision chooseMultiVariate (Map <String , ?> variants ) {
112+ public Decision < Map < String , ?>> chooseMultivariate (Map <String , ?> variants ) {
131113 if (variants == null || variants .size () <= 0 ) {
132114 return chooseFrom (null );
133115 }
134116
135- List allKeys = new ArrayList ();
117+ List < String > allKeys = new ArrayList ();
136118
137119 List <List > categories = new ArrayList ();
138120 for (Map .Entry <String , ?> entry : variants .entrySet ()) {
139121 if (entry .getValue () instanceof List ) {
140- categories .add ((List )entry .getValue ());
122+ if (((List )entry .getValue ()).size () > 0 ) {
123+ categories .add ((List ) entry .getValue ());
124+ allKeys .add (entry .getKey ());
125+ }
141126 } else {
142127 categories .add (Arrays .asList (entry .getValue ()));
128+ allKeys .add (entry .getKey ());
143129 }
144- allKeys .add (entry .getKey ());
130+ }
131+ if (categories .size () <= 0 ) {
132+ throw new IllegalArgumentException ("valueMap values are all empty list!" );
145133 }
146134
147- List <Map > combinations = new ArrayList ();
135+ List <Map < String , ?> > combinations = new ArrayList ();
148136 for (int i = 0 ; i < categories .size (); ++i ) {
149137 List category = categories .get (i );
150- List <Map > newCombinations = new ArrayList ();
138+ List <Map < String , ?> > newCombinations = new ArrayList ();
151139 for (int m = 0 ; m < category .size (); ++m ) {
152140 if (combinations .size () == 0 ) {
153- Map newVariant = new HashMap ();
141+ Map < String , Object > newVariant = new HashMap ();
154142 newVariant .put (allKeys .get (i ), category .get (m ));
155143 newCombinations .add (newVariant );
156144 } else {
@@ -167,6 +155,10 @@ public Decision chooseMultiVariate(Map<String, ?> variants) {
167155 return chooseFrom (combinations );
168156 }
169157
158+ public Map <String , ?> optimize (Map <String , ?> variants ) {
159+ return chooseMultivariate (variants ).get ();
160+ }
161+
170162 /**
171163 * @see ai.improve.DecisionModel#score(List)
172164 */
@@ -178,20 +170,14 @@ public <T> List<Double> score(List<T> variants) {
178170 /**
179171 * @see ai.improve.DecisionModel#which(Object...)
180172 */
181- public Object which (Object ... variants ) {
173+ public < T > T which (T ... variants ) {
182174 if (variants == null || variants .length <= 0 ) {
183175 throw new IllegalArgumentException ("should at least provide one variant." );
184176 }
185-
186- if (variants .length == 1 ) {
187- if (variants [0 ] instanceof List ) {
188- return chooseFrom ((List )variants [0 ]).get ();
189- } else if (variants [0 ] instanceof Map ) {
190- return chooseMultiVariate ((Map )variants [0 ]).get ();
191- }
192- throw new IllegalArgumentException ("If only one argument, it must be a List or Map" );
193- }
194-
195177 return chooseFrom (Arrays .asList (variants )).get ();
196178 }
179+
180+ public <T > T which (List <T > variants ) {
181+ return chooseFrom (variants ).get ();
182+ }
197183}
0 commit comments