void ch_att::run(double riskRate) { long xx,yy,mx=0,my=0; double max=-(1e100),value; for (int i=0;i<=sp;i++) for (int j=0;j<=i;j++) for (int d1=-1;d1<=1;d1+=2) for (int d2=-1;d2<=1;d2+=2) { xx=x+j*d1; yy=y+(i-j)*d2; if (!legal(xx,yy) || (g[xx][yy]!=EMPTY && g[xx][yy]!=myID)) continue; value=-riskRate*risk(xx,yy)+(1-riskRate)*benefit(xx,yy); if (value>max) { mx=xx; my=yy; } } move(mx,my); }
int KmerTree::getMinRiskIndexKmer(vector<int>& sequence, vector<int>& taxaIndices, vector<double>& probabilities){ try { int numProbs = (int)probabilities.size(); vector<double> G(numProbs, 0.2); //a random sequence will, on average, be 20% similar to any other sequence; not sure that this holds up for kmers; whatever. vector<double> risk(numProbs, 0); for(int i=1;i<numProbs;i++){ //use if you want the outlier group if (m->getControl_pressed()) { return 0; } G[i] = tree[taxaIndices[i]]->getSimToConsensus(sequence); } double minRisk = MOTHURMAX; int minRiskIndex = 0; for(int i=0;i<numProbs;i++){ if (m->getControl_pressed()) { return 0; } for(int j=0;j<numProbs;j++){ if(i != j){ risk[i] += probabilities[j] * G[j]; } } if(risk[i] < minRisk){ minRisk = risk[i]; minRiskIndex = i; } } return minRiskIndex; } catch(exception& e) { m->errorOut(e, "KmerTree", "getMinRiskIndexKmer"); exit(1); } }
void FuzzyAITest(void) { AI::Fuzzy::Logic health("Health"); health.getSet("Bad")->add(AI::Fuzzy::Set::Member(0.0f,1.0f)); health.getSet("Bad")->add(AI::Fuzzy::Set::Member(0.3f,1.0f)); health.getSet("Bad")->add(AI::Fuzzy::Set::Member(0.6f,0.0f)); health.getSet("Good")->add(AI::Fuzzy::Set::Member(0.4f,0.0f)); health.getSet("Good")->add(AI::Fuzzy::Set::Member(0.7f,1.0f)); health.getSet("Good")->add(AI::Fuzzy::Set::Member(1.0f,1.0f)); AI::Fuzzy::Logic armour("Armour"); armour.getSet("Inadequate")->add(AI::Fuzzy::Set::Member(0.0f, 1.0f)); armour.getSet("Inadequate")->add(AI::Fuzzy::Set::Member(0.2f, 1.0f)); armour.getSet("Inadequate")->add(AI::Fuzzy::Set::Member(0.4f, 0.0f)); armour.getSet("Marginal")->add(AI::Fuzzy::Set::Member(0.3f, 0.0f)); armour.getSet("Marginal")->add(AI::Fuzzy::Set::Member(0.5f, 1.0f)); armour.getSet("Marginal")->add(AI::Fuzzy::Set::Member(0.7f, 0.0f)); armour.getSet("Adequate")->add(AI::Fuzzy::Set::Member(0.6f, 0.0f)); armour.getSet("Adequate")->add(AI::Fuzzy::Set::Member(0.8f, 1.0f)); armour.getSet("Adequate")->add(AI::Fuzzy::Set::Member(1.0f, 1.0f)); AI::Fuzzy::Logic risk("Risk"); risk.getSet("Low")->add(AI::Fuzzy::Set::Member(0.0f, 1.0f)); risk.getSet("Low")->add(AI::Fuzzy::Set::Member(0.2f, 1.0f)); risk.getSet("Low")->add(AI::Fuzzy::Set::Member(0.4f, 0.0f)); risk.getSet("Med")->add(AI::Fuzzy::Set::Member(0.3f, 0.0f)); risk.getSet("Med")->add(AI::Fuzzy::Set::Member(0.5f, 1.0f)); risk.getSet("Med")->add(AI::Fuzzy::Set::Member(0.7f, 0.0f)); risk.getSet("High")->add(AI::Fuzzy::Set::Member(0.6f, 0.0f)); risk.getSet("High")->add(AI::Fuzzy::Set::Member(0.8f, 1.0f)); risk.getSet("High")->add(AI::Fuzzy::Set::Member(1.0f, 1.0f)); AI::Fuzzy::Set::Ptr a = risk.getSet(0.35f, AI::Fuzzy::Logic::MAX); AI::Fuzzy::Set::Ptr b = risk.getSet(0.35f, AI::Fuzzy::Logic::MIN); AI::Fuzzy::Set::Ptr c = risk.getSet(0.35f, AI::Fuzzy::Logic::RAND); AI::Fuzzy::Set::Member currHealth(0.45f), currArmour(0.65f); float badHealth = health.getSet("Bad")->membership(currHealth.value()); float goodHealth = health.getSet("Good")->membership(currHealth.value()); float inadequateArmour = armour.getSet("Inadequate")->membership(currArmour.value()); float marginalArmour = armour.getSet("Marginal")->membership(currArmour.value()); float adequateArmour = armour.getSet("Adequate")->membership(currArmour.value()); AI::Fuzzy::EvalRule::Ptr healthGood(new AI::Fuzzy::EvalRule(health.getSet("Good"), currHealth)); AI::Fuzzy::Rule::Ptr armourAdequate(new AI::Fuzzy::EvalRule(armour.getSet("Adequate"), currArmour)); AI::Fuzzy::Rule::Ptr healthGoodAndArmourAdequate(new AI::Fuzzy::AndRule(healthGood, armourAdequate)); AI::Fuzzy::EvalRule::Ptr healthBad(new AI::Fuzzy::EvalRule(health.getSet("Bad"), currHealth)); AI::Fuzzy::Rule::Ptr armourMarginal(new AI::Fuzzy::EvalRule(armour.getSet("Marginal"), currArmour)); AI::Fuzzy::Rule::Ptr healthBadAndArmourMarginal(new AI::Fuzzy::OrRule(healthBad, armourMarginal)); AI::Fuzzy::EvalRule::Ptr armourInadequate(new AI::Fuzzy::EvalRule(armour.getSet("Inadequate"), currArmour)); AI::Fuzzy::Rule::Ptr healthBadAndArmourInadequate(new AI::Fuzzy::AndRule(healthBad, armourInadequate)); AI::Fuzzy::RuleSet ruleset; ruleset.add(AI::Fuzzy::RuleSet::Pair(risk.getSet("Low"), healthGoodAndArmourAdequate)); ruleset.add(AI::Fuzzy::RuleSet::Pair(risk.getSet("Med"), healthBadAndArmourMarginal)); ruleset.add(AI::Fuzzy::RuleSet::Pair(risk.getSet("High"), healthBadAndArmourInadequate)); float centroid = ruleset.apply(10); }