update
This commit is contained in:
@@ -69,13 +69,19 @@ static func _regler() -> Dictionary:
|
||||
return STUFEN[clampi(stufe, 0, STUFEN.size() - 1)]
|
||||
|
||||
|
||||
## `wissen`: was der Bot über die anderen weiss - "bekannt" sind aufgedeckte
|
||||
## Gegnerwürfel (Spähen), "fenster" ist je Augenzahl [von, bis] vom Zählen.
|
||||
## Ohne das würfe er die Münzen und ignorierte, was sie ihm sagen.
|
||||
static func choose_action(values: Array, total_dice: int, bid: Dictionary,
|
||||
must_bid: bool, rng: RandomNumberGenerator) -> Dictionary:
|
||||
must_bid: bool, rng: RandomNumberGenerator, wissen: Dictionary = {}) -> Dictionary:
|
||||
var known: Array = []
|
||||
for v in values:
|
||||
if v > 0:
|
||||
known.append(v)
|
||||
var unknown := total_dice - known.size()
|
||||
for v in wissen.get("bekannt", []):
|
||||
known.append(int(v))
|
||||
var unknown := maxi(0, total_dice - known.size())
|
||||
var fenster: Dictionary = wissen.get("fenster", {})
|
||||
|
||||
if bid.is_empty():
|
||||
var op := _opening(known, unknown, rng)
|
||||
@@ -83,6 +89,21 @@ static func choose_action(values: Array, total_dice: int, bid: Dictionary,
|
||||
|
||||
var r := _regler()
|
||||
var hold := chance(known, unknown, bid.count, bid.face)
|
||||
var genau_p := exact_chance(known, unknown, bid.count, bid.face)
|
||||
if fenster.has(int(bid.face)):
|
||||
# Gezählt: das Fenster schlägt jede Schätzung.
|
||||
var f: Array = fenster[int(bid.face)]
|
||||
var von := int(f[0])
|
||||
var bis := int(f[1])
|
||||
if bis < int(bid.count):
|
||||
hold = 0.0
|
||||
genau_p = 0.0
|
||||
elif von >= int(bid.count):
|
||||
hold = 1.0
|
||||
genau_p = 1.0 if von == bis and von == int(bid.count) else (0.34 if von == int(bid.count) else 0.0)
|
||||
else:
|
||||
hold = float(bis - int(bid.count) + 1) / float(bis - von + 1)
|
||||
genau_p = 1.0 / float(bis - von + 1)
|
||||
var raise_ = _best_raise(known, unknown, total_dice, bid, float(r.sicher))
|
||||
var low := lowest_raise(bid, total_dice)
|
||||
|
||||
@@ -91,8 +112,8 @@ static func choose_action(values: Array, total_dice: int, bid: Dictionary,
|
||||
# Anfechtung: der Ansager verliert, und man bekommt selbst einen dazu.
|
||||
# Aber nur ab und zu: Genau nimmt keinen Würfel vom Tisch. Ein Bot,
|
||||
# der es bei jeder Gelegenheit ruft, zieht die Partie ins Endlose.
|
||||
if exact_chance(known, unknown, bid.count, bid.face) > float(r.genau) and hold < 0.6 \
|
||||
and rng.randf() < GENAU_LUST:
|
||||
# Sicheres Wissen (Fenster exakt) nutzt er dagegen immer.
|
||||
if genau_p >= 0.999 or (genau_p > float(r.genau) and hold < 0.6 and rng.randf() < GENAU_LUST):
|
||||
return {"type": "exact"}
|
||||
var doubt := float(r.zweifel) + rng.randf_range(-0.07, 0.07)
|
||||
if hold < doubt and (raise_.is_empty() or raise_.p < 0.32):
|
||||
|
||||
Reference in New Issue
Block a user