action2ValuePair min_Value(int clr,int alpha, int beta){ action2 a2; if(terminal_Test()){ double util=currentState->utility(count); int d=currentState->depth; action2ValuePair a2v(chance[d]*util,a2); return a2v; } double v=10000; vector<colorNode> cn=generateColors(clr); vector<action2> actions=chaosActions(cn); int l=actions.size(); for(int i=0;i<l;i++){ nodecount++; action2 a=actions.at(i); chaosMove(a); double val=max_Value(alpha,beta).value; chaosDeMove(a); if(v>val){ v=val; a2=a; } if(v<alpha){ action2ValuePair a2v(v,a2); return a2v; } if(beta>v){ beta=v; } } action2ValuePair a2v(v,a2); return a2v; }
actionValuePair max_Value(double alpha, double beta){ action a2; if(terminal_Test()){ double util=currentState->utility(count); int d=currentState->depth; actionValuePair av(chance[d]*util,a2); return av; } double v=-10000; vector<action> actions=orderActions(); int l=actions.size(); for(int i=0;i<l;i++){ nodecount++; action a=actions.at(i); orderMove(a);//depth++ double val=min_Value(-1,alpha,beta).value; orderDeMove(a);//depth-- if(v<val){ v=val; a2=a; } if(v>beta){ actionValuePair av(v,a2); return av; } if(alpha<v){ alpha=v; } } actionValuePair av(v,a2); return av; }