|
|
|
@ -1,7 +1,7 @@ |
|
|
|
package net.pokeranalytics.android.calculus |
|
|
|
package net.pokeranalytics.android.calculus |
|
|
|
|
|
|
|
|
|
|
|
import net.pokeranalytics.android.calculus.Stat.* |
|
|
|
import net.pokeranalytics.android.calculus.Stat.* |
|
|
|
import net.pokeranalytics.android.model.realm.Session |
|
|
|
import net.pokeranalytics.android.calculus.interfaces.Computable |
|
|
|
import net.pokeranalytics.android.model.realm.SessionSet |
|
|
|
import net.pokeranalytics.android.model.realm.SessionSet |
|
|
|
import timber.log.Timber |
|
|
|
import timber.log.Timber |
|
|
|
import java.util.* |
|
|
|
import java.util.* |
|
|
|
@ -66,7 +66,7 @@ class Calculator { |
|
|
|
/** |
|
|
|
/** |
|
|
|
* Computes all stats for list of Session sessionGroup |
|
|
|
* Computes all stats for list of Session sessionGroup |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
fun computeGroups(groups: List<SessionGroup>, options: Options): List<ComputedResults> { |
|
|
|
fun computeGroups(groups: List<ComputableGroup>, options: Options): List<ComputedResults> { |
|
|
|
|
|
|
|
|
|
|
|
val computedResults = mutableListOf<ComputedResults>() |
|
|
|
val computedResults = mutableListOf<ComputedResults>() |
|
|
|
groups.forEach { group -> |
|
|
|
groups.forEach { group -> |
|
|
|
@ -75,7 +75,7 @@ class Calculator { |
|
|
|
val results: ComputedResults = Calculator.compute(group, options = options) |
|
|
|
val results: ComputedResults = Calculator.compute(group, options = options) |
|
|
|
|
|
|
|
|
|
|
|
// Computes the compared sessionGroup if existing |
|
|
|
// Computes the compared sessionGroup if existing |
|
|
|
val comparedGroup = group.comparedSessions |
|
|
|
val comparedGroup = group.comparedComputables |
|
|
|
if (comparedGroup != null) { |
|
|
|
if (comparedGroup != null) { |
|
|
|
val comparedResults = Calculator.compute(comparedGroup, options = options) |
|
|
|
val comparedResults = Calculator.compute(comparedGroup, options = options) |
|
|
|
group.comparedComputedResults = comparedResults |
|
|
|
group.comparedComputedResults = comparedResults |
|
|
|
@ -94,13 +94,13 @@ class Calculator { |
|
|
|
return computedResults |
|
|
|
return computedResults |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// fun compute(sessionGroup: SessionGroup, options: Options): ComputedResults { |
|
|
|
// fun compute(sessionGroup: ComputableGroup, options: Options): ComputedResults { |
|
|
|
// |
|
|
|
// |
|
|
|
// var sum: Double = 0.0 |
|
|
|
// var sum: Double = 0.0 |
|
|
|
// val sessions: List<SessionInterface> = sessionGroup.sessions |
|
|
|
// val computables: List<SessionInterface> = sessionGroup.computables |
|
|
|
// val results: ComputedResults = ComputedResults(sessionGroup) |
|
|
|
// val results: ComputedResults = ComputedResults(sessionGroup) |
|
|
|
// |
|
|
|
// |
|
|
|
// sessions.forEach { s -> |
|
|
|
// computables.forEach { s -> |
|
|
|
// sum += s.ratedNet |
|
|
|
// sum += s.ratedNet |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// |
|
|
|
@ -117,34 +117,34 @@ class Calculator { |
|
|
|
/** |
|
|
|
/** |
|
|
|
* Computes stats for a SessionSet |
|
|
|
* Computes stats for a SessionSet |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
fun compute(sessionGroup: SessionGroup, options: Options): ComputedResults { |
|
|
|
fun compute(computableGroup: ComputableGroup, options: Options): ComputedResults { |
|
|
|
|
|
|
|
|
|
|
|
Timber.d(">>>> Start computing group ${sessionGroup.name}, ${sessionGroup.sessions.size} sessions") |
|
|
|
Timber.d(">>>> Start computing group ${computableGroup.name}, ${computableGroup.computables.size} computables") |
|
|
|
|
|
|
|
|
|
|
|
val sessions: List<Session> = sessionGroup.sessions |
|
|
|
val computables: List<Computable> = computableGroup.computables |
|
|
|
val sessionSets = sessionGroup.sessions.mapNotNull { it.sessionSet }.toHashSet() |
|
|
|
val sessionSets = computableGroup.computables.mapNotNull { it.sessionSet }.toHashSet() |
|
|
|
|
|
|
|
|
|
|
|
val results: ComputedResults = ComputedResults(sessionGroup) |
|
|
|
val results: ComputedResults = ComputedResults(computableGroup) |
|
|
|
|
|
|
|
|
|
|
|
var sum: Double = 0.0 |
|
|
|
var sum: Double = 0.0 |
|
|
|
var totalHands: Double = 0.0 |
|
|
|
var totalHands: Double = 0.0 |
|
|
|
var bbSum: Double = 0.0 |
|
|
|
var bbSum: Double = 0.0 |
|
|
|
var bbSessionCount: Int = 0 |
|
|
|
var bbSessionCount: Int = 0 |
|
|
|
var winningSessionCount: Int = 0 // sessions.filter { it.value >= 0.0 }.size |
|
|
|
var winningSessionCount: Int = 0 // computables.filter { it.value >= 0.0 }.size |
|
|
|
var totalBuyin = 0.0 |
|
|
|
var totalBuyin = 0.0 |
|
|
|
|
|
|
|
|
|
|
|
// Compute for each session |
|
|
|
// Compute for each session |
|
|
|
var index: Int = 0 |
|
|
|
var index: Int = 0 |
|
|
|
sessions.forEach { s -> |
|
|
|
computables.forEach { s -> |
|
|
|
index++; |
|
|
|
index++; |
|
|
|
|
|
|
|
|
|
|
|
val result = s.result!! // ok to crash to see problems |
|
|
|
// val result = s.result!! // ok to crash to see problems |
|
|
|
|
|
|
|
|
|
|
|
sum += result.ratedNet |
|
|
|
sum += s.ratedNet |
|
|
|
bbSum += s.bbNetResult |
|
|
|
bbSum += s.bbNetResult |
|
|
|
bbSessionCount += s.hasBigBlind |
|
|
|
bbSessionCount += s.hasBigBlind |
|
|
|
winningSessionCount = result.isPositive |
|
|
|
winningSessionCount += s.isPositive |
|
|
|
totalBuyin += s.buyin |
|
|
|
totalBuyin += s.ratedBuyin |
|
|
|
totalHands += s.estimatedHands |
|
|
|
totalHands += s.estimatedHands |
|
|
|
|
|
|
|
|
|
|
|
when (options.evolutionValues) { |
|
|
|
when (options.evolutionValues) { |
|
|
|
@ -212,10 +212,10 @@ class Calculator { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var average = 0.0 |
|
|
|
var average = 0.0 |
|
|
|
if (sessions.size > 0) { |
|
|
|
if (computables.size > 0) { |
|
|
|
average = sum / sessions.size.toDouble() |
|
|
|
average = sum / computables.size.toDouble() |
|
|
|
val winRatio = winningSessionCount.toDouble() / sessions.size.toDouble() |
|
|
|
val winRatio = winningSessionCount.toDouble() / computables.size.toDouble() |
|
|
|
val avgBuyin = totalBuyin / sessions.size |
|
|
|
val avgBuyin = totalBuyin / computables.size |
|
|
|
|
|
|
|
|
|
|
|
results.addStats( |
|
|
|
results.addStats( |
|
|
|
setOf( |
|
|
|
setOf( |
|
|
|
@ -242,7 +242,7 @@ class Calculator { |
|
|
|
ComputedStat(NETRESULT, sum), |
|
|
|
ComputedStat(NETRESULT, sum), |
|
|
|
ComputedStat(DURATION, duration), |
|
|
|
ComputedStat(DURATION, duration), |
|
|
|
ComputedStat(NUMBER_OF_SETS, sessionSets.size.toDouble()), |
|
|
|
ComputedStat(NUMBER_OF_SETS, sessionSets.size.toDouble()), |
|
|
|
ComputedStat(NUMBER_OF_GAMES, sessions.size.toDouble()), |
|
|
|
ComputedStat(NUMBER_OF_GAMES, computables.size.toDouble()), |
|
|
|
ComputedStat(HOURLY_RATE_BB, bbSum / duration), |
|
|
|
ComputedStat(HOURLY_RATE_BB, bbSum / duration), |
|
|
|
ComputedStat(AVERAGE_NET_BB, bbSum / bbSessionCount), |
|
|
|
ComputedStat(AVERAGE_NET_BB, bbSum / bbSessionCount), |
|
|
|
ComputedStat(HANDS_PLAYED, totalHands) |
|
|
|
ComputedStat(HANDS_PLAYED, totalHands) |
|
|
|
@ -268,12 +268,12 @@ class Calculator { |
|
|
|
// Session |
|
|
|
// Session |
|
|
|
var stdSum: Double = 0.0 |
|
|
|
var stdSum: Double = 0.0 |
|
|
|
var stdBBper100HandsSum: Double = 0.0 |
|
|
|
var stdBBper100HandsSum: Double = 0.0 |
|
|
|
sessions.forEach { session -> |
|
|
|
computables.forEach { session -> |
|
|
|
stdSum += Math.pow(session.result!!.ratedNet - average, 2.0) |
|
|
|
stdSum += Math.pow(session.ratedNet - average, 2.0) |
|
|
|
stdBBper100HandsSum += Math.pow(session.bbPer100Hands - bbPer100Hands, 2.0) |
|
|
|
stdBBper100HandsSum += Math.pow(session.bbPer100Hands - bbPer100Hands, 2.0) |
|
|
|
} |
|
|
|
} |
|
|
|
val standardDeviation: Double = Math.sqrt(stdSum / sessions.size) |
|
|
|
val standardDeviation: Double = Math.sqrt(stdSum / computables.size) |
|
|
|
val standardDeviationBBper100Hands: Double = Math.sqrt(stdBBper100HandsSum / sessions.size) |
|
|
|
val standardDeviationBBper100Hands: Double = Math.sqrt(stdBBper100HandsSum / computables.size) |
|
|
|
|
|
|
|
|
|
|
|
// Session Set |
|
|
|
// Session Set |
|
|
|
var hourlyStdSum: Double = 0.0 |
|
|
|
var hourlyStdSum: Double = 0.0 |
|
|
|
|