Ejemplo n.º 1
0
int map_init()
{//map initialisation function. creates or defines multiple bitmap buffers

	map_buffer=create_bitmap(mapbuffer_width_in_tiles * tile_width, mapbuffer_height_in_tiles * tile_width);
	screen_buffer=create_bitmap(1024,768);
	tile_buffer=load_bitmap("tiles.bmp",0);
	menu_buffer=create_bitmap(100,768);
	get_tiles();
	return 0;
}
Ejemplo n.º 2
0
void getQ(double Q[ACTION_COUNT], float s[DECAY_COUNT], double weights[], unsigned int num_tilings, unsigned int memory_size) {
    int tile_array[feature_count];
    unsigned int i, j;
    
    for (i = 0; i < ACTION_COUNT; i++) {
        get_tiles(s, i, tile_array, num_tilings, memory_size);
        
        Q[i] = 0;
        for (j = 0; j < feature_count; j++) {
            Q[i] += weights[tile_array[j]];
        }
    }
}
Ejemplo n.º 3
0
int main()
{
	InputImageType::Pointer im = readImage<InputImageType>("C:/Users/arun/Research/Farsight/exe/bin/CF_1_inverted_bg_sub.tif");
	FILE *fp = fopen("C:/Users/arun/Research/Farsight/exe/bin/seeds.txt","r");

	//IteratorType initer(im,im->GetLargestPossibleRegion());
	//initer.GoToBegin();
	//
	//for(;!initer.IsAtEnd(); ++initer)
	//{
	//	initer.Set(transfer_function1(initer.Get()));
	//}
	//
	//writeImage<InputImageType>(im,"C:/Users/arun/Research/Farsight/exe/bin/hp2_cropped2_filtered.tif");
	//
	//return 0;
	typedef itk::SymmetricSecondRankTensor<double,3> HessianType;
	typedef itk::Hessian3DToVesselnessMeasureImageFilter<float> MeasureType;
	typedef itk::Image<HessianType,3> HessianImageType;
	typedef itk::MultiScaleHessianBasedMeasureImageFilter< InputImageType, HessianImageType, FloatImageType> VesselnessFilterType;
	
	std::vector<InputImageType::RegionType> in1,in2,out1,out2;

	get_tiles(im->GetLargestPossibleRegion().GetSize(),1500,1500,1500,100,100,10,in1,in2,out1,out2);
	
	InputImageType::Pointer om;
/*
	om = InputImageType::New();
	om->SetRegions(im->GetLargestPossibleRegion());
	om->Allocate();
	for(int counter = 0; counter < in1.size(); counter++)
	{
		InputImageType::Pointer imtile = InputImageType::New();//
		imtile->SetRegions(in2[counter]);
		imtile->Allocate();

		in1[counter].Print(std::cout);
		in2[counter].Print(std::cout);
		IteratorType iter1(im,in1[counter]);
		IteratorType iter2(imtile,in2[counter]);
		for(iter1.GoToBegin(),iter2.GoToBegin();!iter1.IsAtEnd(); ++iter1,++iter2)
		{
			iter2.Set(iter1.Get());
		}

		VesselnessFilterType::Pointer vfilt = VesselnessFilterType::New();
		MeasureType::Superclass::Pointer measure = MeasureType::New();
		
		vfilt->SetInput(imtile);
		vfilt->SetHessianToMeasureFilter((VesselnessFilterType::HessianToMeasureFilterType *)measure);
		vfilt->SetSigmaMinimum(3.0);
		vfilt->SetSigmaMaximum(5.0);
		vfilt->SetNumberOfSigmaSteps(3);
		vfilt->SetSigmaStepMethod(VesselnessFilterType::EquispacedSigmaSteps);
		vfilt->Update();
		FloatImageType::Pointer omtile = vfilt->GetOutput();
		
		typedef itk::ImageRegionIterator<FloatImageType> FloatIteratorType;
		FloatIteratorType iter3;
		iter1 = IteratorType(om,out1[counter]);
		iter3 = FloatIteratorType(omtile,out2[counter]);
		for(iter1.GoToBegin(),iter3.GoToBegin();!iter1.IsAtEnd();++iter1,++iter3)
		{
			iter1.Set(iter3.Get());
		}
	}
	writeImage<InputImageType>(om,"C:/Users/arun/Research/Farsight/exe/bin/vesselnesstest.tif");
*/
	om = readImage<InputImageType>("C:/Users/arun/Research/Farsight/exe/bin/vesselnesstest.tif");
	typedef itk::BinaryBallStructuringElement<InputImageType::PixelType,3> StructElementType;
	typedef itk::GrayscaleDilateImageFilter<InputImageType,InputImageType,StructElementType> FilterType1;
	FilterType1::Pointer minfilt = FilterType1::New();
	minfilt->SetInput(om);
	FilterType1::RadiusType radius;
	radius[0] = 1;
	radius[1] = 1;
	radius[2] = 1;
	StructElementType strel;
	strel.SetRadius(radius);
	minfilt->SetKernel(strel);
	minfilt->Update();

	InputImageType::Pointer seed_out  = InputImageType::New();
	seed_out->SetRegions(om->GetLargestPossibleRegion());
	seed_out->Allocate();
	seed_out->FillBuffer(0);

	int thresh_value = 6;
	int number_of_seeds = 200;
	int tnum_seeds = 0;

	typedef itk::ImageRegionIteratorWithIndex<InputImageType> IndexIteratorType;

	IndexIteratorType it1(minfilt->GetOutput(),minfilt->GetOutput()->GetLargestPossibleRegion());
	IteratorType it2(om,om->GetLargestPossibleRegion());

	for(it2.GoToBegin();!it2.IsAtEnd(); ++it2)
	{
		if(it2.Get()>thresh_value)
			tnum_seeds++;
	}
	printf("tnum_seeds = %d\n",tnum_seeds);
	IteratorType it3(seed_out,seed_out->GetLargestPossibleRegion());
	IteratorType it4(im,im->GetLargestPossibleRegion());

	std::vector<mdl::fPoint3D> seeds;
	seeds.clear();
	/*for(it1.GoToBegin(),it2.GoToBegin(),it3.GoToBegin(),it4.GoToBegin();!it1.IsAtEnd();++it1,++it2,++it3,++it4)
	{
		if(it1.Get()==it2.Get() && it4.Get() > 150)
		{
			it3.Set(255);
			InputImageType::IndexType index = it1.GetIndex();
			mdl::fPoint3D seed1;
			seed1.x = index[0];
			seed1.y = index[1];
			seed1.z = index[2];
			seeds.push_back(seed1);
		}
	}*/

	seeds.clear();
	
	while(!feof(fp))
	{
		mdl::fPoint3D seed1;
		fscanf(fp,"%f %f %f",&seed1.x,&seed1.y,&seed1.z);
		if(feof(fp))
			break;
		seed1.x*=1;
		seed1.y*=1;
		seeds.push_back(seed1);
	}
	fclose(fp);
	printf("Seeds.size = %d\n",seeds.size());
	//scanf("%*d");
	mdl::vtkFileHandler * fhd1 = new mdl::vtkFileHandler();
	fhd1->SetNodes(&seeds);
	std::vector<mdl::pairE> nullpairs;
	fhd1->SetLines(&nullpairs);
	std::string outFilename1 = "C:/Users/arun/Research/Farsight/exe/bin/mst_input.vtk";
	fhd1->Write(outFilename1.c_str());
	delete fhd1;


	int edgeRange = 50;
	int morphStrength = 0;
	mdl::MST *mst = new mdl::MST( im );
	mst->SetDebug(false);
	mst->SetUseVoxelRounding(false);
	mst->SetEdgeRange(edgeRange);
	mst->SetPower(1);
	mst->SetSkeletonPoints( &seeds );
	// can choose different weight
	//mst->CreateGraphAndMST(1);
	mst->CreateGraphAndMST(5);
	mst->ErodeAndDialateNodeDegree(morphStrength);

	std::vector<mdl::fPoint3D> nodes = mst->GetNodes();
	std::vector<mdl::pairE> bbpairs = mst->BackboneExtract();

	delete mst;

	std::cerr << "Saving\n";

	//****************************************************************
	// TREE WRITER
	mdl::vtkFileHandler * fhd2 = new mdl::vtkFileHandler();
	fhd2->SetNodes(&nodes);
	fhd2->SetLines(&bbpairs);
	std::string outFilename2 = "C:/Users/arun/Research/Farsight/exe/bin/mst_tree.vtk";
	fhd2->Write(outFilename2.c_str());
	delete fhd2;
	scanf("%*d");

	writeImage<InputImageType>(seed_out,"C:/Users/arun/Research/Farsight/exe/bin/seedimage.tif");
		
}
Ejemplo n.º 4
0
bool Reversi::make_move(string move){
	//check size of move
	//cout << "Making move!\n";
	//cout << "size of move:" <<  sizeof(move) << endl;
	if(move.size() != 2)
		return false;
	//check if user has chosen side
	//cout << "Move sized correctly!\n";
	//cout << "current player:" << current_player << endl;
	if(current_player == 'n')
		return false;

	//split move into correct data types
	//cout << "Player has been set!\n";
	//cout << "Move string: " << move << endl;

	Position current_move;
	if(isalpha(move[0])) {
		current_move.column = get_number_of_letter(move[0]);
		current_move.row = move[1]-'0'-1;
	}
	else{
		current_move.row = get_number_of_letter(move[0]);
		current_move.column = move[1]-'0'-1;
	}
	//cout << "row: " << current_move.row << endl;
	//cout << "column: " << current_move.column << endl;

	// check if valid move
	bool possible_move_check = false;
	for(unsigned int i=0; i< available_moves.size(); i++)
		if(available_moves[i].row == current_move.row && available_moves[i].column == current_move.column)
			possible_move_check = true;

	if(!possible_move_check)
		return false;
	//cout << "Move is valid!\n";

	// save previous state
	// only need to support 10 undos (20 total saved states)
	if(previous_states.size() >= 20)
		previous_states.pop_back();
	
	previous_states.push_front({board, available_moves, white_score, black_score, current_player});
	previous_move = move;

	//check all directions
	//if valid in a direction flip all appropriate tiles
	vector<Position> all_positions;
	vector<Position> temp_positions;
	all_positions.push_back(current_move);
	int x_step = 0;
	int y_step = -1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check above
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	y_step = 1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check below
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	y_step = 0;
	x_step = 1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check right
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	x_step = -1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check left
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	y_step = -1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check top left
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	x_step = 1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check top right
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	y_step = 1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check bottom right
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	x_step = -1;
	temp_positions = get_tiles(current_move, x_step, y_step);		//check bottom left
	for(unsigned int i=0; i<temp_positions.size(); i++)
		all_positions.push_back(temp_positions[i]);
	for(unsigned int i=0; i<all_positions.size(); i++)
		board[all_positions[i].row][all_positions[i].column] = current_player;
	update_score();
	toggle_player();
	available_moves = get_available_moves();

	if(available_moves.size() == 0 && !(is_game_over())) {
		toggle_player();
		available_moves = get_available_moves();
	}
}
Ejemplo n.º 5
0
int main(int argc, char *argv[]) {
    /* Initialize variables used by the Agent thread */
    int p;
    int a, aprime;
    float s[DECAY_COUNT], sprime[DECAY_COUNT];
    int reward;
    int tile_array[feature_count];
    unsigned int i;
    double delta;
    double Q[ACTION_COUNT];
    
    // Learning parameters
    double stepsize = 0.1 / (float) num_tilings;
    double lambda = 0.9;
    double gamma = 0.9;
    
    struct sigaction act;
    struct sigaction oldact;

    act.sa_handler = endProgram;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
    sigaction(SIGINT, &act, &oldact);
    
    srand(0);
    pthread_mutex_init(&pktNumMutex, NULL);
    pthread_mutex_init(&actionMutex, NULL);
    pthread_mutex_init(&rewardMusicMutex, NULL);

	trajectoryFile.open("trajectory.txt"); 

    if(!trajectoryFile.is_open())
		printf("Trajectory file could not be opened.\n");

    /* Set up variables used by individual policy components */
    // --- begin initialize variables for Tians code
    timeStep = 0;
    leftCount=0, rightCount =0;
    diff = 0;
    actionToTake = 1;
    count = 0;
    alignPhase = 1;
    notInRightMode = false; 
    // --- end initialize variables for Tians code
    
    // --- begin initialize variables for Amirs code
    cwTurn = 1;
    // --- end initialize variables for Amirs code
    
    // initialize weights
    // first try to read the weight file and if there is no file, then initialize randomly
    if(!read_weights(weights)){
	    for (i = 0; i < memory_size; i++) {
		weights[i] = -100.0/num_tilings;
	    }
    }

    for (i = 0; i < memory_size; i++) {
		e[i] = 0;
    }
	
    // Set up timing + packet number
    p = pktNum;

    // State based on IR byte
    s[0] = redDecay;
    s[1] = greenDecay;
    s[2] = bumpDecay;
    s[3] = leftDecay;
    s[4] = rightDecay;
    s[5] = forwardDecay;
    s[6] = backwardDecay;
    s[7] = stopDecay;
    s[8] = chargeDecay;
    a = sAPrime[p];//epsilonGreedy(weights, s, epsilon);

	// Use a lock to ensure action is changed separately
    pthread_mutex_lock( &actionMutex );
    action = a; // sets up action to be taken by csp thread
    pthread_mutex_unlock( &actionMutex );    
    prevPktNum = myPktNum;
    // Main agent loop
    while (TRUE) {
        int rval = getNextPacket();
        if (rval == -1) {
            write_weights(weights);
            printf("Complete! Weights saved to weights.txt. Ran %d episodes.", episode + 1);
            break;
            
        } else if (rval == 1) {
            // Episode complete
            for (i = 0; i < memory_size; i++) {
                e[i] = 0;
            }        
            episode++;
        }
        
        // Get the packet number
        p = pktNum;
        
        // Update decays
        updateDecay(p, prevPktNum, myPktNum);
        //printf("ir: %d\n", sIRbyte[p]);
        
        // Reward of -1 per step
        reward = -1;
        
        // Determine the next observation
        // TODO: Change this to new state representation
        sprime[0] = redDecay;
        sprime[1] = greenDecay;
        sprime[2] = bumpDecay;
        sprime[3] = leftDecay;
        sprime[4] = rightDecay;
        sprime[5] = forwardDecay;
        sprime[6] = backwardDecay;
        sprime[7] = stopDecay;
        sprime[8] = chargeDecay;
        aprime = sAPrime[p];//epsilonGreedy(weights, sprime, epsilon);
        
        // Set action variable
        pthread_mutex_lock( &actionMutex );
        action = aprime; // sets up action to be taken by csp thread
        pthread_mutex_unlock( &actionMutex );  
    
        // Get Q values
        getQ(Q, s, weights, num_tilings, memory_size);
        delta = reward - Q[a];
            
        getQ(Q, sprime, weights, num_tilings, memory_size);
        delta += gamma * Q[aprime];
        
        // Update weights
        get_tiles(s, a, tile_array, num_tilings, memory_size);
        for (i = 0; i < feature_count; i++) {
            e[tile_array[i]] = 1;
        }
        
        //printf("Docking: s a r s' a':%d %d %d %d %d\n", s, a, reward, sprime, aprime);
        for (i = 0; i < memory_size; i++ ) {
            weights[i] += stepsize * delta * e[i];
            e[i] *= lambda;
        }
        
        // Decay sensor traces
        performDecay();
        
        for (i = 0; i < DECAY_COUNT; i++) {
            s[i] = sprime[i];
        }
        a = aprime;
        prevPktNum = myPktNum;
        
    }
    return 0;
}
Ejemplo n.º 6
0
Game
play_game(const Options& options, Rng& rng)
{
    static const boost::regex re_url("^(?:http://)?([^/]+)(/.*)$");

    HTTPConnection connection(options.server_name);
    connection.proxy = options.proxy;
    const PTree& initial_json = connection.get_initial_state_json(options);
    //std::cout << initial_json;

    boost::match_results<std::string::const_iterator> what;
    if (!regex_search(initial_json.get<std::string>("playUrl"), what, re_url))
        throw std::runtime_error("can't parse play url");
    const std::string play_server_name(what[1].first, what[1].second);
    const std::string play_end_point(what[2].first, what[2].second);

    const std::string& view_url = initial_json.get<std::string>("viewUrl");
    std::cout << "view game at " << view_url << std::endl;
    double start_time = get_double_time();

    if (options.collect_map) { // collect maps
        const Tiles tiles = get_tiles(initial_json.get_child("game.board"));
        const HashedPair<Tiles> hashed_tiles(tiles);
        std::stringstream ss;
        ss << "map_" << std::hex << hashed_tiles.hash << std::dec << ".txt";
        std::cout << "saving " << ss.str() << std::endl;
        std::ofstream handle(ss.str().c_str());
        handle << hashed_tiles.value;
        handle.close();
    }

    Game game(initial_json);

#if defined(BOTUCT) || defined(BOTMULTI)
    Bot bot(game, options.uct_constant, options.max_mc_depth, rng);
#elif defined(BOTRANDOM)
    Bot bot(game, rng);
#else
    Bot bot(game);
#endif

#if defined(REPORTING)
    Reports reports;
#endif

    while (!game.is_finished())
    {
        OmpFlag continue_flag(true);

        std::cout << std::endl;
        std::cout << "======================================== " << clock_it(get_double_time() - start_time) << std::endl;

        game.status(std::cout);

        std::cout << "++++++++++++++++++++++++++++++++++++++++ " << clock_it(get_double_time() - start_time) << std::endl;
#if defined(REPORTING)
        Report report_aa = bot.crunch_it_baby(game, continue_flag, start_time, TURN_DURATION);
        report_aa.type = 1;
        reports.push_back(report_aa);
#else
        bot.crunch_it_baby(game, continue_flag, start_time, TURN_DURATION);
#endif

        const Direction direction = bot.get_move(game);
        std::cout << "bot direction " << direction << std::endl;

        bot.advance_game(game, direction);
        //game.status(std::cout);

        std::cout << "---------------------------------------- " << clock_it(get_double_time() - start_time) << std::endl;

        std::cout << "view game at " << view_url << std::endl;

        PTree new_json;
        double request_start_time;
        double request_end_time;
#if defined(OPENMP_FOUND)
        #pragma omp parallel sections default(shared) shared(new_json, request_end_time, request_start_time, continue_flag, play_end_point, play_server_name, start_time, bot, game)
        {

            #pragma omp section
#endif
            {
                request_start_time = get_double_time();
                new_json = connection.get_new_state_json(play_end_point, direction);
                request_end_time = get_double_time();

                continue_flag.reset();
            }

#if defined(OPENMP_FOUND)
            #pragma omp section
            {
#if defined(REPORTING)
                Report report_bb = bot.crunch_it_baby(game, continue_flag, start_time, 4);
                report_bb.type = 2;
                reports.push_back(report_bb);
#else
                bot.crunch_it_baby(game, continue_flag, start_time, 4);
#endif
            }
        }
#endif

        game.state.update(new_json);
        game.update(new_json);

        std::cout << "request took " << clock_it(request_end_time-request_start_time) << std::endl;

        //game.status(std::cout);

        std::cout << "======================================== " << clock_it(get_double_time() - start_time) << std::endl;
        start_time = get_double_time();
    }

    assert( game.is_finished() );

#if defined(REPORTING)
    save_report_file(reports, "report.txt");
#endif

    return game;
}