Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
/**
 * 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;
}