From 813c447111d3d52baf37dd9de97c4b05ea02b8ec Mon Sep 17 00:00:00 2001 From: "jakub.salavec" Date: Wed, 23 Apr 2025 17:39:16 +0200 Subject: [PATCH] Added - hobbit site values for draft bots --- .../draft-table/hobbitTableDraft.json | 20 +++++++++++++++ .../evaluator/AbstractDraftCardEvaluator.java | 25 +++++++++++++++++++ .../lotro/draft3/evaluator/Evaluator.java | 11 +++++--- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/draft-table/hobbitTableDraft.json b/gemp-lotr/gemp-lotr-cards/src/main/resources/draft-table/hobbitTableDraft.json index 063affb07..d1528988f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/draft-table/hobbitTableDraft.json +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/draft-table/hobbitTableDraft.json @@ -251,6 +251,7 @@ {"card": "30_31", "value": 0.7296487884563028 }, {"card": "32_18", "value": 0.6634903348761231 }, {"card": "31_6" , "value": 0.6602232507487068 }, + {"card": "33_55", "value": 0.650421998366458 }, {"card": "31_38", "value": 0.6471549142390417 }, {"card": "31_5" , "value": 0.6471549142390417 }, {"card": "33_42", "value": 0.5867138578818405 }, @@ -268,6 +269,7 @@ {"card": "32_23", "value": 0.49033487612306015 }, {"card": "32_66", "value": 0.4838007078682276 }, {"card": "33_41", "value": 0.4827116798257555 }, + {"card": "31_47", "value": 0.4805336237408113 }, {"card": "31_26", "value": 0.47944459569833925 }, {"card": "32_54", "value": 0.47944459569833925 }, {"card": "32_4" , "value": 0.47399945548597877 }, @@ -289,6 +291,7 @@ {"card": "31_37", "value": 0.41410291315001363 }, {"card": "33_52", "value": 0.41410291315001363 }, {"card": "33_40", "value": 0.4053906888102369 }, + {"card": "31_46", "value": 0.4053906888102369 }, {"card": "31_18", "value": 0.4010345766403485 }, {"card": "31_23", "value": 0.3966784644704601 }, {"card": "31_58", "value": 0.39341138034304385 }, @@ -299,14 +302,17 @@ {"card": "32_56", "value": 0.3825210999183229 }, {"card": "32_51", "value": 0.37598693166349034 }, {"card": "32_39", "value": 0.37598693166349034 }, + {"card": "33_58", "value": 0.37271984753607407 }, {"card": "32_52", "value": 0.37271984753607407 }, {"card": "32_9" , "value": 0.37054179145112986 }, {"card": "31_9" , "value": 0.3694527634086578 }, {"card": "30_23", "value": 0.36836373536618566 }, + {"card": "30_63", "value": 0.36781922134494965 }, {"card": "32_42", "value": 0.3645521372175334 }, {"card": "32_7" , "value": 0.35638442689899263 }, {"card": "32_58", "value": 0.35311734277157636 }, {"card": "32_41", "value": 0.35066702967601415 }, + {"card": "31_45", "value": 0.3465831745167438 }, {"card": "31_29", "value": 0.3465831745167438 }, {"card": "33_20", "value": 0.3465831745167438 }, {"card": "32_32", "value": 0.3422270623468554 }, @@ -315,12 +321,16 @@ {"card": "33_23", "value": 0.3269806697522461 }, {"card": "30_13", "value": 0.32534712768853796 }, {"card": "32_63", "value": 0.3237135856248298 }, + {"card": "30_58", "value": 0.3220800435611217 }, + {"card": "30_62", "value": 0.3199019874761775 }, {"card": "31_12", "value": 0.313912333242581 }, {"card": "31_30", "value": 0.30737816498774845 }, {"card": "33_19", "value": 0.3008439967329159 }, {"card": "32_30", "value": 0.2986659406479717 }, + {"card": "31_44", "value": 0.29757691260549957 }, {"card": "33_12", "value": 0.2943098284780833 }, {"card": "31_57", "value": 0.2943098284780833 }, + {"card": "30_60", "value": 0.291042744350667 }, {"card": "32_31", "value": 0.28886468826572287 }, {"card": "31_36", "value": 0.28777566022325074 }, {"card": "32_37", "value": 0.2861421181595426 }, @@ -332,18 +342,22 @@ {"card": "32_64", "value": 0.27144023958616936 }, {"card": "31_59", "value": 0.26708412741628096 }, {"card": "33_59", "value": 0.26490607133133676 }, + {"card": "33_56", "value": 0.26490607133133676 }, {"card": "32_5" , "value": 0.26490607133133676 }, {"card": "33_22", "value": 0.26490607133133676 }, {"card": "32_29", "value": 0.26490607133133676 }, {"card": "33_54", "value": 0.2638170432888647 }, {"card": "32_34", "value": 0.2627280152463926 }, + {"card": "33_57", "value": 0.2583719030765042 }, {"card": "33_53", "value": 0.25728287503403213 }, + {"card": "32_48", "value": 0.25510481894908793 }, {"card": "33_47", "value": 0.25183773482167165 }, {"card": "32_65", "value": 0.25183773482167165 }, {"card": "31_41", "value": 0.2507487067791996 }, {"card": "32_38", "value": 0.2502041927579635 }, {"card": "30_30", "value": 0.2488429077048734 }, {"card": "32_62", "value": 0.24857065069425538 }, + {"card": "30_59", "value": 0.24693710863054724 }, {"card": "31_14", "value": 0.2453035665668391 }, {"card": "32_44", "value": 0.2453035665668391 }, {"card": "31_17", "value": 0.244214538524367 }, @@ -352,8 +366,10 @@ {"card": "33_61", "value": 0.23550231418459025 }, {"card": "31_60", "value": 0.23441328614211815 }, {"card": "32_28", "value": 0.23060168799346584 }, + {"card": "30_61", "value": 0.23060168799346584 }, {"card": "31_35", "value": 0.22733460386604956 }, {"card": "32_11", "value": 0.2267900898448135 }, + {"card": "32_46", "value": 0.22570106180234142 }, {"card": "32_17", "value": 0.22570106180234142 }, {"card": "32_16", "value": 0.22570106180234142 }, {"card": "33_36", "value": 0.22461203375986932 }, @@ -372,6 +388,7 @@ {"card": "33_3" , "value": 0.20065341682548327 }, {"card": "33_49", "value": 0.20038115981486523 }, {"card": "31_52", "value": 0.19738633269806696 }, + {"card": "30_65", "value": 0.19684181867683093 }, {"card": "31_49", "value": 0.19303022052817861 }, {"card": "32_26", "value": 0.1897631364007623 }, {"card": "33_4" , "value": 0.18649605227334604 }, @@ -398,7 +415,10 @@ {"card": "31_51", "value": 0.15790906615845357 }, {"card": "31_3" , "value": 0.1570922951265995 }, {"card": "33_31", "value": 0.15491423904165533 }, + {"card": "30_64", "value": 0.1532806969779472 }, {"card": "31_34", "value": 0.1521916689354751 }, + {"card": "32_49", "value": 0.15055812687176695 }, + {"card": "32_47", "value": 0.15055812687176695 }, {"card": "32_27", "value": 0.15055812687176695 }, {"card": "32_14", "value": 0.15055812687176695 }, {"card": "32_21", "value": 0.14729104274435068 }, diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/AbstractDraftCardEvaluator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/AbstractDraftCardEvaluator.java index bc4123aa4..c7090ce18 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/AbstractDraftCardEvaluator.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/AbstractDraftCardEvaluator.java @@ -1,11 +1,14 @@ package com.gempukku.lotro.draft3.evaluator; +import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Side; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; public abstract class AbstractDraftCardEvaluator { @@ -30,6 +33,28 @@ public abstract class AbstractDraftCardEvaluator { // This is what bots pick according to public Map getValuesMap(Map winningMap, Map losingMap, int gamesAnalyzed) { + // Remove sites from value maps + Set sitesToRemove = new HashSet<>(); + winningMap.keySet().stream().filter(s -> { + try { + return library.getLotroCardBlueprint(s).getCardType().equals(CardType.SITE); + } catch (CardNotFoundException e) { + return false; + } + }).forEach(sitesToRemove::add); + losingMap.keySet().stream().filter(s -> { + try { + return library.getLotroCardBlueprint(s).getCardType().equals(CardType.SITE); + } catch (CardNotFoundException e) { + return false; + } + }).forEach(sitesToRemove::add); + sitesToRemove.forEach(siteKey -> { + winningMap.remove(siteKey); + losingMap.remove(siteKey); + }); + + // Merge win and lose maps (they are kept separate for potential wr info) Map mergedMap = mergeMaps(winningMap, losingMap); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/Evaluator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/Evaluator.java index 32dd9ee88..c27c91427 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/Evaluator.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft3/evaluator/Evaluator.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.draft3.evaluator; import com.gempukku.lotro.common.AppConfig; +import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.ReplayMetadata; @@ -78,7 +79,7 @@ public class Evaluator { // Data from solo drafts do not contain rare one ring cards, don't forget to add some value manually after System.out.println("===FOTR VALUES"); - System.out.println("Games analyzes: " + assignmentList.get(0).gamesAnalyzed); + System.out.println("Games analyzed: " + assignmentList.get(0).gamesAnalyzed); printJsonStyle(fotrValues); // For json file System.out.println("===FOTR PLAY RATES"); // Regular draft - all rares included, U/C with play rate lower than 0.01 are cut @@ -86,13 +87,13 @@ public class Evaluator { printHumanReadable(fotrPlayRates, library); System.out.println("===TTT VALUES"); - System.out.println("Games analyzes: " + assignmentList.get(1).gamesAnalyzed); + System.out.println("Games analyzed: " + assignmentList.get(1).gamesAnalyzed); printJsonStyle(tttValues); System.out.println("===TTT PLAY RATES"); printHumanReadable(tttPlayRates, library); System.out.println("===HOBBIT VALUES"); - System.out.println("Games analyzes: " + assignmentList.get(2).gamesAnalyzed); + System.out.println("Games analyzed: " + assignmentList.get(2).gamesAnalyzed); printJsonStyle(hobbitValues); printHumanReadable(hobbitValues, library); } @@ -119,6 +120,7 @@ public class Evaluator { } Set winningCardSet = new HashSet<>(winningDeck.DrawDeck); winningCardSet.forEach(card -> assignment.deckCount.merge(card.replace("*", "").replace("T", ""), 1, Integer::sum)); + winningDeck.AdventureDeck.forEach(siteCard -> assignment.deckCount.merge(siteCard.replace("*", "").replace("T", ""), 1, Integer::sum)); assignment.deckCount.merge(losingDeck.RingBearer.replace("*", "").replace("T", ""), 1, Integer::sum); if (losingDeck.Ring != null) { @@ -126,18 +128,21 @@ public class Evaluator { } Set losingCardSet = new HashSet<>(losingDeck.DrawDeck); losingCardSet.forEach(card -> assignment.deckCount.merge(card.replace("*", "").replace("T", ""), 1, Integer::sum)); + losingDeck.AdventureDeck.forEach(siteCard -> assignment.deckCount.merge(siteCard.replace("*", "").replace("T", ""), 1, Integer::sum)); assignment.winningMap.merge(winningDeck.RingBearer.replace("*", "").replace("T", ""), 1, Integer::sum); if (winningDeck.Ring != null) { assignment.winningMap.merge(winningDeck.Ring.replace("*", "").replace("T", ""), 1, Integer::sum); } winningDeck.DrawDeck.forEach(card -> assignment.winningMap.merge(card.replace("*", "").replace("T", ""), 1, Integer::sum)); + winningDeck.AdventureDeck.forEach(siteCard -> assignment.winningMap.merge(siteCard.replace("*", "").replace("T", ""), 1, Integer::sum)); assignment.losingMap.merge(losingDeck.RingBearer.replace("*", "").replace("T", ""), 1, Integer::sum); if (losingDeck.Ring != null) { assignment.losingMap.merge(losingDeck.Ring.replace("*", "").replace("T", ""), 1, Integer::sum); } losingDeck.DrawDeck.forEach(card -> assignment.losingMap.merge(card.replace("*", "").replace("T", ""), 1, Integer::sum)); + losingDeck.AdventureDeck.forEach(siteCard -> assignment.losingMap.merge(siteCard.replace("*", "").replace("T", ""), 1, Integer::sum)); } } });