MCPcopy Create free account
hub / github.com/dhbloo/rapfi / readModel

Method readModel

Rapfi/config.cpp:463–559  ·  view source on GitHub ↗

Read model table of all rules in the config.

Source from the content-addressed store, hash-verified

461
462/// Read model table of all rules in the config.
463void Config::readModel(const cpptoml::table &t)
464{
465 const Rule Rules[] = {FREESTYLE, STANDARD, RENJU};
466 const char *RuleName[] = {"freestyle", "standard", "renju"};
467
468 std::string modelPath = t.get_as<std::string>("binary_file").value_or("");
469 if (!modelPath.empty()) {
470 if (!Command::loadModelFromFile(modelPath))
471 throw std::runtime_error("failed to load classic model file");
472 }
473 else {
474 // Read Eval & Score
475 if (auto eval = t.get_table("eval")) {
476 bool hasAsymmetryRenjuEval = false;
477 for (Rule r : Rules) {
478 auto setEvalBlack = [r](PatternCode pcode, Eval ev) {
479 EVALS[r + BLACK][pcode] = ev;
480 };
481 auto setEvalWhite = [r](PatternCode pcode, Eval ev) {
482 EVALS[r + WHITE][pcode] = ev;
483 };
484 auto ruleEval = eval->get_table(RuleName[r]);
485 if (!ruleEval) // fallback
486 ruleEval = eval;
487 else if (r == RENJU) {
488 auto blackEval = ruleEval->get_table("black");
489 auto whiteEval = ruleEval->get_table("white");
490 auto fallbackEval = ruleEval->get_as<int64_t>("model_type") ? ruleEval : eval;
491 if (hasAsymmetryRenjuEval = blackEval || whiteEval; hasAsymmetryRenjuEval) {
492 readValueModel<Eval, -16384, 16383>(*(blackEval ? blackEval : fallbackEval),
493 setEvalBlack);
494 readValueModel<Eval, -16384, 16383>(*(whiteEval ? whiteEval : fallbackEval),
495 setEvalWhite);
496 }
497 }
498
499 if (!hasAsymmetryRenjuEval) {
500 if (r == RENJU) {
501 readValueModel<Eval, -16384, 16383>(*ruleEval, setEvalBlack);
502 readValueModel<Eval, -16384, 16383>(*ruleEval, setEvalWhite);
503 }
504 else {
505 readValueModel<Eval, -16384, 16383>(*ruleEval, setEvalBlack);
506 }
507 }
508 }
509 }
510
511 if (auto score = t.get_table("score")) {
512 auto readScore = [](const cpptoml::table &t, int tableIdx) {
513 auto selfTable = t.get_table("self");
514 auto oppoTable = t.get_table("oppo");
515 readValueModel<Score, -8192, 8191>(selfTable ? *selfTable : t,
516 [tableIdx](PatternCode pcode, Score score) {
517 P4SCORES[tableIdx][pcode][0] = score;
518 });
519 readValueModel<Score, -8192, 8191>(oppoTable ? *oppoTable : t,
520 [tableIdx](PatternCode pcode, Score score) {

Callers

nothing calls this directly

Calls 4

loadModelFromFileFunction · 0.85
value_orMethod · 0.80
get_tableMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected