Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

154 lines
6.1KB

  1. #include <iostream>
  2. // #include <sys/time.h>
  3. // #include <sys/resource.h>
  4. #include "base.h"
  5. void Dealer::reportPrepare(void) {
  6. double ev = (double) playerStats.result / (double) n_hand;
  7. double error = error_standard_deviations * sqrt (playerStats.variance / (double) n_hand);
  8. report.push_back(reportItem("bankroll", "%g", playerStats.bankroll));
  9. report.push_back(reportItem("result", "%g", playerStats.result));
  10. report.push_back(reportItem("ev", "%g", ev));
  11. report.push_back(reportItem("hands", "%g", n_hand));
  12. report.push_back(reportItem("variance", "%g", playerStats.variance));
  13. report.push_back(reportItem("deviation", "%g", sqrt(playerStats.variance)));
  14. report.push_back(reportItem("error", "%g", error));
  15. report.push_back(reportItem("played_hands", "%g", n_hands));
  16. report.push_back(reportItem("total_money_waged", "%g", playerStats.totalMoneyWaged));
  17. report.push_back(reportItem("bustsPlayer", "%g", playerStats.bustsPlayer));
  18. report.push_back(reportItem("bustsDealer", "%g", playerStats.bustsDealer));
  19. report.push_back(reportItem("wins", "%g", playerStats.wins));
  20. report.push_back(reportItem("pushes", "%g", playerStats.pushes));
  21. report.push_back(reportItem("losses", "%g", playerStats.losses));
  22. return;
  23. }
  24. int Dealer::writeReportYAML(void) {
  25. // FILE *file;
  26. // struct rusage usage;
  27. // double wall;
  28. // double ev, error;
  29. // int precision;
  30. // char format[32];
  31. // if ((file = blackjack_conf.yaml_report) == NULL) {
  32. // file = stderr;
  33. // }
  34. // TODO: choose if comments with explanations are to be added
  35. std::cerr << "---" << std::endl;
  36. for (auto item : report) {
  37. std::cerr << item.key << ": ";
  38. fprintf(stderr, item.format.c_str(), item.value);
  39. std::cerr << std::endl;
  40. }
  41. // std::cerr << "rules:" << std::endl;
  42. // std::cerr << " decks: " << decks << std::endl;
  43. // std::cerr << " hands: " << n_hands << std::endl;
  44. // std::cerr << " hit_soft_17: %d\n",
  45. // blackjack_conf.hit_soft_17);
  46. // std::cerr << " double_after_split: %d\n",
  47. // blackjack_conf.double_after_split);
  48. // std::cerr << " blackjack_pays: %g\n",
  49. // blackjack_conf.blackjack_pays);
  50. // std::cerr << " rng_seed: %d\n", blackjack_conf.rng_seed);
  51. // std::cerr << " number_of_burnt_cards: %d\n",
  52. // blackjack_conf.number_of_burnt_cards);
  53. // std::cerr << " no_negative_bankroll: %d\n",
  54. // blackjack_conf.no_negative_bankroll);
  55. // std::cerr << " max_bet: %d\n", blackjack_conf.max_bet);
  56. // if (blackjack_conf.decks > 0)
  57. // {
  58. // std::cerr << " penetration: %g\n",
  59. // blackjack_conf.penetration);
  60. // std::cerr << " penetration_sigma: %g\n",
  61. // blackjack_conf.penetration_sigma);
  62. // }
  63. // TODO
  64. // if (getrusage (RUSAGE_SELF, &usage) == 0) {
  65. // std::cerr << "cpu:" << std::endl;
  66. // std::cerr << " user: " + (usage.ru_utime.tv_sec + 1e-6 * usage.ru_utime.tv_usec) << std::endl;
  67. // std::cerr << " system: " + (usage.ru_stime.tv_sec + 1e-6 * usage.ru_stime.tv_usec) << std::endl;
  68. // measue final wall time
  69. // TODO: chrono
  70. // gettimeofday (&wall_time_final, NULL);
  71. // wall = (blackjack.wall_time_final.tv_sec -
  72. // blackjack.wall_time_initial.tv_sec) +
  73. // 1e-6 * (blackjack.wall_time_final.tv_usec -
  74. // blackjack.wall_time_initial.tv_usec);
  75. // std::cerr << " wall: %g\n", wall);
  76. // speed
  77. // std::cerr << " second_per_hand: %.1e\n", wall / blackjack.hand);
  78. // std::cerr << " hands_per_second: %.1e\n", blackjack.hand / wall);
  79. // }
  80. // std::cerr << "player: " << std::endl;
  81. // std::cerr << " wins: " ((double) player->wins / (double) player->number_of_hands)) << std::endl;
  82. // std::cerr << " pushes: %g\n",
  83. // (double) player->pushes / (double) player->number_of_hands);
  84. // std::cerr << " losses: %g\n",
  85. // (double) player->losses / (double) player->number_of_hands);
  86. // std::cerr << " dealer_blackjacks: %g\n",
  87. // (double) player->dealer_blackjacks /
  88. // (double) player->number_of_hands);
  89. // std::cerr << " player_blackjacks: %g\n",
  90. // (double) player->player_blackjacks /
  91. // (double) player->number_of_hands);
  92. // std::cerr << " dealer_busts: %g\n",
  93. // (double) player->dealer_busts / (double) player->number_of_hands);
  94. // std::cerr << " player_busts: %g\n",
  95. // (double) player->player_busts / (double) player->number_of_hands);
  96. // std::cerr << " doubled_hands: %g\n",
  97. // (double) player->doubled_hands / (double) player->number_of_hands);
  98. // std::cerr << " doubled_wins: %g\n",
  99. // (double) player->doubled_wins / (double) player->number_of_hands);
  100. // std::cerr << " insured_hands: %g\n",
  101. // (double) player->insured_hands / (double) player->number_of_hands);
  102. // std::cerr << " insured_wins: %g\n",
  103. // (double) player->insured_wins / (double) player->number_of_hands);
  104. // std::cerr << " number_of_hands: %g\n",
  105. // (double) player->number_of_hands);
  106. // std::cerr << " number_of_shuffles: %g\n", (double) blackjack.shuffles);
  107. // std::cerr << " total_money_waged: %g\n",
  108. // (double) player->total_money_waged);
  109. // std::cerr << " worst_bankroll: %g\n",
  110. // (double) player->worst_bankroll);
  111. // std::cerr << " final_bankroll: %g\n", (double) player->bankroll);
  112. // return is a keyword!
  113. // precision = (int) (ceil (-log10 (error))) - 2;
  114. // if (precision >= 0) {
  115. // snprintf (format, 32, ("%%+.%df ± %%.%df"), precision, precision);
  116. // } else {
  117. // snprintf (format, 32, ("%%+.0f ± %%.0f"));
  118. // }
  119. // std::cerr << " variance: % g\n", player->variance);
  120. // std::cerr << " deviation: % g\n", sqrt (player->variance));
  121. // std::cerr << " error: % g\n",
  122. // sqrt (player->variance / (double) (blackjack.hand)));
  123. // std::cerr << " result: \"("), std::cerr << format,
  124. // 100.0 * ev,
  125. // 100 * error);
  126. // std::cerr << ") %%\"" << std::endl;
  127. std::cerr << "..." << std::endl;
  128. return 0;
  129. }