class_name GreedyStrategy extends SimStrategy # ============================================================================ # GreedyStrategy —— 回本最快策略(架构 §10.3) # # 行为模型:每秒点 1 次;每决策点比较 # ① 可见升级的"回本"(效率:cost / 该班底当前产出) # ② 各班底下一级的回本(cost / Δoutput) # 买最小者;bulk ×10 解锁后一次买 10 级(仍按回本选班底)。 # 门 #7(主导策略极差 <1.5×)的对照臂。 # ============================================================================ func _init() -> void: strategy_name = "greedy" click_rate = 1.0 func act(econ: EconomyState) -> void: econ.click() # Dictionary.get() 返回 Variant → `:=` 推断会触发 INFERENCE_ON_VARIANT(4.7.2 按错误处理) var bulk10: bool = econ.bought.has("up_gate_bulk10") \ or int(econ.meta_ranks.get("meta_11", 0)) > 0 var count := 10 if bulk10 else 1 var best_kind := "" var best_id := "" var best_gi := -1 var best_pb := INF var gm := econ.global_mult() # 升级回本(效率类:产出增量 = 该班底当前产出 × param) for u in econ.data.upgrades: if econ.bought.has(u.id) or not econ.upgrade_visible(u) or not econ.requires_ok(u): continue if econ.merit < float(u.cost): continue var pb := INF if u.effect_type == "gen_output_add": var gi := econ.gen_index_of(u.target_gen) if gi < 0: continue var g := econ.data.generators[gi] var d_out := g.base_rate * float(econ.gen_levels[gi]) * u.effect_param * gm pb = float(u.cost) / d_out if d_out > 0.0 else INF else: # 点击/闸门/离线类:给一个小回本估值(点击区×2 ≈ 点击收益翻倍) pb = float(u.cost) / maxf(1.0, econ.click_value() * 2.0) if pb < best_pb: best_pb = pb best_kind = "upgrade" best_id = u.id best_gi = -1 # 班底下一级回本 var best_gen := best_payback_generator(econ) if best_gen >= 0: var g := econ.data.generators[best_gen] var cost := g.cost_range(econ.gen_levels[best_gen], count) if econ.merit >= cost: var d_out2 := g.base_rate * float(count) * econ.gen_mult(best_gen) * gm var pb := cost / d_out2 if d_out2 > 0.0 else INF if pb < best_pb: best_pb = pb best_kind = "generator" best_id = g.id best_gi = best_gen match best_kind: "upgrade": econ.buy_upgrade(best_id) "generator": econ.buy_generator(best_gi, count)