mirror of
https://github.com/correl/mage.git
synced 2024-12-26 11:09:27 +00:00
ai ratings revamp code review changes
* when resources are missing, fails gracefully * uses highest found rating, rather than most recently found for the case of sets containing duplicates * moved ratings files to their own directory * thread safe reading of all files
This commit is contained in:
parent
505a4b00a7
commit
6f93abfd5a
15 changed files with 41 additions and 1232 deletions
|
@ -50,6 +50,9 @@ public final class RateCard {
|
||||||
private static final int DEFAULT_NOT_RATED_RARE_RATING = 75;
|
private static final int DEFAULT_NOT_RATED_RARE_RATING = 75;
|
||||||
private static final int DEFAULT_NOT_RATED_MYTHIC_RATING = 90;
|
private static final int DEFAULT_NOT_RATED_MYTHIC_RATING = 90;
|
||||||
|
|
||||||
|
private static String RATINGS_DIR = "/ratings/";
|
||||||
|
private static String RATINGS_SET_LIST = RATINGS_DIR + "setsWithRatings.csv";
|
||||||
|
|
||||||
private static final Logger log = Logger.getLogger(RateCard.class);
|
private static final Logger log = Logger.getLogger(RateCard.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -163,17 +166,7 @@ public final class RateCard {
|
||||||
* @return Rating number from [1:100].
|
* @return Rating number from [1:100].
|
||||||
*/
|
*/
|
||||||
public static int getCardRating(Card card) {
|
public static int getCardRating(Card card) {
|
||||||
if (setsWithRatingsToBeLoaded == null){
|
readRatingSetList();
|
||||||
setsWithRatingsToBeLoaded = new LinkedList<>();
|
|
||||||
InputStream is = RateCard.class.getResourceAsStream("/setsWithRatings.csv");
|
|
||||||
Scanner scanner = new Scanner(is);
|
|
||||||
while (scanner.hasNextLine()) {
|
|
||||||
String line = scanner.nextLine();
|
|
||||||
if (line.substring(0,1) != "#"){
|
|
||||||
setsWithRatingsToBeLoaded.add(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String exp = card.getExpansionSetCode().toLowerCase();
|
String exp = card.getExpansionSetCode().toLowerCase();
|
||||||
readRatings(exp);
|
readRatings(exp);
|
||||||
|
|
||||||
|
@ -195,20 +188,45 @@ public final class RateCard {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads ratings from resources.
|
* reads the list of sets that have ratings csv files
|
||||||
|
* populates the setsWithRatingsToBeLoaded
|
||||||
|
*/
|
||||||
|
private synchronized static void readRatingSetList(){
|
||||||
|
try {
|
||||||
|
if (setsWithRatingsToBeLoaded == null){
|
||||||
|
setsWithRatingsToBeLoaded = new LinkedList<>();
|
||||||
|
InputStream is = RateCard.class.getResourceAsStream(RATINGS_SET_LIST);
|
||||||
|
Scanner scanner = new Scanner(is);
|
||||||
|
while (scanner.hasNextLine()) {
|
||||||
|
String line = scanner.nextLine();
|
||||||
|
if (!line.substring(0,1).equals("#")){
|
||||||
|
setsWithRatingsToBeLoaded.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.info("failed to read ratings set list file: " + RATINGS_SET_LIST );
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads ratings from resources and loads them into ratings map
|
||||||
*/
|
*/
|
||||||
private synchronized static void readRatings(String expCode) {
|
private synchronized static void readRatings(String expCode) {
|
||||||
if (ratings == null) {
|
if (ratings == null) {
|
||||||
ratings = new HashMap<>();
|
ratings = new HashMap<>();
|
||||||
}
|
}
|
||||||
if (setsWithRatingsToBeLoaded.contains(expCode)){
|
if (setsWithRatingsToBeLoaded.contains(expCode)){
|
||||||
System.out.println("reading draftbot ratings for the set" + expCode);
|
log.info("reading draftbot ratings for the set" + expCode);
|
||||||
readFromFile("/" + expCode + ".csv");
|
readFromFile(RATINGS_DIR + expCode + ".csv");
|
||||||
setsWithRatingsToBeLoaded.remove(expCode);
|
setsWithRatingsToBeLoaded.remove(expCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
private static void readFromFile(String path) {
|
* reads ratings from the file
|
||||||
|
*/
|
||||||
|
private synchronized static void readFromFile(String path) {
|
||||||
Integer min = Integer.MAX_VALUE, max = 0;
|
Integer min = Integer.MAX_VALUE, max = 0;
|
||||||
Map<String, Integer> thisFileRatings = new HashMap<>();
|
Map<String, Integer> thisFileRatings = new HashMap<>();
|
||||||
try {
|
try {
|
||||||
|
@ -233,9 +251,13 @@ public final class RateCard {
|
||||||
for (String name: thisFileRatings.keySet()){
|
for (String name: thisFileRatings.keySet()){
|
||||||
int r = thisFileRatings.get(name);
|
int r = thisFileRatings.get(name);
|
||||||
int newrating = (int)(100.0f * (r - min) / (max - min));
|
int newrating = (int)(100.0f * (r - min) / (max - min));
|
||||||
ratings.put(name, newrating);
|
if (!ratings.containsKey(name) ||
|
||||||
|
(ratings.containsKey(name) && newrating > ratings.get(name)) ){
|
||||||
|
ratings.put(name, newrating);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
log.info("failed to read ratings file: " + path );
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,3 +17,4 @@ kld
|
||||||
mm3
|
mm3
|
||||||
ima
|
ima
|
||||||
m13
|
m13
|
||||||
|
ktk
|
|
Loading…
Reference in a new issue