Beispiel #1
0
int main()
{
    srand(time(NULL));
    data dat;
    readfile(dat, "../../data/ks_19_0");
    int items = dat[0].value;
    population *pop, popalpha;
    initialize_population(popalpha, items);
    pop = &popalpha;
    //print(*pop);

    bat best = get_best(*pop);

    int iterations = 200;
    while(iterations > 0){
        new_solutions(*pop,dat);
        calc_fitness(*pop, dat);
        if(getrand()> 0.5){
            best = get_best(*pop);
            move_bat(best, rand()%5, dat); // amplitude is 2
        }

        if(fitness(best, dat) > fitness((*pop).best, dat))
            (*pop).best = best;

        iterations--;
    }
    print(*pop);
}
Beispiel #2
0
void play(void) {
	/*points[CAPTURE] = 100;
	points[DUMP]	= 40;
	points[EXPLORE]	= 30;
	points[MINE]	= 40;*/

    act = ACT_EXPLORE;


	//main game loop
	while(true) {
		switch(act) {
			case ACT_EXPLORE:
				mined_balls = 0;
                explore();
				act = 1;
				break;
			case ACT_PLAY:
				//circle finished to 20s left, dump balls if too many.
				vps_update();
				if(vps_get_owner(bot.territory)!=team) {		//if not ours yet
					capture(bot.territory);			//capture it
				}
                else if(vps_get_balls(bot.territory)>0) {	//if it is ours and there are balls
					mine(bot.territory);						//get the balls
				}
                else if(mined_balls>=15){
                    act = 2;
                }
                else {
					//move to different territory NOT containg opponent
					go_territory(get_best(), MOVE_SPEED);
				}
				break;
			case ACT_DUMP:
				if(team==TEAM_BLUE) {
					if(bot.territory>=3)
						score(bot.territory);
					else if(bot.territory==2)
						score(3);
					else
						score(5);
				} else {
					if(bot.territory<3)
						score(bot.territory);
					else if(bot.territory==3)
						score(2);
					else
						score(0);
				}
				//TODO emergency ball dump before end
				//dump balls anyway even if we think we don't have any?
                act = 1;
				break;
		}
	}
}
Beispiel #3
0
void basic_optimizer::optimize(
		query_graph& qgraph)
{
	LOG_METHOD_TRACE;
	rule_based_optimizer::optimize(qgraph);

//	m_tm->print();

	enumerator *e = new enumerator( m_dd, m_tm );
	std::vector<op_node_ptr> plans = e->enumerate(qgraph);

	qgraph.set_root(get_best(plans));

	if (plans.size() > 1 )
		qgraph.set_swapable();
}
Beispiel #4
0
void Tree::print() const
{
  int threshold = root[active]->get_visits()/30;
  std::string sp = "  ";
  std::cerr << "Active tree: " << active << " " << get_size() <<" nodes.\n";
  print(root[active], threshold, 0);

  Node *best = get_best();
  std::cerr << "#Expected: " << best->get_value(1) << ", visits "
            << best->get_visits() << " PV:\n";

  bool side = !goban->get_side();
  for (Node *n = root[active]->get_best_child(); n; n = n->get_best_child()) {
      side ? std::cerr << "B" :  std::cerr << "W";
      n->print(goban->get_size());
      side = !side;
  }
  std::cerr << "\n";
}
int memcache_get (struct connection *c, const char *old_key, int old_key_len) {
  INIT;

  if (verbosity > 1) {
    fprintf (stderr, "memcache_get: key='%s', key_len=%d\n", old_key, old_key_len);
  }

  char *key;
  int key_len;

  eat_at (old_key, old_key_len, &key, &key_len);

  int mode = 0, st = 0;

  if (key_len >= 5 && !strncmp (key, "hints", 5)) {
    mode = 1;
    st = 5;
  }

#ifdef TYPES
  if (key_len >= 5 && !strncmp (key, "types", 5)) {
    mode = 2;
    st = 5;
  }

  if (key_len >= 11 && !strncmp (key, "hints_debug", 11)) {
    mode = 3;
    st = 11;
  }
#endif

  if (mode) {
    if (key[st] != '(' || key[key_len - 1] != ')') {
      RETURN(get, 0);
    }
    int len = key_len - st - 2;
    memcpy (buf, key + st + 1, sizeof (char) * len);
    buf[len] = 0;

    if (verbosity >= 2) {
      fprintf (stderr, "run get_hints (%s, %d)\n", buf, mode);
    }

    get_hints (buf, mode, MAX_VALUE_LEN);

    return_one_key (c, old_key, buf, strlen (buf));

    if (verbosity > 0) {
      if (mytime() + cmd_time > 0.005) {
        fprintf (stderr, "Warning!!! Search query (%s) was %lf seconds.\n", key, mytime() + cmd_time);
      }
    }

    RETURN(get, 0);
  }

  if (key_len >= 10 && !strncmp (key, "suggestion", 10)) {
    if (key[10] != '(' || key[key_len - 1] != ')') {
      RETURN(get, 0);
    }

    int len = key_len - 12;
    memcpy (buf, key + 11, sizeof (char) * len);
    buf[len] = 0;

    if (verbosity >= 2) {
      fprintf (stderr, "run get_suggestion (%s)\n", buf);
    }

    get_suggestion (buf, MAX_VALUE_LEN);

    return_one_key (c, old_key, buf, strlen (buf));

    if (verbosity > 0) {
      if (mytime() + cmd_time > 0.005) {
        fprintf (stderr, "Warning!!! Search query (%s) was %lf seconds.\n", key, mytime() + cmd_time);
      }
    }

    RETURN(get, 0);
  }

  if (key_len >= 5 && !strncmp (key, "stats", 5)) {
    int len = isearch_prepare_stats ();
    int len2 = prepare_stats (c, stats_buff + len, STATS_BUFF_SIZE - len);
    return_one_key (c, old_key, stats_buff, len + len2 - 1);

    return 0;
  }

  if (key_len >= 3 && !strncmp (key, "top", 3)) {
    int cnt;
    if (sscanf (key, "top%d", &cnt) == 1) {
      get_top (buf, cnt, MAX_VALUE_LEN);

      return_one_key (c, old_key, buf, strlen (buf));
    }
    RETURN(get, 0);
  }

  if (key_len >= 4 && !strncmp (key, "best", 4)) {
    int cnt;
    if (sscanf (key, "best%d", &cnt) == 1) {
      get_best (buf, cnt, MAX_VALUE_LEN);

      return_one_key (c, old_key, buf, strlen (buf));
    }
    RETURN(get, 0);
  }

  if (key_len >= 10 && !strncmp (key, "black_list", 10)) {
    if (key_len >= 16 && !strncmp (key, "black_list_force", 16)) {
      black_list_force();
    } else {
      char *s = black_list_get();
      int len = strlen (s);

      return_one_key (c, old_key, s, len);
    }

    RETURN(get, 0);
  }

  RETURN(get, 0);
}
Beispiel #6
0
int main(int argc, const char **argv) {
	/* Check uid */
	if (getuid() != 0) {
		fprintf(stderr,"Swifer must be run as root.\n");
		return 1;
	}
	/* Check config file for interface and dhcp */
	FILE *cfg;
	if ( (cfg=fopen(config,"r")) ) {
		char *line = calloc(MAX_LINE+1,sizeof(char));
		char *val = calloc(MAX_LINE+1,sizeof(char));
		while (fgets(line,MAX_LINE,cfg) != NULL) {
			if (line[0] == '#') continue;
			if (sscanf(line,"INTERFACE = %s",val))
				strncpy(ifname,val,IFNAMSIZ);
			else if (sscanf(line,"DHCP = %s",val))
				strncpy(dhcp,val,DHCPLEN);
			else if (sscanf(line,"PRE_UP = %s",val))
				hook_preup = strdup(val);
			else if (sscanf(line,"POST_UP = %s",val))
				hook_postup = strdup(val);
			else if (strncmp(line,"[NETWORKS]",10)==0)
				break;
		}
		free(line); free(val); fclose(cfg);
	}
	/* Get basic wifi info */
	we_ver = iw_get_kernel_we_version();
	skfd = iw_sockets_open();
	iw_get_basic_config(skfd,ifname,&cur);
	/* Bring up interface (eg "ip link set IFACE up") */
	struct ifreq req;
	int err;
	strncpy(req.ifr_name,ifname,IFNAMSIZ);
	if ( (err=ioctl(skfd,SIOCGIFFLAGS,&req)) ){
		int loop = 0;
		while ( (err=ioctl(skfd,SIOCGIFFLAGS,&req)) ) {
			usleep(100000);
			if (loop++ > 50) break;
		}
		if (err) {
			close(skfd);
			return 2;
		}
	}
	req.ifr_flags |= IFF_UP;
	if (ioctl(skfd,SIOCSIFFLAGS,&req)) {
		close(skfd); return 3;
	}
	/* Processes command line arguments */
	int i;
	for (i = 1; i < argc; i++) {
		if (strncmp(argv[i],"ad",2)==0) mode |= MODE_ADD;
		else if (strncmp(argv[i],"au",2)==0) mode |= MODE_AUTO;
		else if (strncmp(argv[i],"hi",2)==0) mode |= MODE_HIDDEN;
		else if (strncmp(argv[i],"an",2)==0) mode |= (MODE_ANY | MODE_AUTO);
		else if (strncmp(argv[i],"re",2)==0) mode |= (MODE_RECONNECT | MODE_AUTO);
		else if (strncmp(argv[i],"ve",2)==0) mode |= MODE_VERBOSE;
		else if (strncmp(argv[i],"wa",2)==0) mode |= MODE_WAIT;
		else if (strncmp(argv[i],"de",2)==0) {
			if (argc > i+1) remove_network(argv[i+1]);
		}
		else fprintf(stderr,"[%s] Ignoring unknown parameter: %s\n",
			argv[0],argv[i]);
	}
	if ( (mode & MODE_VERBOSE) && (mode & MODE_AUTO) ) mode &= ~MODE_VERBOSE;
	/* Scan and select network */
	iw_scan(skfd,ifname,we_ver,&context);
	wireless_scan *ws;
	if (mode & MODE_AUTO) {
		if (mode && MODE_WAIT) {
			int loops;
			/* keep trying for up to 5 minutes */
			for (loops = 0; loops < 30 && !(ws=get_best()); ++loops)
				sleep(TIMEOUT);
		}
		else ws = get_best();
	}
	else ws = show_menu();
	const char *arg[4];
	if (ws) { /* Stop any current processes then connect to "ws" */
		arg[0] = killall; arg[1] = dhcp; arg[2] = NULL;
		if (fork()==0) {
			fclose(stdout); fclose(stderr);
			execvp(arg[0],(char * const *) arg);
		}
		arg[1] = wpa_sup;
		if (fork()==0) {
			fclose(stdout); fclose(stderr);
			execvp(arg[0],(char * const *) arg);
		}
		sleep(1);
		if ( (mode & MODE_ADD) && is_known(ws) ) mode &= ~MODE_ADD;
		if (ws->b.key_flags == 2048) mode |= MODE_SECURE;
		mode_t pre = umask(S_IWGRP|S_IWOTH|S_IRGRP|S_IROTH);
		ws_connect(ws);
		umask(pre);
	}
	else if ( !(mode & MODE_RECONNECT) ) {
		fprintf(stderr,"[swifer] no suitable networks found.\n");
		return 5;
	}
	/* Keep alive to reconnect? */
	iw_sockets_close(skfd);
	if (mode & MODE_RECONNECT) {
		if (fork() == 0) {
			setsid();
			int level = THRESHOLD + 1, ret;
			char scanline[256];
			snprintf(scanline,255,"%%*[^\n]\n%%*[^\n]\n%s: %%*d %%d.",ifname);
			FILE *procw;
			while (level > THRESHOLD) {
				sleep(TIMEOUT);
				procw = fopen(PROC_NET_WIRELESS,"r");
				ret = fscanf(procw,scanline,&level);
				fclose(procw);
				if (ret != 1) level = 0;
			}
			arg[0] = argv[0]; arg[1] = re; arg[2] = an; arg[3] = NULL;
			if ( !(mode & MODE_ANY)) arg[2] = NULL;
			execvp(arg[0],(char * const *) arg);
		}
	}
	if (hook_preup) free(hook_preup);
	if (hook_postup) free(hook_postup);
	return 0;
}