亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
精品一区二区免费在线观看| 丝袜亚洲精品中文字幕一区| 高清不卡一区二区| 国产调教视频一区| 色噜噜狠狠成人中文综合| 一区二区三区在线观看动漫| 欧美日韩一卡二卡三卡 | 最新成人av在线| 99天天综合性| 亚洲国产欧美一区二区三区丁香婷 | 中文字幕av免费专区久久| 99精品黄色片免费大全| 性做久久久久久久免费看| 欧美成人一区二区| 不卡影院免费观看| 亚洲影院免费观看| 精品国内片67194| 91视视频在线直接观看在线看网页在线看| 亚洲免费av观看| 91麻豆精品国产91久久久更新时间 | 韩国毛片一区二区三区| 亚洲欧美日本在线| 欧美一区二区三区免费视频 | 亚洲欧美日韩一区二区| 91精品国产综合久久精品麻豆| 国内精品伊人久久久久av一坑| 国产精品丝袜一区| 91超碰这里只有精品国产| 国产乱色国产精品免费视频| 一区二区成人在线视频| 亚洲精品在线电影| 欧美三片在线视频观看| 盗摄精品av一区二区三区| 亚洲综合清纯丝袜自拍| 国产日韩精品一区二区三区| 欧美性受极品xxxx喷水| 国产成人综合在线| 调教+趴+乳夹+国产+精品| 国产日产欧美一区二区三区| 欧美日韩国产美| 91在线无精精品入口| 日本视频中文字幕一区二区三区| 国产精品二三区| 日韩欧美一区在线| 色猫猫国产区一区二在线视频| 激情五月婷婷综合| 午夜电影一区二区三区| 中文字幕一区二区三区四区不卡| 日韩三级电影网址| 欧美日本一区二区| 色8久久人人97超碰香蕉987| 国产不卡免费视频| 久久精品999| 日本伊人色综合网| 亚洲综合在线五月| 国产精品美女一区二区| 国产亚洲欧美中文| 欧美电影免费观看高清完整版| 欧美日韩免费视频| 91行情网站电视在线观看高清版| 成人高清在线视频| 国产馆精品极品| 国产黄色91视频| 国产一区视频导航| 国产精品综合二区| 狠狠色狠狠色合久久伊人| 美女久久久精品| 蜜臀av性久久久久av蜜臀妖精| 午夜国产精品一区| 三级欧美在线一区| 免费不卡在线观看| 美女免费视频一区| 激情国产一区二区| 国产成人亚洲综合a∨婷婷图片| 国内久久精品视频| 精品一区二区综合| 国产九色精品成人porny| 韩国av一区二区| 国产精品一级黄| 成人av网址在线观看| av成人老司机| 91国产免费看| 欧美福利视频导航| 日韩久久精品一区| 久久久一区二区三区捆绑**| 国产亚洲精品资源在线26u| 国产欧美一区二区三区沐欲| 欧美激情一区二区三区| 一区免费观看视频| 一区二区视频在线| 无吗不卡中文字幕| 麻豆精品久久久| 国产不卡视频一区二区三区| 99久久精品国产一区二区三区| 色综合久久久网| 欧美日韩国产影片| 欧美xxxx在线观看| 中文字幕国产一区二区| 一区二区三区不卡视频在线观看 | 亚洲成人中文在线| 久久99久久久久| 成人av在线网| 欧美麻豆精品久久久久久| 日韩免费电影网站| 日韩理论电影院| 日本aⅴ亚洲精品中文乱码| 国产精品一区二区在线观看不卡| 成人黄色大片在线观看| 欧美三级中文字幕| 国产亚洲精品久| 亚洲成年人网站在线观看| 另类小说视频一区二区| 不卡影院免费观看| 日韩欧美资源站| 亚洲视频香蕉人妖| 看电影不卡的网站| 91色.com| 2欧美一区二区三区在线观看视频| 欧美韩国一区二区| 亚洲国产一区二区视频| 国产又黄又大久久| 欧美日韩国产综合一区二区 | 一区二区三区自拍| 国产一本一道久久香蕉| 色综合久久久网| 久久久不卡影院| 亚洲成人黄色影院| 白白色 亚洲乱淫| 欧美大片一区二区| 亚洲综合自拍偷拍| 成人国产精品免费观看动漫| 欧美成人a∨高清免费观看| 亚洲黄色小视频| 国产麻豆精品视频| 91麻豆精品国产自产在线| 国产精品国产三级国产普通话蜜臀| 秋霞av亚洲一区二区三| 欧美无砖砖区免费| 国产精品国产三级国产aⅴ原创 | 日av在线不卡| 日本高清不卡在线观看| 国产欧美在线观看一区| 久久成人久久爱| 欧美一区二区视频免费观看| 亚洲精选一二三| 不卡影院免费观看| 久久精品视频在线免费观看 | 国产成人在线影院| 久久综合色综合88| 精品制服美女丁香| 91精品午夜视频| 性做久久久久久免费观看欧美| 91香蕉国产在线观看软件| 国产精品久久久久影院亚瑟| 国产一区二区三区不卡在线观看| 欧美一区日韩一区| 天天操天天干天天综合网| 欧美日韩午夜影院| 亚洲无人区一区| 欧美色综合久久| 亚洲五码中文字幕| 欧美色男人天堂| 亚洲一区二区成人在线观看| 色综合色狠狠综合色| 亚洲日韩欧美一区二区在线| 91年精品国产| 一区二区久久久久| 欧美另类高清zo欧美| 午夜久久久久久久久| 欧美精品v国产精品v日韩精品 | 中文字幕巨乱亚洲| 99九九99九九九视频精品| 亚洲欧美综合色| 欧洲精品在线观看| 亚洲一二三四在线| 制服丝袜亚洲色图| 久久99久国产精品黄毛片色诱| 精品欧美乱码久久久久久1区2区| 国产乱色国产精品免费视频| 久久久精品免费观看| av在线不卡电影| 亚洲国产成人tv| 日韩三级视频中文字幕| 国产黄色精品网站| 亚洲老妇xxxxxx| 3d动漫精品啪啪一区二区竹菊 | 亚洲欧美电影院| 欧美日韩在线免费视频| 美女www一区二区| 国产精品色在线| 欧美日韩综合在线免费观看| 麻豆91免费看| 国产女人aaa级久久久级| www..com久久爱| 亚洲1区2区3区视频| 久久久久久久久99精品| 99re亚洲国产精品| 日本不卡一区二区三区| 久久精品男人天堂av| 欧洲av一区二区嗯嗯嗯啊|