⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cqtcontrol.cpp

📁 强化学习算法(R-Learning)难得的珍贵资料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void CQTControl::removeAgentListener(CSemiMDPListener *listener)
{
	std::list<CSemiMDPListener *>::iterator it;
	std::list<bool>::iterator it2 = selectedListeners->begin();
	int i = 0;

	for (it = agentListenerList->begin(); it != agentListenerList->end(); it++, i++, it2++)
	{
		if (*it == listener)
		{
			agentListeners->removeItem(i);
			agentListenerList->erase(it);
			selectedListeners->erase(it2);
		}
	}
}*/

void CQTControl::controllerChanged(int index)
{
	std::list<CAgentController *>::iterator it;
	int i = 0;

	CAgentController *controller = NULL;
	if (index == 0)
	{
		if (testSuite)
		{
			controller = testSuite->getController();
		}
	}
	else
	{
		index --;
		for (it = agentControllerList->begin(); it != agentControllerList->end(), i < index; it++, i++)
		{
		}
		controller = *it;
	}
	

	startSimulationMutex->lock();

	agent->setController(controller);

	startSimulationMutex->unlock();
}
/*
void CQTControl::listenersChanged(void)//QListBoxItem * currentItem)
{
	std::list<CSemiMDPListener *>::iterator it;
	std::list<bool>::iterator itSel;
	int i = 0;

	startSimulationMutex->lock();

	for (itSel = selectedListeners->begin(),it = agentListenerList->begin(); it != agentListenerList->end(); it++, i++, itSel++)
	{
		if (agentListeners->item(i)->selected() != (*itSel))
		{
			(*itSel) = agentListeners->item(i)->selected();
			if (*itSel)
			{
				agent->addSemiMDPListener(*it);
			}
			else
			{
				agent->removeSemiMDPListener(*it);
			}
		}
	}

	startSimulationMutex->unlock();
}*/

void CQTControl::setTestSuite(CTestSuite *testSuite)
{
	this->testSuite = testSuite;
	if (parameterCalculator)
	{
		delete parameterCalculator;
	}

	testSuiteName->setText(testSuite->getTestSuiteName().c_str());

	if (testCollection)	
	{
		char parameterFileName[100];
		char evaluateOutput[100];
		char learnDataDirectory[250];	

	
		sprintf(parameterFileName, "%s\\%s_params.txt", testCollection->testSuiteDirectory, testSuite->getTestSuiteName().c_str());
		sprintf(evaluateOutput, "%s\\%s_eval.txt", testCollection->testSuiteDirectory, testSuite->getTestSuiteName().c_str());
		sprintf(learnDataDirectory, "%s\\LearnData\\", testCollection->testSuiteDirectory);

		parameterCalculator = new CTestSuiteParameterCalculator(testSuiteEvaluator, testSuite);

	/*	if (parameterCalculator->getNumEvaluatedParameters() > 0)
		{
			testSuite->setParameters(parameterCalculator->getBestCalculatedParameters());
		}
	*/
	}
	if (agentControllers->currentItem() == 0)
	{
		agent->setController(testSuite->getController());
	}

	setParameters(testSuite);
}

CTestSuite  *CQTControl::getTestSuite()
{
	return testSuite;
}

void CQTControl::setParameters(CParameters *parameters)
{
	QString line;
	
	testSuite->setParameters(parameters);
	
	parametersEdit->clear();
	/*for (int i = 0; i < testSuite->getNumParameters(); i++)
	{
		parametersEdit->insert(QString(testSuite->getParameterName(i).c_str()) + QString(": ") + QString::number(testSuite->getParameterFromIndex(i)) + "\n");
	}

	if (parameterCalculator)
	{
		rlt_real value = parameterCalculator->getParametersValue(parameters);
		char str_val[20];
		sprintf(str_val, "%f", value);
		testSuiteValue->setText(QString::number(value));
		learnDataFilenameEdit->setText(QString(parameterCalculator->getDataFileName(parameters).c_str()));
	}*/
}


void CQTControl::chooseNewTestSuiteClicked(void)
{
	if (testCollection)
	{
		int result = testSuiteChooser->exec();

		if (result == QDialog::Accepted)
		{
			CTestSuite *testSuite = testSuiteChooser->getChoosedTestSuite();
			if (testSuite)
			{
				setTestSuite(testSuite);
			}
		}
	}
	
}

void CQTControl::nextParameters(void)
{
	if (parameterCalculator)
	{
		/*int index = parameterCalculator->getParametersIndex(testSuite) + 1;		if (index < parameterCalculator->getNumEvaluatedParameters())
		{
			setParameters(parameterCalculator->getParametersFromIndex(index));
		}*/
	}
}

void CQTControl::previousParameters(void)
{
	if (parameterCalculator)
	{
		/*int index = parameterCalculator->getParametersIndex(testSuite) - 1;
		if (index >= 0)
		{
			setParameters(parameterCalculator->getParametersFromIndex(index));
		}*/
	}

}

void CQTControl::resetLearnDataClicked(void)
{
	if (testSuite)
	{
		testSuite->resetLearnedData();
	}
}

void CQTControl::saveLearnDataClicked(void)
{
	QString filename = learnDataFilenameEdit->text();
	FILE *learnDataFile = fopen(filename, "r");
	if (learnDataFile)
	{
		int answer = QMessageBox::question(this, "File already Exists", "Are you sure you want to overwrite the file?", QMessageBox::Yes,
			QMessageBox::No);
		if (answer == QMessageBox::No)
		{
			return;
		}
	}
	fclose(learnDataFile);

	learnDataFile = fopen(filename, "w");

	if (learnDataFile)
	{
		testSuite->saveLearnedData(learnDataFile);
	}
	else
	{
		QMessageBox::warning(this, "Error", "Couldn't write File.", QMessageBox::Ok, QMessageBox::NoButton);
	}
	fclose(learnDataFile);
}

void CQTControl::loadLearnDataClicked(void)
{
	QString filename = learnDataFilenameEdit->text();
	FILE *learnDataFile = fopen(filename, "r");

	if (learnDataFile)
	{
		testSuite->loadLearnedData(learnDataFile);
		fclose(learnDataFile);
	}
	else
	{
		QMessageBox::warning(this, "Error", "Couldn't open File.", QMessageBox::Ok, QMessageBox::NoButton);		
	}

}

void CQTControl::startLearningClicked(void)
{
	if (threadMode == LEARN)
	{
		startSimulationMutex->lock();

		threadMode = 0;

		startSimulationMutex->unlock();
	}
	else
	{
		startSimulationMutex->lock();

		threadMode = LEARN;
		startSimulationCondition->wakeAll();

		startSimulationMutex->unlock();
	}
}

void CQTControl::browseButtonClicked(void)
{
	QString s = QFileDialog::getOpenFileName(
		"/",
		"All Files (*.*)",
		this,
		"open file dialog",
		"Choose a file" );
	learnDataFilenameEdit->setText(s);
}

void CQTControl::newParametersButtonClicked(void)
{
	if (parameterCalculator)
	{
		QString parameterText = parametersEdit->text();
		string parameterStr(parameterText.ascii());
		stringstream stream(parameterStr);

		char paramName[250];
		rlt_real paramValue;

		while(!stream.eof())
		{
			stream >> paramName >> paramValue;
			if (strlen(paramName) > 2)
			{
				paramName[strlen(paramName) - 1] = '\0';

				if (!stream.bad() && testSuite->getParameterIndex(paramName) >= 0)
				{
					testSuite->setParameter(paramName, paramValue);
				}
			}
		}

/*		if (parameterCalculator->getParametersIndex(testSuite) >= 0)
		{
			QMessageBox::warning(this, "Warning", "Parameters already exist.", QMessageBox::Ok, QMessageBox::NoButton);
		}*/
		setParameters(testSuite);
	}
}

void CQTControl::getBestParametersButtonClicked(void)
{
	if (parameterCalculator)
	{
//		testSuite->setParameters(parameterCalculator->getBestCalculatedParameters());
		setParameters(testSuite);
	}
}


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -