Package net.sf.colossus.ai
Class RationalAI
- java.lang.Object
-
- net.sf.colossus.ai.AbstractAI
-
- net.sf.colossus.ai.SimpleAI
-
- net.sf.colossus.ai.RationalAI
-
- All Implemented Interfaces:
AI
- Direct Known Subclasses:
HumanHaterRationalAI,MilvangAI
public class RationalAI extends SimpleAI
Simple implementation of a Titan AI- Author:
- Bruce Sherrod, David Ripton, Romain Dolbeau, Corwin Joy, extensively rewritten on 02-Oct-2003
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classRationalAI.BattleResultsclassRationalAI.CompCreaturesByValueNameprivate classRationalAI.LegionBoardMoveprivate classRationalAI.MoveFinder(package private) classRationalAI.MusteredCreatures-
Nested classes/interfaces inherited from class net.sf.colossus.ai.SimpleAI
SimpleAI.PowerSkill, SimpleAI.TriggerTimeIsUp
-
Nested classes/interfaces inherited from class net.sf.colossus.ai.AbstractAI
AbstractAI.AbstractAIOracle, AbstractAI.CreatureValueConstants, AbstractAI.MoveInfo
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<RationalAI.LegionBoardMove>bestMoveListprivate java.util.Iterator<RationalAI.LegionBoardMove>bestMoveListIterprivate java.util.Map<MasterHex,java.util.List<Legion>>[]enemyAttackMapprivate java.util.Map<java.lang.String,java.lang.Integer>evaluateMoveMap(package private) booleanI_HATE_HUMANS(package private) doubleKILLPOINTSprivate java.util.List<Legion>legionsToSplitprivate static java.util.logging.Loggerlogger(package private) static intRECRUIT_AT_7(package private) static intRECRUIT_FALSE(package private) static intRECRUIT_TRUE(package private) intTITAN_SURVIVAL-
Fields inherited from class net.sf.colossus.ai.SimpleAI
MIN_ITERATIONS, timeIsUp, timeLimit
-
Fields inherited from class net.sf.colossus.ai.AbstractAI
bec, client, cvc, hintSectionUsed, random, variant
-
-
Constructor Summary
Constructors Constructor Description RationalAI(Client client)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) RationalAI.MusteredCreatureschooseCreaturesToSplitOut(Legion legion, boolean at_risk)Decide how to split this legion, and return a list of Creatures to remove + status flag indicating if these creatures have mustered or notbooleanconcede(Legion legion, Legion enemy)choose whether legion should concede to enemy(package private) RationalAI.BattleResultsestimateBattleResults(Legion attacker, Legion defender, MasterHex hex)private RationalAI.BattleResultsestimateBattleResults(Legion attacker, Legion defender, MasterHex hex, CreatureType callable)private intevaluateCombat(Legion attacker, Legion defender, MasterHex hex)private intevaluateHexAttack(Legion attacker, MasterHex hex, int canRecruitHere)private intevaluateMove(Legion legion, MasterHex hex, int canRecruitHere, int depth, boolean addHexRisk)Memoizing wrapper for evaluateMoveInnerprivate intevaluateMoveInner(Legion legion, MasterHex hex, int canRecruitHere, int depth, boolean normalHexRisk)private doubleexpectedValueSplitLegion(LegionClientSide legion, LegionClientSide child_legion)private booleanfindMoveList(java.util.List<? extends Legion> legions, java.util.List<java.util.List<RationalAI.LegionBoardMove>> all_legionMoves, MultiSet<MasterHex> occupiedHexes, boolean teleportsOnly)private booleanfireSplits()Return true if done with all splits and callbacksbooleanflee(Legion legion, Legion enemy)choose whether legion should flee from enemyjava.util.List<SimpleAI.PowerSkill>getCombatList(Legion legion, MasterBoardTerrain terrain, boolean defender)private booleanhandleForcedSingleMove(Player player)private booleanhandleForcedSplitMoves(Player player)private booleanhandleVoluntaryMoves(Player player)Return true if we moved something and need to be called again.private doublehexRisk(Legion legion, MasterHex hex, boolean invert)booleanmasterMove()Return true if we need to run this method again after the server updates the client with the results of a move or mulligan.private static doubler3(double value)private doublerecruitValue(Legion legion, MasterHex hex, Legion enemy, MasterBoardTerrain terrain)Find value of recruiting, including possibly attacking an enemy set enemy = null to indicate no enemyprivate java.util.List<CreatureType>removeMustered(java.util.List<CreatureType> sortedCreatures)private java.util.List<CreatureType>sortCreaturesByValueName(Legion legion)booleansplit()make splits for current player.booleansplitCallback(Legion parent, Legion child)If parentId and childId are null, this is a callback to an undo split(package private) booleansplitOneLegion(Player player, Legion legion)Return true if done, false if waiting for callback.private booleansplitOneLegionCallback(LegionClientSide parent, LegionClientSide child)Return true if done, false if waiting for undo split-
Methods inherited from class net.sf.colossus.ai.SimpleAI
acquireAngel, battleMove, chooseRecruit, doInitialGameSplit, evaluateCritterMove_Defender, evaluateCritterMove_Rangestrike, evaluateCritterMove_Strike, evaluateCritterMove_Titan, evaluateLegionBattleMove, evaluateLegionBattleMoveAsAWhole, findBestLegionMove, findLegionMoves, findWeakestTwoCritters, getCreatureMoveLimit, getNativeValue, handleCarries, handleMulligans, muster, pickColor, pickEngagement, pickEntrySide, pickMarker, pickStrikePenalty, RATIO_DRAW, RATIO_LOSE_HEAVY_LOSS, RATIO_WIN_HEAVY_LOSS, RATIO_WIN_MINIMAL_LOSS, reinforce, retryFailedBattleMoves, setupTimer, strike, summonAngel
-
Methods inherited from class net.sf.colossus.ai.AbstractAI
buildEnemyAttackMap, cleanupBattle, couldRecruitUp, countCreatureAccrossAllLegionFromPlayer, findStrikeMap, generateDamageMap, generateLegionMoves, getAcqStepValue, getBattleStrike, getBattleUnit, getCaretaker, getHintedRecruitmentValue, getHintedRecruitmentValueNonTitan, getHintedRecruitmentValueNonTitan, getInitialSplitHint, getKillValue, getKillValue, getNumberOfWaysToTerrain, getVariantRecruitHint, hasOpponentNativeCreature, initBattle, isHumanLegion, makeLegionMove, rangeToClosestOpponent, setVariant
-
-
-
-
Field Detail
-
logger
private static final java.util.logging.Logger logger
-
I_HATE_HUMANS
boolean I_HATE_HUMANS
-
legionsToSplit
private final java.util.List<Legion> legionsToSplit
-
evaluateMoveMap
private final java.util.Map<java.lang.String,java.lang.Integer> evaluateMoveMap
-
bestMoveList
private java.util.List<RationalAI.LegionBoardMove> bestMoveList
-
bestMoveListIter
private java.util.Iterator<RationalAI.LegionBoardMove> bestMoveListIter
-
TITAN_SURVIVAL
final int TITAN_SURVIVAL
- See Also:
- Constant Field Values
-
RECRUIT_FALSE
static final int RECRUIT_FALSE
- See Also:
- Constant Field Values
-
RECRUIT_TRUE
static final int RECRUIT_TRUE
- See Also:
- Constant Field Values
-
RECRUIT_AT_7
static final int RECRUIT_AT_7
- See Also:
- Constant Field Values
-
KILLPOINTS
final double KILLPOINTS
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
RationalAI
public RationalAI(Client client)
-
-
Method Detail
-
r3
private static double r3(double value)
-
split
public boolean split()
Description copied from interface:AImake splits for current player. Return true if done
-
fireSplits
private boolean fireSplits()
Return true if done with all splits and callbacks
-
splitCallback
public boolean splitCallback(Legion parent, Legion child)
If parentId and childId are null, this is a callback to an undo split- Specified by:
splitCallbackin interfaceAI- Overrides:
splitCallbackin classSimpleAI
-
expectedValueSplitLegion
private double expectedValueSplitLegion(LegionClientSide legion, LegionClientSide child_legion)
-
splitOneLegion
boolean splitOneLegion(Player player, Legion legion)
Return true if done, false if waiting for callback.
-
splitOneLegionCallback
private boolean splitOneLegionCallback(LegionClientSide parent, LegionClientSide child)
Return true if done, false if waiting for undo split
-
recruitValue
private double recruitValue(Legion legion, MasterHex hex, Legion enemy, MasterBoardTerrain terrain)
Find value of recruiting, including possibly attacking an enemy set enemy = null to indicate no enemy
-
removeMustered
private java.util.List<CreatureType> removeMustered(java.util.List<CreatureType> sortedCreatures)
-
sortCreaturesByValueName
private java.util.List<CreatureType> sortCreaturesByValueName(Legion legion)
-
chooseCreaturesToSplitOut
RationalAI.MusteredCreatures chooseCreaturesToSplitOut(Legion legion, boolean at_risk)
Decide how to split this legion, and return a list of Creatures to remove + status flag indicating if these creatures have mustered or not
-
masterMove
public boolean masterMove()
Return true if we need to run this method again after the server updates the client with the results of a move or mulligan.- Specified by:
masterMovein interfaceAI- Overrides:
masterMovein classSimpleAI
-
findMoveList
private boolean findMoveList(java.util.List<? extends Legion> legions, java.util.List<java.util.List<RationalAI.LegionBoardMove>> all_legionMoves, MultiSet<MasterHex> occupiedHexes, boolean teleportsOnly)
-
handleVoluntaryMoves
private boolean handleVoluntaryMoves(Player player)
Return true if we moved something and need to be called again.
-
handleForcedSplitMoves
private boolean handleForcedSplitMoves(Player player)
-
handleForcedSingleMove
private boolean handleForcedSingleMove(Player player)
-
evaluateHexAttack
private int evaluateHexAttack(Legion attacker, MasterHex hex, int canRecruitHere)
-
evaluateMove
private int evaluateMove(Legion legion, MasterHex hex, int canRecruitHere, int depth, boolean addHexRisk)
Memoizing wrapper for evaluateMoveInner
-
evaluateMoveInner
private int evaluateMoveInner(Legion legion, MasterHex hex, int canRecruitHere, int depth, boolean normalHexRisk)
-
estimateBattleResults
RationalAI.BattleResults estimateBattleResults(Legion attacker, Legion defender, MasterHex hex)
-
estimateBattleResults
private RationalAI.BattleResults estimateBattleResults(Legion attacker, Legion defender, MasterHex hex, CreatureType callable)
-
flee
public boolean flee(Legion legion, Legion enemy)
Description copied from interface:AIchoose whether legion should flee from enemy
-
concede
public boolean concede(Legion legion, Legion enemy)
Description copied from interface:AIchoose whether legion should concede to enemy
-
getCombatList
public java.util.List<SimpleAI.PowerSkill> getCombatList(Legion legion, MasterBoardTerrain terrain, boolean defender)
-
-