亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cagent.cpp

?? 強化學習算法(R-Learning)難得的珍貴資料
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// Copyright (C) 200
// Gerhard Neumann (gerhard@igi.tu-graz.ac.at)

//                
// This file is part of RL Toolbox.
// http://www.igi.tugraz.at/ril_toolbox
//
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
// 3. The name of the author may not be used to endorse or promote products
//    derived from this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#include "cagent.h"
#include "cepisode.h"
#include "ril_debug.h"
#include "ccontinuousactions.h"
#include <assert.h>

#ifdef WIN32

#include <conio.h>

bool RIL_Toolbox_KeyboardHit()
{
	bool result = _kbhit() != 0;
	if (result)
	{
		while (_kbhit() != 0) _getch();
	}
	return result;
}

void RIL_Toolbox_Set_Keypress()
{
}

void RIL_Toolbox_Reset_Keypress()
{
}

#else // UNIX

#include <poll.h>
#include <termios.h>
#include <unistd.h>

static struct termios RIL_Toolbox_stored_settings;

void RIL_Toolbox_Set_Keypress()
{
    struct termios new_settings;

    tcgetattr(0, &RIL_Toolbox_stored_settings);
    new_settings = RIL_Toolbox_stored_settings;
    /* Disable canonical mode, and set buffer size to 1 byte */
    new_settings.c_lflag &= (~ICANON);
    new_settings.c_cc[VTIME] = 0;
    new_settings.c_cc[VMIN] = 1;
    tcsetattr(0, TCSANOW, &new_settings);
    return;
}

void RIL_Toolbox_Reset_Keypress()
{
    tcsetattr(0, TCSANOW, &RIL_Toolbox_stored_settings);
    return;
}

bool RIL_Toolbox_KeyboardHit()
{
	pollfd p;
	p.fd = STDIN_FILENO;
    p.events = POLLIN;
    int numfds = poll(&p, 1, 1);
	return (numfds && p.revents);
}

#endif // WIN32

CSemiMDPSender::CSemiMDPSender()
{
	SMDPListeners = new std::list<CSemiMDPListener *>();
}

CSemiMDPSender::~CSemiMDPSender()
{
	delete SMDPListeners;
}

void CSemiMDPSender::addSemiMDPListener(CSemiMDPListener *listener)
{
	if (!isListenerAdded(listener))
	{
		SMDPListeners->push_back(listener);
	}
}

void CSemiMDPSender::removeSemiMDPListener(CSemiMDPListener *listener)
{
	SMDPListeners->remove(listener);
}

bool CSemiMDPSender::isListenerAdded(CSemiMDPListener *listener)
{
	for (std::list<CSemiMDPListener *>::iterator it = SMDPListeners->begin(); it != SMDPListeners->end(); it++) 
	{
		if ((*it) == listener)
		{
			return true;
		}
	}
	return false;
}

void CSemiMDPSender::startNewEpisode()
{
	for (std::list<CSemiMDPListener *>::iterator it = SMDPListeners->begin(); it != SMDPListeners->end(); it++) 
	{
		if ((*it)->enabled)
		{
			(*it)->newEpisode();
		}
	}
}

void CSemiMDPSender::sendNextStep(CStateCollection *lastState, CAction *action, CStateCollection *currentState)
{
	int i = 0;
	clock_t ticks1, ticks2;

	for (std::list<CSemiMDPListener *>::iterator it = SMDPListeners->begin(); it != SMDPListeners->end(); it++, i++) 
	{
	   if ((*it)->enabled)
	   {
			ticks1 = clock();
			(*it)->nextStep(lastState, action, currentState);
			ticks2 = clock();
			DebugPrint('t', "Time needed for listener %d: %d\n", i,ticks2-ticks1);
	   }
	}
}

void CSemiMDPSender::sendIntermediateStep(CStateCollection *lastState, CAction *action, CStateCollection *currentState)
{
	for (std::list<CSemiMDPListener *>::iterator it = SMDPListeners->begin(); it != SMDPListeners->end(); it++) 
	{
	   (*it)->intermediateStep(lastState, action, currentState);
	}
}


CSemiMarkovDecisionProcess::CSemiMarkovDecisionProcess() : CDeterministicController(new CActionSet()) 
{
	this->lastAction = NULL;

	currentSteps = 0;
	currentEpisodeNumber = 0;

	totalSteps = 0;
}

CSemiMarkovDecisionProcess::~CSemiMarkovDecisionProcess()
{
	delete actions;
}

/*
For the intermediate steps within an Extendedaction all the States occured while the ExtendedAction hasn't been finished, are also send with as the tuple 
Intermediate_State-Action-current_State. The duration of the Extendedaction gets also reduced in the intermediate Steps. 
*/
/** When the given action is finished (only MultiStepAction has the ability to be not finished) the step is sended to al Listeners. The Method also updates currentSteps.
@see CSemiMDPListener
*/
void CSemiMarkovDecisionProcess::sendNextStep(CStateCollection *lastState, CAction *action, CStateCollection *currentState)
{
	currentSteps++;
	totalSteps ++;

	bool finished = true;
	int duration = 1;

	// Action has finished ?
	if (action->isType(MULTISTEPACTION))
	{
		CMultiStepActionData *multiAction = dynamic_cast<CMultiStepAction *>(action)->getMultiStepActionData();
		finished = multiAction->finished;
		// get Duration
		duration = multiAction->duration;

		if (action->isType(PRIMITIVEACTION))
		{
			// if there was a multistep-primitiv action, the intermediate steps hasn't been
			// recognized, so update currentSteps
			currentSteps += duration - 1;
		}
	}

	if (finished)
	{
		CDeterministicController::nextStep(lastState, action, currentState);	

		// No ExtendedAction, send normal Step
		CSemiMDPSender::sendNextStep(lastState, action, currentState);
	}
}


CAction* CSemiMarkovDecisionProcess::getLastAction()
{
	return lastAction;
}


void CSemiMarkovDecisionProcess::startNewEpisode()
{
	CDeterministicController::newEpisode();
	
	CSemiMDPSender::startNewEpisode();

	currentSteps = 0;
	currentEpisodeNumber ++;

	isFirstStep = true;

}
	

void CSemiMarkovDecisionProcess::addAction(CAction *action)
{
	actions->add(action);
	actionDataSet->addActionData(action);
}

CHierarchicalSemiMarkovDecisionProcess::CHierarchicalSemiMarkovDecisionProcess(CEpisode *loggedEpisode) : CSemiMarkovDecisionProcess(), CStateModifiersObject(loggedEpisode->getStateProperties())
{
	this->currentEpisode = loggedEpisode;
	pastState = new CStateCollectionImpl(currentEpisode->getStateProperties());
	currentState = new CStateCollectionImpl(currentEpisode->getStateProperties());

	addStateModifiers(currentEpisode->getStateModifiers());
}

CHierarchicalSemiMarkovDecisionProcess::CHierarchicalSemiMarkovDecisionProcess(CStateProperties *modelProperties, std::list<CStateModifier *> *modifiers) :CSemiMarkovDecisionProcess(), CStateModifiersObject(modelProperties)
{
	this->currentEpisode = NULL;

	pastState = new CStateCollectionImpl(modelProperties);
	currentState = new CStateCollectionImpl(modelProperties);

	if (modifiers)
	{
		addStateModifiers(modifiers);
	}
}


CHierarchicalSemiMarkovDecisionProcess::~CHierarchicalSemiMarkovDecisionProcess()
{
	delete pastState;
	delete currentState;
}

void CHierarchicalSemiMarkovDecisionProcess::addStateModifier(CStateModifier *modifier)
{
	pastState->addStateModifier(modifier);
	currentState->addStateModifier(modifier);

	CStateModifiersObject::addStateModifier(modifier);
}

void CHierarchicalSemiMarkovDecisionProcess::removeStateModifier(CStateModifier *modifier)
{
	pastState->removeStateModifier(modifier);
	currentState->removeStateModifier(modifier);

	CStateModifiersObject::removeStateModifier(modifier);
}

void CHierarchicalSemiMarkovDecisionProcess::sendNextStep(CAction *action)
{

	CDeterministicController::nextStep(pastState, action, currentState);	
	CSemiMarkovDecisionProcess::sendNextStep(pastState, action, currentState);


	if (action->isType(EXTENDEDACTION))
	{
		CExtendedAction *mAction = dynamic_cast<CExtendedAction *>(action);
		if (mAction->getMultiStepActionData()->finished && mAction->sendIntermediateSteps && currentEpisode != NULL)
		{
			// send the Intermediate Steps and the "rlt_real" Step of the ExtendedAction
		
			int oldDuration = mAction->getDuration();
			int episodeIndex = currentEpisode->getNumSteps() - 1;

			CAction *interAction = currentEpisode->getAction(episodeIndex);

			// set new duration of the extendedAction
			mAction->getMultiStepActionData()->duration = interAction->getDuration();

			// Send intermediate Steps
			if (mAction->sendIntermediateSteps)
			{
			
				interAction = currentEpisode->getAction(episodeIndex);

				// set new duration of the extendedAction
				mAction->getMultiStepActionData()->duration = interAction->getDuration();

				while (mAction->getMultiStepActionData()->duration < oldDuration)
				{
					assert(episodeIndex > 0);

					currentEpisode->getStateCollection(episodeIndex, pastState);
					CSemiMDPSender::sendIntermediateStep(pastState, mAction, currentState);	
					
					episodeIndex --;

					// set new duration of the extendedAction

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线观看日韩欧美| 亚洲精品视频一区二区| 色88888久久久久久影院野外 | 日本久久电影网| 成人av在线影院| 成人午夜在线播放| 91在线高清观看| 91亚洲国产成人精品一区二三 | 亚洲午夜私人影院| 亚洲福利一区二区三区| 亚洲大片免费看| 天天操天天干天天综合网| 蜜桃久久av一区| 激情综合色综合久久综合| 国模冰冰炮一区二区| 成人动漫中文字幕| 在线这里只有精品| 91精品国产一区二区人妖| 欧美xxx久久| 中文字幕第一区第二区| 一区二区三区**美女毛片| 亚洲电影视频在线| 久久99精品久久久久久动态图| 国产在线精品一区二区三区不卡 | 成人美女在线观看| 色狠狠综合天天综合综合| 91精品国产综合久久蜜臀| 精品剧情在线观看| 综合久久久久久| 三级久久三级久久久| 国内外成人在线| 蜜桃av一区二区三区| 高清不卡一区二区| 国产剧情一区在线| 欧美亚洲一区二区在线| 欧美大片拔萝卜| 国产亚洲成aⅴ人片在线观看| 中文字幕亚洲欧美在线不卡| 日韩影视精彩在线| 99久久久精品| 精品久久久三级丝袜| 亚洲精品国产成人久久av盗摄| 精品一区二区三区视频在线观看| 色综合久久综合网欧美综合网| 91精品国产综合久久久久| 国产精品麻豆欧美日韩ww| 日韩影院精彩在线| 色综合天天狠狠| 国产亚洲婷婷免费| 免费在线观看不卡| 欧美午夜片在线观看| 国产丝袜欧美中文另类| 日韩av成人高清| 欧美亚洲国产怡红院影院| 亚洲国产精品成人综合| 久久精品国产免费| 欧美精品在线观看一区二区| 中文无字幕一区二区三区 | 久久综合网色—综合色88| 亚洲高清久久久| 日本韩国欧美三级| 中文字幕在线免费不卡| 国产毛片精品国产一区二区三区| 欧美一区二区大片| 亚洲成人www| 欧美日韩一卡二卡三卡| 最好看的中文字幕久久| av中文字幕在线不卡| 国产精品美女久久久久久久网站| 国产在线看一区| 久久色在线观看| 国产一区在线精品| 久久久不卡影院| 国产精品一品视频| 国产午夜亚洲精品不卡| 国产乱码精品一区二区三区忘忧草 | 亚洲天堂a在线| 成人免费毛片嘿嘿连载视频| www国产成人免费观看视频 深夜成人网| 日本中文字幕一区| 日韩一本二本av| 久久不见久久见中文字幕免费| 欧美一区二区视频在线观看| 人妖欧美一区二区| 精品国产一区二区亚洲人成毛片| 久久精品国产精品亚洲精品 | 国产精品第13页| 色天使色偷偷av一区二区| 亚洲乱码精品一二三四区日韩在线| 91在线无精精品入口| 亚洲午夜久久久久中文字幕久| 欧美美女网站色| 精品制服美女丁香| 欧美国产在线观看| 91久久精品日日躁夜夜躁欧美| 亚洲一区在线观看网站| 欧美精品123区| 国产一区激情在线| 亚洲天堂网中文字| 欧美理论电影在线| 国产.欧美.日韩| 伊人婷婷欧美激情| 精品免费99久久| 波多野结衣亚洲| 亚洲成av人片一区二区梦乃| 精品日韩欧美在线| 91亚洲国产成人精品一区二区三 | 欧美经典一区二区三区| 日本乱人伦一区| 国产一区二区三区电影在线观看| 国产精品狼人久久影院观看方式| 欧美视频在线观看一区二区| 国产一区在线精品| 亚洲一区在线观看视频| 久久先锋资源网| 在线观看日韩国产| 国产成人8x视频一区二区| 樱花草国产18久久久久| 日韩免费看的电影| 色综合天天综合狠狠| 国模冰冰炮一区二区| 调教+趴+乳夹+国产+精品| 国产日韩欧美在线一区| 欧美丰满少妇xxxbbb| 成人av第一页| 激情综合色播五月| 石原莉奈一区二区三区在线观看| 欧美国产激情一区二区三区蜜月| 欧美日产国产精品| 成人精品国产一区二区4080| 免费成人结看片| 一二三区精品福利视频| 中文字幕不卡在线观看| 精品国产乱码久久久久久夜甘婷婷| 在线影院国内精品| www.av精品| 国产69精品久久777的优势| 麻豆成人免费电影| 香蕉成人啪国产精品视频综合网| 日本一区二区三区国色天香| 日韩免费观看高清完整版在线观看| 欧美日韩一区在线观看| 99精品视频一区| 成人涩涩免费视频| 福利电影一区二区| 国产一区二区剧情av在线| 美洲天堂一区二卡三卡四卡视频| 亚洲综合成人在线视频| 国产精品乱人伦| 国产精品麻豆一区二区| 日本一区二区三区在线不卡| 久久久久久久av麻豆果冻| 日韩一二在线观看| 欧美电视剧免费全集观看| 日韩一区二区精品葵司在线| 欧美一区二区私人影院日本| 在线综合+亚洲+欧美中文字幕| 欧美日免费三级在线| 欧美无人高清视频在线观看| 欧美片网站yy| 欧美一级高清片| 日韩精品一区二区三区四区视频| 欧美一级精品大片| www日韩大片| 国产精品国产精品国产专区不蜜 | 国内一区二区视频| 国产福利一区二区| 91在线高清观看| 欧美在线制服丝袜| 欧美一区二区免费视频| 精品美女在线观看| 亚洲欧洲性图库| 香蕉影视欧美成人| 久久国产精品色婷婷| 国产成人99久久亚洲综合精品| 99在线视频精品| 欧美色综合天天久久综合精品| 欧美一区二区视频观看视频| 久久久蜜桃精品| 一区二区三区资源| 蜜桃视频免费观看一区| 成人污污视频在线观看| 欧洲精品视频在线观看| 精品剧情在线观看| 一区二区三区在线视频免费观看| 丝袜美腿高跟呻吟高潮一区| 国产乱码一区二区三区| 欧美视频在线一区二区三区| 精品国产a毛片| 亚洲美女免费在线| 九色综合国产一区二区三区| 99re这里只有精品视频首页| 91精品午夜视频| 中文字幕欧美一| 久久99久久99精品免视看婷婷 | 色综合久久88色综合天天免费| 欧美大片日本大片免费观看| 一区二区在线免费观看| 国产成人午夜视频| 91麻豆精品国产91久久久久久久久 |