コード例 #1
0
ファイル: main.cpp プロジェクト: sub77/hobbycode
void mainLoop()
{
	//while (mCurrentTrialTime < mTrialLength)
	while (true)
	{
		Ogre::Real elapsedSimTime = 0;
		Ogre::Real elapsedRealTime = 0;
		gEngine.update(elapsedSimTime, elapsedRealTime);
		handleInput(elapsedRealTime);
		if (gEngine.quitApp())
		{
			return;
		}

		// Update sound effects at 50 Hz.
		const Ogre::Real soundUpdatePeriod = 0.02;
		static Ogre::Real soundUpdateTimer = 0;
		soundUpdateTimer -= elapsedSimTime;
		if (soundUpdateTimer <= 0)
		{
			gRobot->updateSoundEffects(soundUpdatePeriod);
			gCar->updateSoundEffects(soundUpdatePeriod);
			soundUpdateTimer = soundUpdatePeriod;
		}

		gRobot->updateVisuals(elapsedSimTime);
		updateOverlay();
		gAgentDebugger->updateVisuals();
	}

	//mAvgRewardPerStep = mAvgRewardPerStep * mPhysicsStepSize / 
	//	mCurrentTrialTime;
	//dataFile.storeData("trial", trial, (double)trial);
	//dataFile.storeData("avg reward per step", trial, 
	//	mAvgRewardPerStep);
	//printTrialAndRunStatus(run, trial, mAvgRewardPerStep);

	//std::cout << "Agent age = " << mPendulum->getAgent()->getAgeString() 
	//	<< std::endl;

	//dataFile.printToFile("./results/pendulum-performance.dat");
}
コード例 #2
0
ファイル: PendulumTest.cpp プロジェクト: sub77/hobbycode
void PendulumTest::startTest()
{
	SimulationEngine engine;
	if (!engine.init())
	{
		return;
	}

	// Get a pointer to the trial number overlay and make it visible.
	Ogre::OverlayManager::getSingleton().getByName("Verve/TrialNumber")->show();

	engine.setUpdateMode(SimulationEngine::SIMULATE_REAL_TIME_MULTIPLE, 1);
	engine.setCameraMoveSpeed(5);

	//// Set to capture frames at 29.97 fps.
	//engine.setUpdateMode(SIMULATE_CONSTANT_CHUNK, 0.0333667);

	engine.getSimulator()->setStepSize(mPhysicsStepSize);
	engine.getSimulator()->setGravity(opal::Vec3r(0, -9.81, 0));

	// Make sure we get notified at the end of each step.
	engine.getSimulator()->addPostStepEventHandler(this);

	// Create a static box for a ground plane.
	opal::Solid* boxSolid = engine.getSimulator()->createSolid();
	boxSolid->setStatic(true);
	boxSolid->setPosition(0, -1.5, 0);
	opal::BoxShapeData data;
	data.dimensions.set(6, 3, 6);
	boxSolid->addShape(data);
	engine.createPhysicalEntity("ground", "Plastic/Gray", boxSolid);

	DataFile dataFile(mNumTrialsPerRun);
	opal::Matrix44r initialTransform;
	initialTransform.translate(0, 1.2, 0);
	assert(NULL == mPendulum);
	mPendulum = new Pendulum(engine, initialTransform);

	mAgentDebugger = new AgentVisualDebugger(engine.getSceneManager());

	for (unsigned int run = 0; run < mNumRuns; ++run)
	{
		mPendulum->resetBodyAndCreateNewAgent();
		mAgentDebugger->setAgent(mPendulum->getAgent());

		for (unsigned int trial = 0; trial < mNumTrialsPerRun; ++trial)
		{
			updateOverlayData(trial);
			mPendulum->resetBodyAndSTM();
			mPendulum->randomizeState();
			mAvgRewardPerStep = 0;
			mCurrentTrialTime = 0;

			while (mCurrentTrialTime < mTrialLength)
			{
				Ogre::Real elapsedSimTime = 0;
				Ogre::Real elapsedRealTime = 0;
				engine.update(elapsedSimTime, elapsedRealTime);
				handleInput(elapsedRealTime, engine);
				if (engine.quitApp())
				{
					return;
				}

				mAgentDebugger->updateVisuals();
			}

			mAvgRewardPerStep = mAvgRewardPerStep * mPhysicsStepSize / 
				mCurrentTrialTime;
			dataFile.storeData("trial", trial, (float)trial);
			dataFile.storeData("avg reward per step", trial, 
				mAvgRewardPerStep);
			printTrialAndRunStatus(run, trial, mAvgRewardPerStep);

			//// Print value function data.
			//if (0 == run && 
			//	(trial == 0 || trial == 4 || trial == 19 || trial == 99))
			//{
			//	char fileStr[1024];
			//	sprintf(fileStr, "./results/pendulum-trial%d-value.dat", trial);
			//	mPendulum->getAgent()->saveValueData(400, fileStr);
			//	sprintf(fileStr, "./results/pendulum-trial%d-RBF.dat", trial);
			//	mPendulum->getAgent()->saveStateRBFData(fileStr);
			//}
		}

		std::cout << "Agent age = " << mPendulum->getAgent()->getAgeString() 
			<< std::endl;
	}

	dataFile.printToFile("./results/pendulum-performance.dat");
}