void Start() { // Note: We're using the Bayes namespace up above ^^ // BayesDecider can handle 2 types of conditions // Discrete and Continuous // Discrete conditions are conditions with values that are 0-based and count up // ie True/False or an enumeration (like the outlook in the Golf example) // Discrete values are arbitrary (either 0 or 1 could be true), // just be consistent, start it at 0, and don't skip numbers (ie 0,1,2,3...) BayesDiscreteCondition outlook = new BayesDiscreteCondition( "Outlook", 3 ); BayesDiscreteCondition windy = new BayesDiscreteCondition( "Windy" ); // Continuous conditions are conditions with values that fall within a range // The values themselves don't really matter, but I don't think it can handle negative BayesContinuousCondition temp = new BayesContinuousCondition( "Temp" ); BayesContinuousCondition hum = new BayesContinuousCondition( "Humidity" ); // Here we assemble arrays of the discrete and continuous conditions to pass to the Decider // The order for discrete/coninuous conditions MUST be the same as the order in the data file! BayesDiscreteCondition[] discs = new BayesDiscreteCondition[ 2 ]; discs[ 0 ] = outlook; discs[ 1 ] = windy; BayesContinuousCondition[] conts = new BayesContinuousCondition[ 2 ]; conts[ 0 ] = temp; conts[ 1 ] = hum; // Here we create the decider, // and tell it what file to use and the name of the outcome (for debug printing) bd = new BayesDecider( "GolfTab.txt", "Play Golf" ); // Then we give it the conditions bd.SetConditions( conts, discs ); bd.Tab2Screen(); // Prints out the table for reference bd.BuildStats(); // Uses the data from the table to calculate values for conditions // Take a look at the Golf data file (Assets/Data/GolfTab.txt) to see some of its quirks // Discrete values are prefixed by "d" and continuous with a "c" // The outcome starts with an "o" // The first column in the data file is the outlook, with is an enum (0 = sunny, 1 = overcast, 2 = rainy) // The second column is windy, which is boolean (0 = true, 1 = false) // The third and fourth column are temperature and humidity which are continuous // The final column is the outcome (play or not) which is boolean as well // It's important to keep the order consistent and use the correct prefix or it will break! }
// Use this for initialization void Awake() { bd = new BayesDecider( "RepairTab.txt", "Repair Wall" ); }
void Start() { currObservation.outcome = -1; BayesDiscreteCondition enemyInWay = new BayesDiscreteCondition( "No Enemy In Way" ); BayesDiscreteCondition enemiesAtGate = new BayesDiscreteCondition( "No Enemies At Gate" ); BayesContinuousCondition gateHealth = new BayesContinuousCondition( "Gate Health" ); BayesContinuousCondition distance = new BayesContinuousCondition( "Distance" ); BayesDiscreteCondition[] discs = new BayesDiscreteCondition[ 2 ]; discs[ 0 ] = enemyInWay; discs[ 1 ] = enemiesAtGate; BayesContinuousCondition[] conts = new BayesContinuousCondition[ 2 ]; conts[ 0 ] = gateHealth; conts[ 1 ] = distance; bd = new BayesDecider( "RepairTab.txt", "Repair Wall" ); bd.SetConditions( conts, discs ); bd.BuildStats(); }
void Start() { gate = GameObject.Find("Gate").GetComponent<Health>(); currObservation.outcome = -1; BayesDiscreteCondition enemyInWay = new BayesDiscreteCondition( "No Enemy In Way" ); BayesDiscreteCondition enemiesAtGate = new BayesDiscreteCondition( "No Enemies At Gate" ); BayesContinuousCondition gateHealth = new BayesContinuousCondition( "Gate Health" ); BayesContinuousCondition distance = new BayesContinuousCondition( "Distance" ); BayesDiscreteCondition[] discs = new BayesDiscreteCondition[ 2 ]; discs[ 0 ] = enemyInWay; discs[ 1 ] = enemiesAtGate; BayesContinuousCondition[] conts = new BayesContinuousCondition[ 2 ]; conts[ 0 ] = gateHealth; conts[ 1 ] = distance; bd = GameObject.Find("BayesDecider").GetComponent<BayesDeciderRef>().getBayesDecider(); bd.SetConditions( conts, discs ); bd.BuildStats(); }