int max_level(int f,int level,int alpha,int beta) { int ev,pf,i,j,all,tmp,p; int ban_cpy[101]; ev=0; for(i=11;i<=88;i++) ban_cpy[i]=ban[i]; if(level==0 && e==ON){ ev+=evl()*7; tmp=sekisa(); if(com==0){ev=-10000;return ev;} else if((man+com)<=D)ev-=tmp*31; ev+=cuti()*128; ev+=corner()*2048; ev+=xuti()*256; ev+=enableput()*87; ev+=Hen1(); ev+=Hen2(); return ev; } else if(level==0) return (sekisa()); pf=OFF;tmp=-10000; for(j=0;j<=60;j++){ all=0; p=tbl[j]; all=check(p,COM,OFF); if(all){ pf=ON; all=check(p,COM,ON); tmp=min_level(OFF,level-1,alpha,beta); if(alpha<tmp) alpha=tmp; for(i=11;i<89;i++) ban[i]=ban_cpy[i]; } if(alpha>=beta) return alpha; } if (pf!=OFF) return (alpha); if(f==ON) return (sekisa()); return min_level(ON,level-1,alpha,beta); }
extern int min_max(int level ,int alpha,int beta,int c) { int ban_cpy[101]; int sumi,j,ev,put,i,pos,all,X1,X2,X3; pos=put=sumi=0; maxe=-10000; X1=0; for (i=0;i<=100;i++) ban_cpy[i]=ban[i]; c=sekisa(); c=man+com; for(j=0;j<60;j++) { all=sumi=0; put=tbl[j]; if (ban[put]!=0)continue; //if((put==11 || put==18 || put==81 || put==88) && (c<D)){sumi=1;X1=315;} // else if((put==22 || put==27 || put==72 || put==77) && (c<D)){ // sumi=1; // X1=-512; //} // else if((put==12 || put==17 || put==21 || put==28 || put==71 || put==78 || put==82 || put==87 )&&(c<=35)){sumi=1;X1=-253;} //else if((put==12 || put==17 || put==21 || put==28 || put==71 || put==78 || put==82 || put==87 )&&(c<D)){sumi=1;X1=-128;} all=check(put,COM,OFF); if(all){ all=check(put,COM,ON); ev=min_level(OFF,level-1,alpha,beta); //ev+=sumi*X1; ev+=rand()%3; sumi=0; if(ev>maxe){ maxe=ev; pos=put; eval_score=maxe; } }for(i=11;i<89;i++) ban[i]=ban_cpy[i]; } printf("maxe:%d#pos:%d",maxe,pos); eval=maxe; return pos; }
/** * resource_test_5 - Tests resource framework APIs when two devices requests * the same "latency" resource for same or different levels * @res_name: Name of the resource requested * @req_lat1: Device 1 latency requested for the resource * @req_lat2: Device 2 latency requested for the resource * @ref_table: Pointer to the reference latency table for the given resource * * Two devices requests the "lat" resource for the specified levels, * verifies if the resource's current level is same as that of the * closest lower reference level to the lowest level requested among the * two devices and releases the resource * * Returns 0 on success, -1 on failure */ static int resource_test_5(const char *res_name, unsigned long req_lat1, unsigned long req_lat2, unsigned long *ref_table) { int ret, result = TEST_PASS, i; struct device dev1, dev2; int cur_lvl, req_lat; printk(KERN_INFO "Entry resource_test_5 \n"); ret = resource_request(res_name, &dev1, req_lat1); if (ret) { printk(KERN_ERR "FAILED!!!! dev1 resource request for %s failed" " with value %d\n", res_name, ret); return TEST_FAIL; } ret = resource_request(res_name, &dev2, req_lat2); if (ret) { printk(KERN_ERR "FAILED!!!! dev2 resource request for %s failed" " with value %d\n", res_name, ret); resource_release(res_name, &dev1); return TEST_FAIL; } cur_lvl = resource_get_level(res_name); req_lat = (int) min_level(req_lat1, req_lat2); /* using the ref table to find the appropriate PD state */ for (i = 0; i < 3; i++) { if (ref_table[i] < req_lat) break; } if (!enable_off_mode && i == PD_LATENCY_OFF) i = PD_LATENCY_RET; /* Inactive state is not being tested */ else if (i == 2) i = PD_LATENCY_ON; if (cur_lvl != i) { printk(KERN_ERR "FAILED!!!! resource %s current level:%d" " req lvl:%d\n", res_name, cur_lvl, i); result = TEST_FAIL; } ret = resource_release(res_name, &dev1); if (ret) { printk(KERN_ERR "FAILED!!!! dev1 resource release for %s failed" " with value %d\n", res_name, ret); result = TEST_FAIL; } ret = resource_release(res_name, &dev2); if (ret) { printk(KERN_ERR "FAILED!!!! dev2 resource release for %s failed" " with value %d\n", res_name, ret); result = TEST_FAIL; } if (!result) printk(KERN_INFO "resource_test_5 PASSED for %s\n", res_name); return result; }