Skip to content

Commit ae2b334

Browse files
committed
Add support to start binned search from a given initial approximation
1 parent c7aeff7 commit ae2b334

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

src/main/scala/com/github/mbuzdalov/oll/BestBinnedDoubleLambda.scala

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,26 @@ object BestBinnedDoubleLambda {
7373
})
7474

7575
val bins = RunGivenLambdas.defaultBins(n)
76-
val lambdaTable = data.drop(1).map(line => line.split(',')(1).toDouble).reverse
76+
println(s"Bins: ${bins.mkString(", ")}")
7777
val rawLambdaValues = new Array[Double](2 * (bins.length - 1))
78-
for (i <- 0 until bins.length - 1) {
79-
val sum = lambdaTable.indices.filter(j => bins(i) <= j && j < bins(i + 1)).map(lambdaTable).sum
80-
val lambda = if (i == 0) 1 else sum / (bins(i + 1) - bins(i))
81-
lambdaToParts(lambda, rawLambdaValues, i, n)
78+
79+
cmd.getStringOption("initial-value") match {
80+
case Some(initialValueStr) =>
81+
val tokenizer = new ju.StringTokenizer(initialValueStr, ",")
82+
if (tokenizer.countTokens() != bins.length - 1)
83+
throw new IllegalArgumentException(s"Number of tokens in initial-value should equal ${bins.length - 1}")
84+
for (i <- 0 until bins.length - 1) {
85+
val lambda = tokenizer.nextToken().toDouble
86+
lambdaToParts(lambda, rawLambdaValues, i, n)
87+
}
88+
case None =>
89+
val lambdaTable = data.drop(1).map(line => line.split(',')(1).toDouble).reverse
90+
for (i <- 0 until bins.length - 1) {
91+
val sum = lambdaTable.indices.filter(j => bins(i) <= j && j < bins(i + 1)).map(lambdaTable).sum
92+
val lambda = if (i == 0) 1 else sum / (bins(i + 1) - bins(i))
93+
lambdaToParts(lambda, rawLambdaValues, i, n)
94+
}
8295
}
83-
println(s"Bins: ${bins.mkString(", ")}")
8496

8597
val pool = new ScheduledThreadPoolExecutor(Runtime.getRuntime.availableProcessors())
8698
val (result, fitness) = NumericMinimization.optimizeDistributionBySeparableCMAES(

0 commit comments

Comments
 (0)