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

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

?? crewardmodel.cpp

?? 強化學習算法(R-Learning)難得的珍貴資料
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// Copyright (C) 2003
// 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 "ril_debug.h"
#include "crewardmodel.h"

#include <math.h>

CFeatureRewardModel::CFeatureRewardModel(CActionSet *actions, CRewardFunction *function, CAbstractFeatureStochasticEstimatedModel *model, CStateModifier *discretizer) : CFeatureRewardFunction(discretizer), CSemiMDPRewardListener(function), CActionObject(actions)
{
	this->rewardTable = new CMyArray2D<CFeatureMap *>(getNumActions(), discretizer->getDiscreteStateSize());

	for (int i = 0; i < rewardTable->getSize(); i++)
	{
		rewardTable->set1D(i, new CFeatureMap());
	}	
	
	this->model = model;

	this->bExternVisitSparse = true;
}

CFeatureRewardModel::CFeatureRewardModel(CActionSet *actions, CRewardFunction *function, CStateModifier *discretizer) : CFeatureRewardFunction(discretizer), CSemiMDPRewardListener(function), CActionObject(actions)
{
	int i;

	this->rewardTable = new CMyArray2D<CFeatureMap *>(getNumActions(), discretizer->getDiscreteStateSize());

	for (i = 0; i < rewardTable->getSize(); i++)
	{
		rewardTable->set1D(i, new CFeatureMap());
	}	
	
	this->visitTable = new CMyArray2D<CFeatureMap *>(getNumActions(), discretizer->getDiscreteStateSize());

	for (i = 0; i < visitTable->getSize(); i++)
	{
		visitTable->set1D(i, new CFeatureMap());
	}
	this->bExternVisitSparse = false;
}
	

CFeatureRewardModel::~CFeatureRewardModel()
{
	for (int i = 0; i < rewardTable->getSize(); i++)
	{
		delete rewardTable->get1D(i);
	}
	delete rewardTable;

	if (!bExternVisitSparse)
	{
		for (int i = 0; i < visitTable->getSize(); i++)
		{
			delete visitTable->get1D(i);
		}
		delete visitTable;
	}
}

rlt_real CFeatureRewardModel::getTransitionVisits(int oldState, int action, int newState)
{
	rlt_real visits = 0.0;
	if (!this->bExternVisitSparse)
	{	
		visits = visitTable->get(action, oldState)->getValue(newState);
	}
	else
	{
		CTransition *trans = model->getForwardTransitions(action, oldState)->getTransition(newState);
		if (trans == NULL) 
		{
			visits = 0;
		}
		else 
		{
			visits = trans->getPropability() * model->getStateActionVisits(oldState, action);
		}
	}
	return visits;
}

rlt_real CFeatureRewardModel::getReward(int oldState, CAction *action, int newState)
{
	int actionIndex = getActions()->getIndex(action);
	rlt_real transVisits = getTransitionVisits(oldState, actionIndex, newState);

	//assert(visitSparse->getFaktor(oldState, actionIndex, newState) > 0);


	if (transVisits > 0)
	{
		return rewardTable->get(actionIndex, oldState)->getValue(newState) / transVisits;
	}
	else
	{
		return 0.0;
	}
}

void CFeatureRewardModel::nextStep(CStateCollection *oldState, CAction *action, rlt_real reward, CStateCollection *newState)
{
	CFeatureMap *featMap;

	CState *oldS = oldState->getState(properties);
	CState *newS = newState->getState(properties);

	rlt_real oldreward = 0.0;
	rlt_real visits = 0.0;

	int actionIndex = getActions()->getIndex(action);
	
	int type = oldS->getStateProperties()->getType() & (DISCRETESTATE | FEATURESTATE);
	switch (type)
	{
		case FEATURESTATE:
		{
			for (unsigned int oldIndex = 0; oldIndex < oldS->getNumDiscreteStates(); oldIndex++)
			{
				int oldFeature = oldS->getDiscreteState(oldIndex);
				featMap = rewardTable->get(actionIndex, oldFeature);

				for (unsigned int newIndex = 0; newIndex < newS->getNumDiscreteStates(); newIndex++)
				{
					int newFeature = newS->getDiscreteState(newIndex);

					oldreward = featMap->getValue(newFeature);
				

					(*featMap)[newFeature] = oldreward + reward * newS->getContinuousState(newIndex) * oldS->getContinuousState(oldIndex);
					
					if (!bExternVisitSparse)
					{
						visits = visitTable->get(actionIndex, oldFeature)->getValue(newFeature);
					
						(*visitTable->get(actionIndex, oldFeature))[newFeature] = visits + newS->getContinuousState(newIndex) * oldS->getContinuousState(oldIndex);;
					}
				}
			}
			break;
		}
		case DISCRETESTATE:
		{
			featMap = rewardTable->get(actionIndex, oldS->getDiscreteState(0));

			oldreward = featMap->getValue(newS->getDiscreteState(0));
		
			int feata = oldS->getDiscreteState(0);
			int featb = newS->getDiscreteState(0);

			(*featMap)[featb] = oldreward + reward;
			
			if (!bExternVisitSparse)
			{
				visits = visitTable->get(actionIndex, feata)->getValue(featb);
			
				(*visitTable->get(actionIndex, feata))[featb] = visits + 1.0;
			}
			break;
		}
	}
}


void CFeatureRewardModel::saveData(FILE *stream)
{
	CFeatureMap::iterator mapIt;
	CFeatureMap *featMap;
	fprintf(stream, "Reward Table\n");

	for (unsigned int action = 0; action < getNumActions(); action ++)
	{
		fprintf(stream, "Action %d:\n", action);
		for (unsigned int startState = 0; startState < discretizer->getDiscreteStateSize(); startState ++)
		{
			featMap = rewardTable->get(action, startState);

			fprintf(stream, "Startstate %d [%d]: ", startState, featMap->size());
			
			for (mapIt = featMap->begin(); mapIt != featMap->end(); mapIt ++)
			{
				fprintf(stream, "(%d %f)", (*mapIt).first, (*mapIt).second);			
			}
			fprintf(stream, "\n");
		}
		fprintf(stream, "\n");
	}

	if (!this->bExternVisitSparse)
	{
		fprintf(stream, "Visit Table\n");

		for (unsigned int action = 0; action < getNumActions(); action ++)
		{
			fprintf(stream, "Action %d:\n", action);
			for (unsigned int startState = 0; startState < discretizer->getDiscreteStateSize(); startState ++)
			{
				featMap = visitTable->get(action, startState);
	
				fprintf(stream, "Startstate %d [%d]: ", startState, featMap->size());
			
				for (mapIt = featMap->begin(); mapIt != featMap->end(); mapIt ++)
				{
					fprintf(stream, "(%d %f)", (*mapIt).first, (*mapIt).second);			
				}
				fprintf(stream, "\n");
			}
			fprintf(stream, "\n");
		}
	}
}

void CFeatureRewardModel::loadData(FILE *stream)
{
	CFeatureMap *featMap;
	fscanf(stream, "Reward Table\n");

	int buf, numVal = 0, endState;
	rlt_real reward;

	for (unsigned int action = 0; action < getNumActions(); action ++)
	{
		fscanf(stream, "Action %d:\n", &buf);
		for (unsigned int startState = 0; startState < discretizer->getDiscreteStateSize(); startState ++)
		{
			featMap = rewardTable->get(action, startState);

			featMap->clear();

			fscanf(stream, "Startstate %d [%d]: ", &buf, &numVal);
			
			for (int i = 0; i < numVal; i ++)
			{
				fscanf(stream, "(%d %lf)", &endState, &reward);
				(*featMap)[endState] = reward;
			}
			fscanf(stream, "\n");
		}
		fscanf(stream, "\n");
	}

	if (!this->bExternVisitSparse)
	{
		fprintf(stream, "Visit Table\n");

		for (unsigned int action = 0; action < getNumActions(); action ++)
		{
			fscanf(stream, "Action %d:\n", &buf);
			for (unsigned int startState = 0; startState < discretizer->getDiscreteStateSize(); startState ++)
			{
				featMap = visitTable->get(action, startState);
	
				featMap->clear();

				fscanf(stream, "Startstate %d [%d]: ", &buf, &numVal);
			
				for (int i = 0; i < numVal; i ++)
				{
					fscanf(stream, "(%d %lf)", &endState, &reward);
					(*featMap)[endState] = reward;
				}
				fscanf(stream, "\n");
			}
			fscanf(stream, "\n");
		}
	}
}

void CFeatureRewardModel::resetData()
{
	CFeatureMap *featMap;

	for (unsigned int action = 0; action < getNumActions(); action ++)
	{
		for (unsigned int startState = 0; startState < discretizer->getDiscreteStateSize(); startState ++)
		{
			featMap = rewardTable->get(action, startState);

			featMap->clear();
		}
	}

	if (!this->bExternVisitSparse)
	{
		for (unsigned int action = 0; action < getNumActions(); action ++)
		{
			for (unsigned int startState = 0; startState < discretizer->getDiscreteStateSize(); startState ++)
			{
				featMap = visitTable->get(action, startState);

				featMap->clear();
			}
		}
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情一区在线| 亚洲人成网站色在线观看| 亚洲精品亚洲人成人网| 91极品美女在线| 亚洲精品欧美激情| 亚洲人成在线播放网站岛国 | 亚洲国产日韩综合久久精品| 91久久线看在观草草青青| 高清av一区二区| 中文字幕在线免费不卡| 欧美在线不卡视频| 国产乱码精品一区二区三| 国产在线精品不卡| 午夜国产不卡在线观看视频| 精品久久免费看| 99精品热视频| 精品无人码麻豆乱码1区2区| 综合欧美亚洲日本| 精品久久久久久久一区二区蜜臀| 亚洲欧洲无码一区二区三区| 国产精品成人网| 91精品国产综合久久久久久漫画 | 欧洲一区二区三区免费视频| 欧美日韩免费一区二区三区| 国产在线视视频有精品| 亚洲午夜久久久久久久久电影网| 亚洲成年人影院| 亚洲日本电影在线| 日本最新不卡在线| 1024国产精品| 日日嗨av一区二区三区四区| 一区二区理论电影在线观看| 久久精品在这里| 欧美一级二级三级乱码| 91麻豆国产香蕉久久精品| 国产成人精品免费一区二区| 国产综合久久久久久久久久久久| 懂色av一区二区三区免费看| 欧美三级三级三级| 久久久高清一区二区三区| 日韩视频一区二区三区| 中文字幕制服丝袜一区二区三区 | 国产精品欧美久久久久一区二区| 日韩视频中午一区| 综合在线观看色| 国产一区三区三区| 欧美日韩一区久久| 亚洲欧美一区二区三区孕妇| 国产一区二区不卡在线| 欧美日韩免费一区二区三区视频| 国产精品欧美久久久久无广告| 日韩电影在线免费| 欧美日本在线视频| 欧美人与z0zoxxxx视频| 最新热久久免费视频| 国产最新精品精品你懂的| 在线电影欧美成精品| 91精品国产综合久久久蜜臀粉嫩| 中文字幕一区二区三区不卡| 国产在线观看免费一区| 5月丁香婷婷综合| 丝袜诱惑亚洲看片| 91搞黄在线观看| 亚洲男人电影天堂| 99精品久久只有精品| 久久精品视频免费观看| 国产一区在线视频| 欧美tk丨vk视频| 老司机精品视频导航| 国产不卡一区视频| 国产色爱av资源综合区| 狠狠色伊人亚洲综合成人| 欧美电影免费观看高清完整版在线观看| 7777精品伊人久久久大香线蕉的 | 91在线观看美女| 中文字幕+乱码+中文字幕一区| 亚洲视频小说图片| 91免费视频网| 亚洲一线二线三线视频| 国产在线播放一区二区三区| 精品成人一区二区三区四区| 中文字幕亚洲不卡| 91蜜桃免费观看视频| 亚洲视频一二三| 欧美挠脚心视频网站| 轻轻草成人在线| 欧美性猛片aaaaaaa做受| 久久色在线观看| 亚洲国产欧美在线| 91精品一区二区三区久久久久久| 久久 天天综合| 国产欧美日韩在线| 青青青爽久久午夜综合久久午夜| 欧美一级免费观看| 亚洲私人黄色宅男| 欧美日本一区二区| 国产精品中文字幕日韩精品| 亚洲视频在线一区二区| 久久综合久久综合久久| bt欧美亚洲午夜电影天堂| 日韩精品一区二区三区中文不卡 | 国产欧美日韩在线观看| 91老师国产黑色丝袜在线| 天堂蜜桃91精品| 日本一区二区三区四区| 91久久人澡人人添人人爽欧美| 轻轻草成人在线| 中文字幕在线不卡一区二区三区| 欧美日韩成人激情| 成人中文字幕合集| 久久婷婷色综合| 91精品1区2区| 国产精品亚洲一区二区三区妖精| 一区二区国产盗摄色噜噜| 欧美mv和日韩mv国产网站| 91亚洲永久精品| 激情国产一区二区| 亚洲一级二级在线| 中文字幕欧美日本乱码一线二线| 欧美日韩国产成人在线91| 国产东北露脸精品视频| 国产永久精品大片wwwapp| 亚洲精品久久嫩草网站秘色| 日韩久久免费av| 欧美午夜精品电影| 国产成人在线视频网址| 日产国产欧美视频一区精品 | 日韩视频在线观看一区二区| 97超碰欧美中文字幕| 国产精品正在播放| 看电视剧不卡顿的网站| 亚洲一线二线三线久久久| 中文字幕制服丝袜一区二区三区 | 91精品国产91久久久久久一区二区| 成人黄色国产精品网站大全在线免费观看 | 国产偷v国产偷v亚洲高清| 欧美一区二区三区四区视频| 欧美午夜影院一区| 色爱区综合激月婷婷| 欧美日韩国产免费一区二区| 国产成人免费网站| 国产一区视频网站| 国产精品自产自拍| 国产一区二区三区日韩| 精品一区二区三区久久| 人妖欧美一区二区| 日韩激情视频在线观看| 亚洲国产一区二区三区青草影视| 亚洲免费观看高清完整| 亚洲免费在线视频一区 二区| 欧美激情中文不卡| 中文字幕中文在线不卡住| 国产精品久久久爽爽爽麻豆色哟哟 | 久久亚洲二区三区| 精品国产乱码久久久久久牛牛| 日韩一卡二卡三卡国产欧美| 日韩美女在线视频| 国产婷婷精品av在线| 国产欧美日韩久久| 国产精品久久久久久久久免费丝袜 | 国产电影精品久久禁18| 国产丶欧美丶日本不卡视频| 懂色av中文字幕一区二区三区| 成人免费视频一区| 91黄色小视频| 欧美浪妇xxxx高跟鞋交| 日韩免费观看高清完整版| 久久久久久黄色| 亚洲欧洲99久久| 午夜电影网一区| 日本va欧美va瓶| 成人av在线网站| 欧美日韩一区久久| 久久久美女毛片| 一区二区三区电影在线播| 日韩黄色免费电影| 欧美日韩中文字幕一区| 7777精品伊人久久久大香线蕉经典版下载 | 欧美撒尿777hd撒尿| 精品少妇一区二区| 中文字幕一区二区三区乱码在线| 亚洲综合一区二区| 精品一区二区在线看| 99久久免费精品高清特色大片| 欧美日韩精品一区视频| 久久久久97国产精华液好用吗| 亚洲男人天堂一区| 麻豆精品国产传媒mv男同 | 欧美岛国在线观看| 日本一区二区三区在线不卡| 一区二区三区四区在线播放| 日韩av电影天堂| 国产成人精品免费视频网站| 欧美三级乱人伦电影| 久久久精品国产免费观看同学| 一区二区三区在线视频观看58| 奇米亚洲午夜久久精品| 97久久精品人人做人人爽50路| 日韩一级二级三级| 悠悠色在线精品|