[Jrisk-cvs] SF.net SVN: domination-code:[2549] RiskAI/source
Brought to you by:
yuranet
|
From: <yu...@us...> - 2024-06-04 10:08:55
|
Revision: 2549
http://sourceforge.net/p/domination/code/2549
Author: yuranet
Date: 2024-06-04 10:08:53 +0000 (Tue, 04 Jun 2024)
Log Message:
-----------
fully compatible with Domination 1.3.2 now
Modified Paths:
--------------
RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_Game.java
RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_TrainingExampleWriter.java
RiskAI/source/JRiskAI/src/risk/AI/Modules/InformationGivers/C_IG_Winning.java
RiskAI/source/TrainingDataConverter/src/trainingdataconverter/trainingdata/GameData.java
Modified: RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_Game.java
===================================================================
--- RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_Game.java 2024-06-04 00:33:46 UTC (rev 2548)
+++ RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_Game.java 2024-06-04 10:08:53 UTC (rev 2549)
@@ -6,7 +6,6 @@
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
-
package risk.AI.Data_Structures;
import net.yura.domination.engine.ColorUtil;
@@ -16,7 +15,8 @@
import net.yura.domination.engine.core.Mission;
import net.yura.domination.engine.core.Player;
import net.yura.domination.engine.core.RiskGame;
-import java.util.*;
+import java.util.List;
+import java.util.Vector;
/**
* @author Pelle
@@ -23,6 +23,45 @@
*/
public class T_Game {
+ public static final String[] MODULE_NAMES = { // size: 17
+ "ig_mission", // 0
+ "ig_winning", // 1
+ "ig_nextmove", // 2
+ "ig_continent", // 3
+ "master_prioritizer", // 4
+ "rp_makeattackplan", // 5
+ "rp_ap_cost", // 6
+ "rp_ap_priority", // 7
+ "rp_discardattackplan", // 8
+ "rp_de_cost", // 9
+ "rp_de_priority", // 10
+ "rp_cashcards", // 11
+ "rp_placearmies", // 12
+ "rp_scoreattackplan", // 13
+ "rp_fortify", // 14
+ "initialplacement", // 15
+ "rp_scoremergedplan" // 16
+ };
+
+ public static final String[][] AI_TECHNIQUES = { // size: 17
+ {"script", "nn"}, // 0
+ {"script", "nn", "nb", "nn_wo", "bn"}, // 1
+ {"script", "nn_wo"}, // 2
+ {"script", "nn", "nb", "nn_wo", "bn"}, // 3
+ {"script", "nn", "nn_wo"}, // 4
+ {"script"}, // 5
+ {"script"}, // 6
+ {"script", "nn", "nn_wo"}, // 7
+ {"script"}, // 8
+ {"script", "nn", "dt", "nb", "nn_wo"}, // 9
+ {"script", "nn", "dt", "nb", "nn_wo"}, // 10
+ {"script"}, // 11
+ {"script"}, // 12
+ {"script", "nn", "dt", "nb", "nn_wo"}, // 13
+ {"script"}, // 14
+ {"script", "nn", "nn_wo"}, // 15
+ {"script", "nn", "dt", "nb", "nn_wo"}}; // 16
+
// TODO YURA why is this here? can it be removed and loaded from the map?
public static final String[] CONTINENT_NAMES = {"North-America", "South-America", "Europe", "Africa", "Asia", "Australia"};
public static final String[] MISSION_NAMES = {
@@ -40,44 +79,8 @@
"Kill_Player4",
"Kill_Player5",
"Kill_Player6"};
- public static final String[] MODULE_NAMES = { // size: 17
- "ig_mission", // 0
- "ig_winning", // 1
- "ig_nextmove", // 2
- "ig_continent", // 3
- "master_prioritizer", // 4
- "rp_makeattackplan", // 5
- "rp_ap_cost", // 6
- "rp_ap_priority", // 7
- "rp_discardattackplan", // 8
- "rp_de_cost", // 9
- "rp_de_priority", // 10
- "rp_cashcards", // 11
- "rp_placearmies", // 12
- "rp_scoreattackplan", // 13
- "rp_fortify", // 14
- "initialplacement", // 15
- "rp_scoremergedplan" // 16
- };
- public static final String[][] AI_TECHNIQUES = {{"script", "nn"},
- {"script", "nn", "nb", "nn_wo", "bn"},
- {"script", "nn_wo"},
- {"script", "nn", "nb", "nn_wo", "bn"},
- {"script", "nn", "nn_wo"},
- {"script"},
- {"script"},
- {"script", "nn", "nn_wo"},
- {"script"},
- {"script", "nn", "dt", "nb", "nn_wo"},
- {"script", "nn", "dt", "nb", "nn_wo"},
- {"script"},
- {"script"},
- {"script", "nn", "dt", "nb", "nn_wo"},
- {"script"},
- {"script", "nn", "nn_wo"},
- {"script", "nn", "dt", "nb", "nn_wo"}};
- public static final int NUMBER_OF_PLAYERS_MAX = 6;
+ public static final int NUMBER_OF_PLAYERS_MAX = RiskGame.MAX_PLAYERS;
public static final int NUMBER_OF_TERRITORIES = 42,
NUMBER_OF_CONTINENTS = 6,
NUMBER_OF_ROUNDS_PREDICTED = 5,
@@ -98,11 +101,11 @@
}
public int getMissionCount() {
- return game.getAllMissionsVector().size();
+ return game.getNoMissions();
}
- public Vector getMissions() {
- return game.getAllMissionsVector();
+ public List<Mission> getMissions() {
+ return game.getMissions();
}
public int getPlayerCount() {
@@ -109,7 +112,7 @@
return game.getNoPlayers();
}
- public Vector getPlayers() {
+ public List<Player> getPlayers() {
return game.getPlayers();
}
@@ -121,8 +124,8 @@
// YURA old code used to call: game.getNewCardState(card1,card2,card3);
return game.getTradeAbsValue(card1.getName(), card2.getName(), card3.getName(), game.getCardMode());
}
-
- public Card[] getBestCardCombination(Vector cards) {
+
+ public Card[] getBestCardCombination(List cards) {
if (this.canTrade()) {
Card[] bestCombination = new Card[3];
int bestScore = 1;
@@ -149,7 +152,7 @@
return null;
}
}
-
+
private boolean doCombinationContainWildcard(Card[] combination) {
if (combination[0].equals("wildcard") ||
combination[1].equals("wildcard") ||
@@ -174,8 +177,8 @@
this.attackerArmies = game.getAttacker().getArmies();
int armiesLost = oldAttackerArmies == -1 ? 0 : oldAttackerArmies - attackerArmies;
- int checkValue = game.getLastBattle_ArmiesLost();
- if (armiesLost != checkValue) throw new IllegalStateException("value missmatch " + armiesLost + " != " + checkValue);
+ //int checkValue = game.getLastBattle_ArmiesLost();
+ //if (armiesLost != checkValue) throw new IllegalStateException("value missmatch " + armiesLost + " != " + checkValue);
return armiesLost;
}
@@ -183,9 +186,9 @@
public void resetLastBattle_ArmiesLost() {
attacker = null;
attackerArmies = -1;
- game.resetLastBattle_ArmiesLost();
+ //game.resetLastBattle_ArmiesLost();
}
-
+
public int getPlayerIndex(Player player) {
return this.getPlayers().indexOf(player);
}
@@ -193,13 +196,12 @@
public T_AISettings getAISettings() {
return aiSettings;
}
-
+
public int getNumberOfReinforcements(Player p){
int armies_received = Math.max((int)(p.getNoTerritoriesOwned()/3),3) + calcContinentReinforcements(p);
return armies_received;
-
}
-
+
public float calcReinforcementsFromCards(int numberOfCards) {
if (numberOfCards <= 10) {
return (float)reinforcementsFromCards[numberOfCards];
@@ -207,7 +209,7 @@
return 10;
}
}
-
+
public Vector<Integer> calcFutureReinforcements(Player player, int numberOfRounds) {
Vector<Integer> result = new Vector();
int numberOfRiskCards = player.getCards().size();
@@ -218,7 +220,7 @@
}
return result;
}
-
+
private int calcContinentReinforcements(Player p) {
// How many reinforcements does the player get from Continents?
int armies = 0;
@@ -230,16 +232,16 @@
}
return armies;
}
-
+
public double calcEstimatedArmyCost(int defendingArmies){
return 0.8534144 * defendingArmies - 0.2213413 * (1 - Math.pow(-0.525359, (double)defendingArmies));
}
-
+
public T_BattleOutcomeProbTable getBattleOutcomeProbTable() {
return battleOutcomeProbTable;
}
-
+
public boolean isPlayerDead(Player player){
if(player.getNoTerritoriesOwned() != 0){
return false;
@@ -290,7 +292,7 @@
return "24";
}
}
-
+
public boolean riskCardIsReceivedThisRound(Player p) {
return !(game.getDesrvedCard().equals(""));
}
Modified: RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_TrainingExampleWriter.java
===================================================================
--- RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_TrainingExampleWriter.java 2024-06-04 00:33:46 UTC (rev 2548)
+++ RiskAI/source/JRiskAI/src/risk/AI/Data_Structures/T_TrainingExampleWriter.java 2024-06-04 10:08:53 UTC (rev 2549)
@@ -519,8 +519,8 @@
beginTag("missions_estimates",data);
for (int p = 0; p < game.getPlayers().size(); p++) {
beginTag("player color=\""+T_Game.decentColorToString(((Player)game.getPlayers().get(p)).getColor())+"\"",data);
- for (int m = 0; m < game.getAllMissionsVector().size(); m++) {
- beginTag("mission type=\""+T_Game.decentMissionToString((Mission)game.getAllMissionsVector().get(m),null)+"\"",data);
+ for (int m = 0; m < game.getNoMissions(); m++) {
+ beginTag("mission type=\""+T_Game.decentMissionToString((Mission)game.getMissions().get(m),null)+"\"",data);
addToData(String.valueOf(missionEstimate.getEstimate(p,m)),data);
endTag("mission", data);
}
Modified: RiskAI/source/JRiskAI/src/risk/AI/Modules/InformationGivers/C_IG_Winning.java
===================================================================
--- RiskAI/source/JRiskAI/src/risk/AI/Modules/InformationGivers/C_IG_Winning.java 2024-06-04 00:33:46 UTC (rev 2548)
+++ RiskAI/source/JRiskAI/src/risk/AI/Modules/InformationGivers/C_IG_Winning.java 2024-06-04 10:08:53 UTC (rev 2549)
@@ -4,14 +4,20 @@
import net.yura.domination.engine.core.Country;
import net.yura.domination.engine.core.Mission;
import net.yura.domination.engine.core.Player;
-import risk.AI.Data_Structures.*;
+import risk.AI.Data_Structures.C_Timing;
import risk.AI.Data_Structures.Module_Output.O_IG_ContinentEstimate;
import risk.AI.Data_Structures.Module_Output.O_IG_MissionEstimate;
import risk.AI.Data_Structures.Module_Output.O_IG_WinningEstimate;
import risk.AI.Data_Structures.Module_Input.I_IG_WinningEstimate;
+import risk.AI.Data_Structures.T_Board;
+import risk.AI.Data_Structures.T_Game;
+import risk.AI.Data_Structures.T_Opp_RiskCards;
+import risk.AI.Data_Structures.T_TrainingExampleWriter;
import risk.AI.Modules.RoundPlanner.Planner.C_RP_Planner_AP_Cost;
-import risk.AI.Techniques.Pathfinding.*;
-import java.util.*;
+import java.util.List;
+import java.util.Random;
+import java.util.Vector;
+import risk.AI.Techniques.Pathfinding.AStar;
import trainer.trainers.WekaTrainer;
import trainingdataconverter.trainingdata.GameData;
import trainingdataconverter.trainingdata.IG_WinningData;
@@ -221,8 +227,8 @@
Vector<Integer> playerArmies = new Vector();
Vector<Integer> enemyArmies = new Vector();
Vector<Boolean> playerOwns = new Vector();
-
- Vector<Integer> numberOfPlayerReinforcements = game.calcFutureReinforcements(player, roundsToPredict);
+
+ List<Integer> numberOfPlayerReinforcements = game.calcFutureReinforcements(player, roundsToPredict);
Vector<Integer> numberOfEnemyReinforcements = calcNumberOfEnemyReinforcements(player, roundsToPredict);
float estimate;
@@ -282,7 +288,7 @@
numberOfEnemyReinforcements.add(0);
}
// For each enemy player, add his number of reinforcements to the total number of enemy reinforcements
- Vector<Integer> reinforcements = new Vector();
+ List<Integer> reinforcements = new Vector();
Player enemy = null;
for(int enemyIndex = 0; enemyIndex < game.getPlayerCount(); enemyIndex++) {
enemy = ((Player)game.getPlayers().get(enemyIndex));
@@ -470,8 +476,7 @@
data.setBeginningOfTurn(beginningOfTurn);
data.initBnWinningValueCalc();
output = new O_IG_WinningEstimate();
-
-
+
// output = new O_IG_WinningEstimate();
//String[] goalStateList = {"0.0;0.0", "0.0;0.2", "0.2;0.4", "0.4;0.6", "0.6;0.8", "0.8;1.0", "1.0;1.0"};
///AttributeStates goalStates = new AttributeStates(goalStateList);
@@ -591,7 +596,3 @@
}
}
-
-
-
-
Modified: RiskAI/source/TrainingDataConverter/src/trainingdataconverter/trainingdata/GameData.java
===================================================================
--- RiskAI/source/TrainingDataConverter/src/trainingdataconverter/trainingdata/GameData.java 2024-06-04 00:33:46 UTC (rev 2548)
+++ RiskAI/source/TrainingDataConverter/src/trainingdataconverter/trainingdata/GameData.java 2024-06-04 10:08:53 UTC (rev 2549)
@@ -1,5 +1,6 @@
package trainingdataconverter.trainingdata;
+import java.util.List;
import java.util.Vector;
import net.yura.domination.engine.core.Country;
import net.yura.domination.engine.core.Player;
@@ -134,7 +135,7 @@
this.score = new ScoreAttribute(0.0F);
}
- public GameData(Vector<Player> players, int currentPlayerIndex) {
+ public GameData(List<Player> players, int currentPlayerIndex) {
this();
this.numberOfPlayers = players.size();
this.playerColors = new String[6];
|