Beispiel #1
0
	void playback_local_PD()
	{
		std::ofstream timing_file("timing_local_PD.txt");

		std::string base_name = "../data/models/Box2D/spider_cinfigs/dump_transform";

		std::vector<Polygon> poly = readPolyFile("../data/models/Box2D/nazca_spider77.polys", 3);

		for(std::size_t i = 1001; i < 9999; ++i)
		{
			std::stringstream ss;
			ss << i;
			std::string ret;
			ss >> ret;
			std::size_t len = ret.length();
			for(std::size_t j = 0; j < 4 - len; ++j)
				ret = "0" + ret;

			std::string filename = base_name + ret + ".txt";

			std::string PD_file_name= std::string("PD_local") + ret + ".txt";


			std::ofstream PD_file(PD_file_name.c_str());

			std::vector<std::vector<std::pair<std::string, DataVector> > > frame = readDumpFile(filename);

			double timing_per_frame = 0;

			for(std::size_t j = 0; j < frame.size(); ++j)
			{
				std::cout << i << " " << j << std::endl;
				if(frame[j][0].first == "Wall" || frame[j][1].first == "Wall") continue;

				DataVector q = relative2D(frame[j][0].second, frame[j][1].second);

				boost::timer t;
				double pd = Collider2D::PDt(poly, poly, q);
				timing_per_frame += t.elapsed();
				PD_file << pd << " ";
			}

			timing_file << timing_per_frame << " ";
			timing_file.flush();

			PD_file.flush();
		}
	}
Beispiel #2
0
void NavMap::genNavMap(const sf::FloatRect &bounds) {
	genPolyFile(bounds);

	STARTUPINFO         siStartupInfo;
	PROCESS_INFORMATION piProcessInfo;

	memset(&siStartupInfo, 0, sizeof(siStartupInfo));
	memset(&piProcessInfo, 0, sizeof(piProcessInfo));

	siStartupInfo.cb = sizeof(siStartupInfo);

	CreateProcessA("Ext\\triangle.exe",    // Application name
		" -p -c -a160000 navMap",                 // Application arguments
		0,
		0,
		FALSE,
		CREATE_NO_WINDOW,
		0,
		0,                              // Working directory
		&siStartupInfo,
		&piProcessInfo);
	WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
	readPolyFile();
}
Beispiel #3
0
	void playback()
	{
		std::ofstream timing_file("timing_APD.txt");
		std::ofstream timing_construct_file("timing_construct_APD.txt");

		std::string base_name = "../data/models/Box2D/spider_cinfigs/dump_transform";

		std::vector<Polygon> poly = readPolyFile("../data/models/Box2D/nazca_spider77.polys", 3);

		for(std::size_t i = 0; i < 7; ++i)
			distance_weight[i] = 1;

		{
			double Ix, Iy;
			inertia(poly, Ix, Iy);
			double rotation_weight = sqrt(Ix * Ix + Iy * Iy);
			distance_weight[0] = 1; distance_weight[1] = 1; distance_weight[2] = rotation_weight;
		}


		ContactSpaceSE2 contactspace(poly, poly, 0.2 * (getCircle(poly).second + getCircle(poly).second));

		SVMLearner learner;

		learner.setC(50);
		learner.setScaler(contactspace.getScaler());
		learner.setUseScaler(true);
		learner.setGamma(50);
		std::vector<ContactSpaceSampleData> contactspace_samples = contactspace.uniform_sample(100000);
		std::ofstream scaler_file("scaler.txt");
		scaler_file << contactspace.getScaler() << std::endl;
		learner.learn(contactspace_samples, contactspace.active_data_dim());
		learner.save("model.txt");
		std::cout << empiricalErrorRatio(contactspace_samples, learner) << " " << errorRatioOnGrid(contactspace, learner, 20) << std::endl;

		Collider2D collider(poly, poly);

		// flann::HierarchicalClusteringIndex<ContactSpaceSE2::DistanceType>* query_index = learner.constructIndexOfSupportVectorsForQuery<ContactSpaceSE2, flann::HierarchicalClusteringIndex, flann::HierarchicalClusteringIndexParams>();


		int knn_k = 2; // 50;

		std::vector<ContactSpaceSampleData> support_samples;
		learner.collectSupportVectors(support_samples);
		ExtendedModel<ContactSpaceSE2, flann::HierarchicalClusteringIndex> extended_model = constructExtendedModelForModelDecisionBoundary<ContactSpaceSE2, SVMLearner, flann::HierarchicalClusteringIndex, flann::HierarchicalClusteringIndexParams>(contactspace, learner, support_samples, 0.01, knn_k);

		for(std::size_t i = 1001; i < 9999; ++i)
		{
			std::stringstream ss;
			ss << i;
			std::string ret;
			ss >> ret;
			std::size_t len = ret.length();
			for(std::size_t j = 0; j < 4 - len; ++j)
				ret = "0" + ret;

			std::string filename = base_name + ret + ".txt";

			std::string PD_file_name= std::string("PD_APD") + ret + ".txt";


			std::ofstream PD_file(PD_file_name.c_str());

			std::vector<std::vector<std::pair<std::string, DataVector> > > frame = readDumpFile(filename);

			double timing_per_frame = 0;

			for(std::size_t j = 0; j < frame.size(); ++j)
			{
				std::cout << i << " " << j << std::endl;

				if(frame[j][0].first == "Wall" || frame[j][1].first == "Wall") continue;

				boost::timer t;
				DataVector q = relative2D(frame[j][0].second, frame[j][1].second);
				if(collider.isCollide(q))
				{
					// QueryResult PD_result = PD_query(learner, contactspace, query_index, q);
					QueryResult PD_result = PD_query(learner, contactspace, extended_model.index, extended_model.samples, q);
					PD_file << PD_result.PD << " ";
				}
				else
				{
					PD_file << 0 << " ";
				}

				timing_per_frame += t.elapsed();
			}

			timing_file << timing_per_frame << " ";
			timing_file.flush();

			PD_file.flush();
		}
	}