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

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

?? cacrobotmodel.cpp

?? 強化學習算法(R-Learning)難得的珍貴資料
?? CPP
字號:
// 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 "cacrobotmodel.h"
#include <math.h>

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

CAcroBotModel::CAcroBotModel(rlt_real dt, rlt_real uMax, rlt_real length1, rlt_real length2, rlt_real mass1, rlt_real mass2, rlt_real mu_1, rlt_real mu_2, rlt_real g) : CDynamicLinearActionContinuousTimeModel(new CStateProperties(4, 0),new CContinuousAction(new CContinuousActionProperties(1)), dt)
{
	this->uMax = uMax;
	this->length1 = length1;
	this->length2 = length2;
	this->mass1 = mass1;
	this->mass2 = mass2;
	this->mu_1 = mu_1;
	this->mu_2 = mu_2;
	this->g = g;

	properties->setMaxValue(0, M_PI);
	properties->setMinValue(0, -M_PI);

	properties->setPeriodicity(0, true);

	properties->setMaxValue(1, M_PI * 2);
	properties->setMinValue(1, -M_PI * 2);


	properties->setMaxValue(2, M_PI);
	properties->setMinValue(2, -M_PI);

	properties->setPeriodicity(2, true);

	properties->setMaxValue(3, M_PI * 3);
	properties->setMinValue(3, -M_PI * 3);

	contAction->getContinuousActionProperties()->setMaxActionValue(0,uMax);
	contAction->getContinuousActionProperties()->setMinActionValue(0,-uMax);


}

CAcroBotModel::~CAcroBotModel()
{
	delete properties;
	delete actionProp;
	delete contAction;
}

CMyMatrix *CAcroBotModel::getB(CState *state)
{
	rlt_real Phi1 = state->getContinuousState(0);
//	rlt_real dPhi1 = state->getContinuousState(1);
	rlt_real Phi2 = state->getContinuousState(2) + Phi1;
//	rlt_real dPhi2 = state->getContinuousState(3);

	rlt_real denum = 16 * pow(length2/length1, 2) * (mass1 * mass2 / 9 + pow(mass2, 2) / 3)
		- 4 * pow(length1 * length2*mass2*cos(Phi1-Phi2), 2);

	rlt_real dPhi1_U = 4/3* pow(length2, 2) * mass2 * (-1) - 2 * length1 * length2 * mass2 * cos(Phi1 - Phi2);
	rlt_real dPhi2_U = 2 * length1 * length2 * mass2 * cos(Phi1 - Phi2) + 4*(mass1/3 + mass2) / pow(length1, 2);


	B->initMatrix(0.0);
	B->setElement(1, 0, dPhi1_U / denum);
	B->setElement(3, 0, dPhi2_U / denum);

	return B;	
}

CMyVector *CAcroBotModel::getA(CState *state)
{
	rlt_real Phi1 = state->getContinuousState(0);
	rlt_real dPhi1 = state->getContinuousState(1);
	rlt_real Phi2 = state->getContinuousState(2) + Phi1;
	rlt_real dPhi2 = state->getContinuousState(3);

	rlt_real denum = 16 * pow(length2/length1, 2) * (mass1 * mass2 / 9 + pow(mass2, 2) / 3)
		- 4 * pow(length1 * length2*mass2*cos(Phi1-Phi2), 2);

	rlt_real b1, b2;

	b1 = 2 * mass2 * length2 * length1 * pow(dPhi2,2) * sin(Phi2-Phi1) + (mass1  + 2 * mass2) * sin(Phi1) * length1* g - mu_1 * dPhi1;
	b2 = 2 * mass2 * length2 * length1 * pow(dPhi1,2) * sin(Phi1-Phi2) + mass2 * sin(Phi2) * length2 * g - mu_2 * dPhi2;


	rlt_real ddPhi1 = 4/3* pow(length2, 2) * mass2 * b1 - 2 * length1 * length2 * mass2 * cos(Phi1 - Phi2) * b2;
	rlt_real ddPhi2 = - 2 * length1 * length2 * mass2 * cos(Phi1 - Phi2) * b1 + 4*(mass1/3 + mass2) / pow(length1, 2) * b2;

	ddPhi1 = ddPhi1 / denum;
	ddPhi2 = ddPhi2 / denum;

	A->setElement(0, dPhi1);
	A->setElement(1, ddPhi1);
	A->setElement(2, dPhi2);
	A->setElement(3, ddPhi2);

	return A;
}

bool CAcroBotModel::isFailedState(CState *state)
{
	return false;
}

void CAcroBotModel::doSimulationStep(CState *state, rlt_real timestep, CAction *action, CActionData *data)
{
	getDerivationX(state, action, derivation, data);

	rlt_real ddPhi1 = derivation->getElement(1);
	rlt_real ddPhi2 = derivation->getElement(3);

	for (unsigned int i = 0; i < state->getNumContinuousStates(); i++)
	{
		state->setContinuousState(i, state->getContinuousState(i) + timestep * derivation->getElement(i));
	}

	state->setContinuousState(0, state->getContinuousState(0) + pow(timestep, 2) * ddPhi1 / 2);
	state->setContinuousState(2, state->getContinuousState(2) + pow(timestep, 2) * ddPhi2 / 2);
}

void CAcroBotModel::getResetState(CState *state)
{
	CTransitionFunction::getResetState(state);
	state->setContinuousState(1, 0.0);
	state->setContinuousState(3, 0.0);
//	state->setContinuousState(2, state->getContinuousState(2) - state->getContinuousState(0));
}

CAcroBotModelSutton::CAcroBotModelSutton(rlt_real dt, rlt_real uMax, rlt_real length1, rlt_real length2, rlt_real mass1, rlt_real mass2, rlt_real I1, rlt_real I2, rlt_real g) : CAcroBotModel(dt, uMax, length1, length2, mass1, mass2, 0.05, 0.05, g)
{
	this->I1 = I1;
	this->I2 = I2;
}


CAcroBotModelSutton::~CAcroBotModelSutton()
{

}

CMyMatrix *CAcroBotModelSutton::getB(CState *state)
{
	rlt_real Phi1 = state->getContinuousState(0) + M_PI;
	rlt_real Phi2 = state->getContinuousState(2);

	rlt_real d1 = mass1 * pow(length1 / 2.0, 2) + mass2 * (pow(length1, 2) + pow(length2 / 2.0, 2) + length1 * length2 * cos(Phi2)) + I1 + I2;
	rlt_real d2 = mass2 * (pow(length2 / 2.0, 2) + length1 * length2 / 2.0 * cos(Phi2)) + I2;

	rlt_real dPhi2_U = 1 / ( mass2 * pow(length2 / 2.0, 2) + I2 - pow(d2,2) / d1);


	rlt_real dPhi1_U = - d2 / d1 * dPhi2_U;
	

	B->initMatrix(0.0);
	B->setElement(1, 0, dPhi1_U);
	B->setElement(3, 0, dPhi2_U);

	return B;	
	
}


CMyVector *CAcroBotModelSutton::getA(CState *state)
{
	rlt_real Phi1 = state->getContinuousState(0) - M_PI;
	rlt_real Phi2 = state->getContinuousState(2);
	rlt_real dPhi1 = state->getContinuousState(1);
	rlt_real dPhi2 = state->getContinuousState(3);


	rlt_real d1 = mass1 * pow(length1/ 2.0, 2) + mass2 * (pow(length1, 2) + pow(length2 / 2.0, 2) + length1 * length2 * cos(Phi2)) + I1 + I2;
	rlt_real d2 = mass2 * (pow(length2 / 2.0, 2) + length1 * length2 / 2.0 * cos(Phi2)) + I2;

	rlt_real f2 = mass2 * length2 / 2.0 * g * cos(Phi1 + Phi2 - M_PI / 2.0);
	rlt_real f1 = - mass2 * length1 * length2 / 2.0 * pow(dPhi2, 2) * sin(Phi2) - 2 * mass2 * length1 * length2 / 2.0 * dPhi1 * dPhi2 * sin(Phi2);
	f1 += (mass1 * length1 / 2.0 + mass2 * length1) * g * cos(Phi1 - M_PI / 2) + f2;

	rlt_real ddPhi2 = 1 / ( mass2 * pow(length2 / 2.0, 2) + I2 - pow(d2,2) / d1) * (d2 / d1 * f1 - mass2 * length1 * length2 / 2.0 * pow(dPhi1, 2.0) * sin(Phi2) - f2);


	rlt_real ddPhi1 = - (d2 * ddPhi2 + f1) / d1;

	A->setElement(0, dPhi1);
	A->setElement(1, ddPhi1);
	A->setElement(2, dPhi2);
	A->setElement(3, ddPhi2);

	return A;
}



CAcroBotRewardFunction::CAcroBotRewardFunction(CAcroBotModel *model, rlt_real segmentFactor) : CStateReward(model->getStateProperties())
{
	this->model = model;
	useHeighPeak = true;
	this->segmentFactor = segmentFactor;
	power = 1.0;

}

rlt_real CAcroBotRewardFunction::getStateReward(CState *state)
{

	rlt_real Phi1 = state->getContinuousState(0);
	rlt_real Phi2 = state->getContinuousState(2);

	rlt_real height = 2 *(segmentFactor * model->length1 * (cos(Phi1) + 1) + (1 - segmentFactor) * model->length2 * ( cos(Phi2 + Phi1) + 1)) / (model->length1 + model->length2) / 2.0;


	rlt_real reward = 2 * (pow(height, power) - 1.0);
	if (useHeighPeak)
	{
		rlt_real dreward = 0.5 * exp((-pow(Phi1, 2.0) - pow(Phi2, 2.0)) * 25);
		reward += dreward;
	}

	return reward;
}

void CAcroBotRewardFunction::getInputDerivation(CState *modelState, CMyVector *targetState)
{
	rlt_real Phi1 = modelState->getState(properties)->getContinuousState(0);
	rlt_real Phi2 = modelState->getState(properties)->getContinuousState(2);

	targetState->setElement(0, - segmentFactor * model->length1 * sin(Phi1));
	targetState->setElement(1, 0);
	targetState->setElement(2, -(1 - segmentFactor) * model->length2 * sin(Phi2 + Phi1));
	targetState->setElement(3, 0);

	if (useHeighPeak)
	{
		targetState->setElement(0, targetState->getElement(0) - 25 * (Phi1) * exp( (-pow(Phi1, 2.0) - pow(Phi2, 2.0)) * 25));
		targetState->setElement(2, targetState->getElement(2) - 25 * (Phi1) * exp( (-pow(Phi1, 2.0) - pow(Phi2, 2.0)) * 25));
	}
}

CAcroBotHeightRewardFunction::CAcroBotHeightRewardFunction(CAcroBotModel *model) : CStateReward(model->getStateProperties())
{
	this->model = model;
	useHeighPeak = true;
}

rlt_real CAcroBotHeightRewardFunction::getStateReward(CState *state)
{
	rlt_real Phi1 = state->getContinuousState(0);
	rlt_real Phi2 = state->getContinuousState(2);

	rlt_real reward = model->length1 * (cos(Phi1) - 1) + model->length2 * ( cos(Phi2 + Phi1) - 1);

	return reward;
}

void CAcroBotHeightRewardFunction::getInputDerivation(CState *modelState, CMyVector *targetState)
{
	rlt_real Phi1 = modelState->getState(properties)->getContinuousState(0);
	rlt_real Phi2 = modelState->getState(properties)->getContinuousState(2);

	targetState->setElement(0, - model->length1 * sin(Phi1));
	targetState->setElement(1, 0);
	targetState->setElement(2, - model->length2 * sin(Phi2 + Phi1));
	targetState->setElement(3, 0);
}

CAcroBotExpRewardFunction::CAcroBotExpRewardFunction(CAcroBotModel *l_model, rlt_real l_expFactor) : CStateReward(l_model->getStateProperties())
{
	this->model = l_model;
	this->expFactor = l_expFactor;
}

rlt_real CAcroBotExpRewardFunction::getStateReward(CState *state)
{
	rlt_real Phi1 = state->getContinuousState(0);
	rlt_real Phi2 = state->getContinuousState(2);

	rlt_real reward = model->length1 * (cos(Phi1) - 1) + model->length2 * ( cos(Phi2 + Phi1) - 1);

	reward = -1.0 + exp(expFactor * reward);

	return reward;
}

void CAcroBotExpRewardFunction::getInputDerivation(CState *modelState, CMyVector *targetState)
{

}

CAcroBotVelocityRewardFunction::CAcroBotVelocityRewardFunction(CAcroBotModel *model) :  CStateReward(model->getStateProperties())
{
	this->model = model;
	invertVelocity = false;
}

rlt_real CAcroBotVelocityRewardFunction::getStateReward(CState *state)
{
	rlt_real reward = fabs(state->getContinuousState(1));

	if (! invertVelocity)
	{
		reward = - 1.0 + reward; 
	}
	else
	{
		reward = - reward;
	}
	return reward;
}

void CAcroBotVelocityRewardFunction::getInputDerivation(CState *modelState, CMyVector *targetState)
{

}



#ifdef RL_TOOLBOX_USE_QT

CQTAcroBotVisualizer::CQTAcroBotVisualizer( CAcroBotModel *acroModel, QWidget *parent, const char *name) : CQTModelVisualizer(parent, name)
{

	this->acroModel = acroModel;

	phi1 = 0;
	dphi1 = 0;

	phi2 = 0;
	dphi2 = 0;
}

void CQTAcroBotVisualizer::doDrawState( QPainter *painter)
{
	QString s1 = "Phi1 = " + QString::number( phi1 );
	QString s2 = "Phi1' = " + QString::number( dphi1 );

	QString s3 = "Phi2 = " + QString::number( phi2 );
	QString s4 = "Phi2' = " + QString::number( dphi2 );

	painter->drawText(10,20, s1);
	painter->drawText(10,40, s2);

	painter->drawText(10,60, s3);
	painter->drawText(10,80, s4);


	painter->translate(this->width() / 2, this->height() / 2);

	painter->rotate(- phi1 + 180);

	painter->drawRect(- 5, -5, 10, (acroModel->length1 * 100) + 10);

	painter->translate(0, acroModel->length1 * 100);

	painter->rotate(- phi2);

	painter->drawRect(- 5, -5, 10, (acroModel->length2 * 100) + 10);

	painter->flush();
}

void CQTAcroBotVisualizer::newDrawState(CStateCollection *state)
{
	phi1 = state->getState()->getContinuousState(0) * 180 / M_PI;
	dphi1 = state->getState()->getContinuousState(1) * 180 / M_PI;

	phi2 = state->getState()->getContinuousState(2) * 180 / M_PI;
	dphi2 = state->getState()->getContinuousState(3) * 180 / M_PI;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
337p日本欧洲亚洲大胆精品| 国产电影精品久久禁18| 中文一区二区完整视频在线观看| 久久奇米777| 国产精品免费视频观看| 久久网这里都是精品| 亚洲日本乱码在线观看| 三级在线观看一区二区| 国产高清精品久久久久| 欧美在线视频不卡| 欧美精品一区二区在线播放 | 日韩欧美一级二级三级| 欧美系列一区二区| 欧美xxxxx裸体时装秀| 亚洲激情av在线| 粉嫩嫩av羞羞动漫久久久| 欧美日韩国产高清一区二区| 91丝袜美女网| 欧美精品一区二区三区久久久| 一区二区中文字幕在线| 久久er精品视频| 91猫先生在线| 欧美日本在线看| 中文字幕成人在线观看| 免费精品视频在线| 色综合天天狠狠| 久久九九99视频| 麻豆精品视频在线观看视频| 91国产福利在线| 国产精品高潮呻吟| 亚洲r级在线视频| 91在线精品秘密一区二区| 欧美午夜不卡在线观看免费| 中文字幕制服丝袜一区二区三区| 偷偷要91色婷婷| 色婷婷av一区二区三区大白胸| 精品99999| 日本不卡123| 欧美日韩免费视频| 一区二区欧美在线观看| 99精品国产热久久91蜜凸| 日韩欧美一级二级三级久久久| 亚洲图片一区二区| 成年人午夜久久久| 在线观看欧美黄色| 亚洲同性同志一二三专区| 国产黄色精品网站| 欧美mv日韩mv国产| 精品综合久久久久久8888| 91精品国产一区二区三区香蕉 | 欧美疯狂性受xxxxx喷水图片| 18欧美亚洲精品| 成人97人人超碰人人99| 国产精品福利影院| 久久99精品网久久| 日韩美女主播在线视频一区二区三区| 视频一区二区三区入口| 欧美巨大另类极品videosbest | 欧美精品在线视频| 久久综合久久久久88| 精品国产亚洲在线| 麻豆国产精品官网| 亚洲精品一区二区三区香蕉| 黄色小说综合网站| 久久婷婷国产综合国色天香| 色婷婷亚洲综合| 国产精品免费av| 91美女片黄在线观看91美女| 亚洲一区二区精品3399| 777xxx欧美| 狠狠色综合色综合网络| 国产午夜精品福利| 成人开心网精品视频| 亚洲精品一二三| 6080yy午夜一二三区久久| 精品一区二区三区免费毛片爱 | 成人网页在线观看| 一区二区三区在线观看欧美| 国产精品日日摸夜夜摸av| 不卡的av在线| 亚洲成人在线观看视频| 精品美女一区二区三区| 成人激情免费网站| 亚洲国产精品一区二区久久 | 亚洲欧洲精品天堂一级| 在线一区二区三区四区| 美女视频第一区二区三区免费观看网站| 精品成人在线观看| 91免费版在线看| 秋霞午夜鲁丝一区二区老狼| 欧美国产日韩一二三区| 欧美日韩中文国产| 国产成人在线视频网站| 亚洲在线视频网站| 久久综合久久综合九色| 精品污污网站免费看| 成人国产一区二区三区精品| 婷婷综合五月天| 国产精品美女久久久久aⅴ| 欧美影院一区二区| 国产精品影视网| 午夜精品福利在线| 亚洲欧美怡红院| 精品国产免费一区二区三区四区| 91在线观看成人| 国产一区二区三区四| 国产精品成人在线观看| 欧美精品日韩一本| 国产麻豆精品在线| 免费在线成人网| 亚洲国产欧美日韩另类综合| 欧美国产精品一区二区| 欧美一卡二卡三卡四卡| 色噜噜狠狠成人中文综合| 国产自产2019最新不卡| 亚洲sss视频在线视频| 亚洲人123区| 中文字幕在线一区| 久久一区二区三区四区| 日韩一区二区电影在线| 欧美在线视频你懂得| 色综合天天综合网国产成人综合天 | 欧美视频一区在线| 91亚洲精品久久久蜜桃| 国产精品综合视频| 国产在线麻豆精品观看| 日韩二区在线观看| 亚洲成人精品一区| 亚洲精品一二三区| 亚洲精品国产一区二区精华液| 国产亚洲成aⅴ人片在线观看| 日韩精品一区二区三区在线观看| 欧美色综合天天久久综合精品| 国产精品一区二区三区网站| 蜜臀av性久久久久蜜臀av麻豆| 国产精品麻豆欧美日韩ww| 欧美成人r级一区二区三区| 欧美性高清videossexo| 欧美一级精品大片| 色综合久久天天| 色视频成人在线观看免| 色噜噜狠狠成人中文综合| 色哟哟一区二区三区| 在线视频你懂得一区二区三区| 色哦色哦哦色天天综合| 欧美系列在线观看| 欧美一级午夜免费电影| 欧美一级二级三级蜜桃| 精品久久国产老人久久综合| 欧美成人精品1314www| 国产色产综合色产在线视频| 国产精品麻豆视频| 亚洲精品免费看| 日韩1区2区日韩1区2区| 美女精品自拍一二三四| 国产成人aaa| 91在线视频网址| 91极品视觉盛宴| 欧美一区二区在线观看| 欧美一级免费大片| 国产精品网友自拍| 一区二区三区美女| 卡一卡二国产精品| 国产在线精品一区二区三区不卡 | 亚洲欧美日韩国产另类专区 | 国产午夜亚洲精品理论片色戒 | 精品一区二区三区在线视频| 国产激情一区二区三区四区| av网站一区二区三区| 欧美图片一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av | 久久 天天综合| 97精品久久久久中文字幕| 6080午夜不卡| 中文字幕色av一区二区三区| 五月天欧美精品| 韩国一区二区视频| 91福利视频网站| 国产日韩精品一区| 婷婷开心激情综合| 波多野结衣欧美| 欧美一区二区三区男人的天堂| 久久九九影视网| 五月开心婷婷久久| 成人激情小说网站| 色综合一区二区| 日韩午夜三级在线| 久久久久99精品国产片| 免费一级片91| 欧美日韩一区二区三区四区五区| 久久老女人爱爱| 日本女优在线视频一区二区| 99re免费视频精品全部| 26uuu色噜噜精品一区二区| 午夜视频在线观看一区二区| 成人午夜视频在线| 精品免费一区二区三区| 亚洲成人激情社区| 色偷偷88欧美精品久久久| 久久久亚洲午夜电影|