Class PredictSplitNode

java.lang.Object
net.sf.colossus.client.PredictSplitNode
All Implemented Interfaces:
Comparable<PredictSplitNode>

public class PredictSplitNode extends Object implements Comparable<PredictSplitNode>
Predicts splits for one enemy player, and adjusts predictions as creatures are revealed.
Author:
David Ripton, Kim Milvang-Jensen See docs/SplitPrediction.txt
  • Field Details

  • Constructor Details

  • Method Details

    • clearChildren

      private void clearChildren()
    • getMarkerId

      public String getMarkerId()
    • getFullName

      public String getFullName()
    • getChild1

      public PredictSplitNode getChild1()
    • getChild2

      public PredictSplitNode getChild2()
    • getParent

      public PredictSplitNode getParent()
    • getTurnCreated

      public int getTurnCreated()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getCreatures

      CreatureInfoList getCreatures()
      Return list of CreatureInfo
    • setCreatures

      void setCreatures(CreatureInfoList creatures)
    • getRemovedCreatures

      CreatureInfoList getRemovedCreatures()
      Return list of CreatureInfo
    • getCertainCreatures

      CreatureInfoList getCertainCreatures()
      Return list of CreatureInfo where certain == true.
    • numCertainCreatures

      int numCertainCreatures()
    • numUncertainCreatures

      int numUncertainCreatures()
    • allCertain

      boolean allCertain()
    • hasSplit

      boolean hasSplit()
    • getChildren

      List<PredictSplitNode> getChildren()
    • allDescendentsCertain

      boolean allDescendentsCertain()
      Return true if all of this node's children, grandchildren, etc. have no uncertain creatures
    • getAtSplitOrRemovedCreatures

      CreatureInfoList getAtSplitOrRemovedCreatures()
      Return list of CreatureInfo where atSplit == true, plus removed creatures.
    • getAfterSplitCreatures

      CreatureInfoList getAfterSplitCreatures()
      Return list of CreatureInfo where atSplit == false.
    • getCertainAtSplitOrRemovedCreatures

      CreatureInfoList getCertainAtSplitOrRemovedCreatures()
      Return list of CreatureInfo where both certain and atSplit are true, plus removed creatures.
    • getOtherChildMarkerId

      String getOtherChildMarkerId()
    • getHeight

      int getHeight()
    • superset

      static <T> boolean superset(List<T> big, List<T> little)
      Return true if big is a superset of little. Note that this treats repeated elements as distinct, i.e. if the little list contains two copies of something, then the big list has to contain two copies, too. It differs in that regard from Collection.containsAll(Collection) which is implemented in a fashion where this is not necessary (the specification as of JDK 1.5 is actually blurry on the matter).
    • revealCreatures

      void revealCreatures(List<CreatureType> cnl)
    • isLegalInitialSplitoff

      public boolean isLegalInitialSplitoff(List<CreatureType> types)
    • findAllPossibleSplits

      List<List<CreatureType>> findAllPossibleSplits(int childSize, List<CreatureType> knownKeep, List<CreatureType> knownSplit)
      Return a list of all legal combinations of splitoffs. Also update knownKeep and knownSplit if we conclude that more creatures are certain.
      Parameters:
      childSize -
      knownKeep -
      knownSplit -
      Returns:
    • safeEquals

      private static <T> boolean safeEquals(T obj1, T obj2)
    • chooseCreaturesToSplitOut

      List<CreatureType> chooseCreaturesToSplitOut(List<List<CreatureType>> possibleSplits)
      Decide how to split this legion, and return a list of creatures names to remove. Return empty list on error.
    • count

      int count(List<?> li, Object ob)
      Return the number of times ob is found in li
    • computeSplit

      void computeSplit(int childSize, List<CreatureType> knownKeep, List<CreatureType> knownSplit, CreatureInfoList keepList, CreatureInfoList splitList)
      Computes the predicted split of childsize, given that we may already know some pieces that are keept or spilt. Also makes the new CreatureInfoLists. Note that knownKeep and knownSplit will be altered, and be empty after call
      Parameters:
      childSize -
      knownKeep - certain creatures to keep
      knownSplit - certain creatures to split
      keepList - return argument
      splitList - return argument
    • split

      void split(int childSize, Legion otherLegion, int turn)
      Perform the initial split of a stack, and create the children
      Parameters:
      childSize -
      turn -
      otherMarkerId -
    • reSplit

      void reSplit()
      Recompute the split of a stack, taking advantage of any information potentially gained from the children
    • updateInitialSplitInfo

      void updateInitialSplitInfo(CreatureInfoList newList)
      This takes potentially new information about the legion's composition at split and applies the later changes to the legion to get a new predicton of contents. It then recursively resplits.
      Parameters:
      newList -
    • merge

      void merge(PredictSplitNode other)
      Recombine this legion and other, because it was not possible to move. They must share a parent. If either legion has the parent's markerId, then that legion will remain. Otherwise this legion will remain. Also used to undo splits.
    • addCreature

      void addCreature(CreatureType type)
    • removeCreature

      void removeCreature(CreatureType type)
    • removeCreatures

      void removeCreatures(List<CreatureType> creatureTypes)
    • compareTo

      public int compareTo(PredictSplitNode other)
      Specified by:
      compareTo in interface Comparable<PredictSplitNode>
    • subtractLists

      static <T> List<T> subtractLists(List<T> big, List<T> little)
    • count

      static int count(List<String> li, String name)
      Return the number of times name occurs in li
    • minCount

      static int minCount(List<List<String>> lili, String name)
      lili is a list of lists. Return the minimum number of times name appears in any of the lists contained in lili.