From 3602be5eab1f2a8a2815b602f7abb6c59e63e73a Mon Sep 17 00:00:00 2001 From: Andrii Danylchenko Date: Sun, 14 Jan 2024 10:23:44 +0200 Subject: [PATCH] BattleAI: remove adjustPositions method as it gives more troubles than usefulness --- AI/BattleAI/BattleEvaluator.cpp | 2 +- AI/BattleAI/BattleExchangeVariant.cpp | 68 --------------------------- AI/BattleAI/BattleExchangeVariant.h | 5 -- 3 files changed, 1 insertion(+), 74 deletions(-) diff --git a/AI/BattleAI/BattleEvaluator.cpp b/AI/BattleAI/BattleEvaluator.cpp index 1e7234b37..32f5f13fc 100644 --- a/AI/BattleAI/BattleEvaluator.cpp +++ b/AI/BattleAI/BattleEvaluator.cpp @@ -225,7 +225,7 @@ BattleAction BattleEvaluator::selectStackAction(const CStack * stack) } } - return BattleAction::makeDefend(stack); + return stack->waited() ? BattleAction::makeDefend(stack) : BattleAction::makeWait(stack); } uint64_t timeElapsed(std::chrono::time_point start) diff --git a/AI/BattleAI/BattleExchangeVariant.cpp b/AI/BattleAI/BattleExchangeVariant.cpp index 8e3d5764b..74eb2b8c2 100644 --- a/AI/BattleAI/BattleExchangeVariant.cpp +++ b/AI/BattleAI/BattleExchangeVariant.cpp @@ -684,11 +684,6 @@ BattleScore BattleExchangeEvaluator::calculateExchange( for(auto hex : hexes) reachabilityMap[hex] = getOneTurnReachableUnits(turn, hex); - if(!ap.attack.shooting) - { - v.adjustPositions(melleeAttackers, ap, reachabilityMap); - } - #if BATTLE_TRACE_LEVEL>=1 logAi->trace("Exchange score: enemy: %2f, our -%2f", v.getScore().enemyDamageReduce, v.getScore().ourDamageReduce); #endif @@ -696,69 +691,6 @@ BattleScore BattleExchangeEvaluator::calculateExchange( return v.getScore(); } -void BattleExchangeVariant::adjustPositions( - std::vector attackers, - const AttackPossibility & ap, - std::map & reachabilityMap) -{ - auto hexes = ap.attack.defender->getSurroundingHexes(); - - boost::sort(attackers, [&](const battle::Unit * u1, const battle::Unit * u2) -> bool - { - if(attackerValue[u1->unitId()].isRetalitated && !attackerValue[u2->unitId()].isRetalitated) - return true; - - if(attackerValue[u2->unitId()].isRetalitated && !attackerValue[u1->unitId()].isRetalitated) - return false; - - return attackerValue[u1->unitId()].value > attackerValue[u2->unitId()].value; - }); - - vstd::erase_if_present(hexes, ap.from); - vstd::erase_if_present(hexes, ap.attack.attacker->occupiedHex(ap.attack.attackerPos)); - - float notRealizedDamage = 0; - - for(auto unit : attackers) - { - if(unit->unitId() == ap.attack.attacker->unitId()) - continue; - - if(!vstd::contains_if(hexes, [&](BattleHex h) -> bool - { - return vstd::contains(reachabilityMap[h], unit); - })) - { - notRealizedDamage += attackerValue[unit->unitId()].value; - continue; - } - - auto desiredPosition = vstd::minElementByFun(hexes, [&](BattleHex h) -> float - { - auto score = vstd::contains(reachabilityMap[h], unit) - ? reachabilityMap[h].size() - : 0; - - if(unit->doubleWide()) - { - auto backHex = unit->occupiedHex(h); - - if(vstd::contains(hexes, backHex)) - score += reachabilityMap[backHex].size(); - } - - return score; - }); - - hexes.erase(desiredPosition); - } - - if(notRealizedDamage > ap.attackValue() && notRealizedDamage > attackerValue[ap.attack.attacker->unitId()].value) - { - dpsScore = BattleScore(EvaluationResult::INEFFECTIVE_SCORE, 0); - } -} - bool BattleExchangeEvaluator::canBeHitThisTurn(const AttackPossibility & ap) { for(auto pos : ap.attack.attacker->getSurroundingHexes()) diff --git a/AI/BattleAI/BattleExchangeVariant.h b/AI/BattleAI/BattleExchangeVariant.h index cca98ae12..97af9a3f7 100644 --- a/AI/BattleAI/BattleExchangeVariant.h +++ b/AI/BattleAI/BattleExchangeVariant.h @@ -106,11 +106,6 @@ public: const BattleScore & getScore() const { return dpsScore; } - void adjustPositions( - std::vector attackers, - const AttackPossibility & ap, - std::map & reachabilityMap); - private: BattleScore dpsScore; std::map attackerValue;