Merge branch 'master' of gitlab.com:stax-river/poker-analytics

feature/top10
Aurelien Hubert 7 years ago
commit 8358fc4c07
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 67
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  3. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt

@ -92,7 +92,7 @@ class PokerAnalyticsApplication : Application() {
val sessions = realm.where<Session>().findAll() val sessions = realm.where<Session>().findAll()
if (sessions.size < 10) { if (sessions.size < 10) {
val numberOfSessions = 200 val numberOfSessions = 100
Timber.d("*** Start creating ${numberOfSessions} fake sessions...") Timber.d("*** Start creating ${numberOfSessions} fake sessions...")
val s = Date() val s = Date()

@ -41,7 +41,7 @@ class Calculator {
/** /**
* This function determines whether the standard deviation should be computed * This function determines whether the standard deviation should be computed
*/ */
fun shouldComputeStandardDeviation() : Boolean { fun shouldComputeStandardDeviation(): Boolean {
this.displayedStats.forEach { stat -> this.displayedStats.forEach { stat ->
return when (stat) { return when (stat) {
STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> true STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> true
@ -86,10 +86,30 @@ class Calculator {
return computedResults return computedResults
} }
// fun compute(sessionGroup: SessionGroup, options: Options): ComputedResults {
//
// var sum: Double = 0.0
// val sessions: List<SessionInterface> = sessionGroup.sessions
// val results: ComputedResults = ComputedResults(sessionGroup)
//
// sessions.forEach { s ->
// sum += s.ratedNet
// }
//
// results.addStats(
// setOf(
// ComputedStat(NETRESULT, sum)
// )
// )
//
// return results
// }
/** /**
* Computes stats for a SessionSet * Computes stats for a SessionSet
*/ */
fun compute(sessionGroup: SessionGroup, options: Options) : ComputedResults { fun compute(sessionGroup: SessionGroup, options: Options): ComputedResults {
Timber.d(">>>> Start computing group ${sessionGroup.name}, ${sessionGroup.sessions.size} sessions") Timber.d(">>>> Start computing group ${sessionGroup.name}, ${sessionGroup.sessions.size} sessions")
@ -102,7 +122,7 @@ class Calculator {
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 var winningSessionCount: Int = 0 // sessions.filter { it.value >= 0.0 }.size
var totalBuyin = 0.0 var totalBuyin = 0.0
// Compute for each session // Compute for each session
@ -119,7 +139,8 @@ class Calculator {
totalBuyin += s.buyin totalBuyin += s.buyin
totalHands += s.estimatedHands totalHands += s.estimatedHands
if (options.evolutionValues == Options.EvolutionValues.STANDARD) { when (options.evolutionValues) {
Options.EvolutionValues.STANDARD -> {
results.addEvolutionValue(sum, NETRESULT) results.addEvolutionValue(sum, NETRESULT)
results.addEvolutionValue(sum / index, AVERAGE) results.addEvolutionValue(sum / index, AVERAGE)
@ -139,7 +160,7 @@ class Calculator {
} }
} }
}
} }
// Compute for each serie // Compute for each serie
@ -147,7 +168,10 @@ class Calculator {
var hourlyRate: Double = 0.0 var hourlyRate: Double = 0.0
var hourlyRateBB: Double = 0.0 var hourlyRateBB: Double = 0.0
var gIndex = 0; var gSum = 0.0; var gTotalHands = 0.0; var gBBSum = 0.0; var gIndex = 0;
var gSum = 0.0;
var gTotalHands = 0.0;
var gBBSum = 0.0;
sessionSets.forEach { sessionSet -> sessionSets.forEach { sessionSet ->
gIndex++ gIndex++
duration += sessionSet.hourlyDuration duration += sessionSet.hourlyDuration
@ -158,7 +182,8 @@ class Calculator {
hourlyRate = gSum / duration hourlyRate = gSum / duration
hourlyRateBB = gBBSum / duration hourlyRateBB = gBBSum / duration
if (options.evolutionValues == Options.EvolutionValues.DATED) { when (options.evolutionValues) {
Options.EvolutionValues.DATED -> {
results.addEvolutionValue(gSum, duration, NETRESULT) results.addEvolutionValue(gSum, duration, NETRESULT)
results.addEvolutionValue(gSum / duration, duration, HOURLY_RATE) results.addEvolutionValue(gSum / duration, duration, HOURLY_RATE)
results.addEvolutionValue(hourlyRate, duration, HOURLY_RATE) results.addEvolutionValue(hourlyRate, duration, HOURLY_RATE)
@ -166,7 +191,6 @@ class Calculator {
results.addEvolutionValue(sessionSet.netDuration.toDouble(), duration, DURATION) results.addEvolutionValue(sessionSet.netDuration.toDouble(), duration, DURATION)
results.addEvolutionValue(duration / gIndex, duration, AVERAGE_DURATION) results.addEvolutionValue(duration / gIndex, duration, AVERAGE_DURATION)
results.addEvolutionValue(hourlyRateBB, duration, HOURLY_RATE_BB) results.addEvolutionValue(hourlyRateBB, duration, HOURLY_RATE_BB)
}
val netBB100 = Stat.netBBPer100Hands(gBBSum, gTotalHands) val netBB100 = Stat.netBBPer100Hands(gBBSum, gTotalHands)
if (netBB100 != null) { if (netBB100 != null) {
@ -175,6 +199,9 @@ class Calculator {
results.addEvolutionValue(0.0, duration, NET_BB_PER_100_HANDS) results.addEvolutionValue(0.0, duration, NET_BB_PER_100_HANDS)
} }
} }
}
}
var average = 0.0 var average = 0.0
if (sessions.size > 0) { if (sessions.size > 0) {
@ -182,23 +209,28 @@ class Calculator {
val winRatio = winningSessionCount.toDouble() / sessions.size.toDouble() val winRatio = winningSessionCount.toDouble() / sessions.size.toDouble()
val avgBuyin = totalBuyin / sessions.size val avgBuyin = totalBuyin / sessions.size
results.addStats(setOf( results.addStats(
setOf(
ComputedStat(AVERAGE, average), ComputedStat(AVERAGE, average),
ComputedStat(WIN_RATIO, winRatio), ComputedStat(WIN_RATIO, winRatio),
ComputedStat(AVERAGE_BUYIN, avgBuyin) ComputedStat(AVERAGE_BUYIN, avgBuyin)
)) )
)
} }
if (sessionSets.size > 0) { if (sessionSets.size > 0) {
val avgDuration = duration / sessionSets.size val avgDuration = duration / sessionSets.size
results.addStats(setOf( results.addStats(
setOf(
ComputedStat(HOURLY_RATE, hourlyRate), ComputedStat(HOURLY_RATE, hourlyRate),
ComputedStat(AVERAGE_DURATION, avgDuration) ComputedStat(AVERAGE_DURATION, avgDuration)
)) )
)
} }
// Create stats // Create stats
results.addStats(setOf( results.addStats(
setOf(
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()),
@ -207,7 +239,8 @@ class Calculator {
ComputedStat(AVERAGE_NET_BB, bbSum / bbSessionCount), ComputedStat(AVERAGE_NET_BB, bbSum / bbSessionCount),
ComputedStat(HANDS_PLAYED, totalHands) ComputedStat(HANDS_PLAYED, totalHands)
)) )
)
val roi = Stat.returnOnInvestment(sum, totalBuyin) val roi = Stat.returnOnInvestment(sum, totalBuyin)
val netBB100 = Stat.netBBPer100Hands(bbSum, totalHands) val netBB100 = Stat.netBBPer100Hands(bbSum, totalHands)
@ -241,11 +274,13 @@ class Calculator {
} }
val hourlyStandardDeviation: Double = Math.sqrt(hourlyStdSum / sessionSets.size) val hourlyStandardDeviation: Double = Math.sqrt(hourlyStdSum / sessionSets.size)
results.addStats(setOf( results.addStats(
setOf(
ComputedStat(STANDARD_DEVIATION, standardDeviation), ComputedStat(STANDARD_DEVIATION, standardDeviation),
ComputedStat(STANDARD_DEVIATION_HOURLY, hourlyStandardDeviation), ComputedStat(STANDARD_DEVIATION_HOURLY, hourlyStandardDeviation),
ComputedStat(STANDARD_DEVIATION_BB_PER_100_HANDS, standardDeviationBBper100Hands) ComputedStat(STANDARD_DEVIATION_BB_PER_100_HANDS, standardDeviationBBper100Hands)
)) )
)
} }
return results return results

@ -7,9 +7,6 @@ import io.realm.annotations.RealmClass
@RealmClass @RealmClass
open class Result : RealmObject() { open class Result : RealmObject() {
// the user associated to this session result
var player: Player? = null
// The buyin amount // The buyin amount
var buyin: Double? = null var buyin: Double? = null
set(value) { set(value) {

Loading…
Cancel
Save