Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
	}