https://github.com/xbpeng/DeepTerrainRL
Raw File
Tip revision: ed82e2ebe5f14fa875cc3d0a2180c64980408e8f authored by Glen on 19 October 2016, 17:49:36 UTC
Update README.md
Tip revision: ed82e2e
BaseControllerMACE.h
#pragma once

#include "sim/TerrainRLCharController.h"
#include "learning/MACETrainer.h"

//#define DISABLE_INIT_ACTOR_BIAS

class cBaseControllerMACE : public virtual cTerrainRLCharController
{
public:
	EIGEN_MAKE_ALIGNED_OPERATOR_NEW
	
	cBaseControllerMACE();
	virtual ~cBaseControllerMACE();

	virtual void Reset();

	virtual int GetPoliActionSize() const;
	virtual int GetNetOutputSize() const;
	virtual int GetNumActionFrags() const;
	virtual int GetActionFragSize() const;

	virtual bool IsExpCritic() const;
	virtual bool IsExpActor() const;

	virtual void SetExpLayer(const std::string& layer_name);
	virtual void RecordPoliAction(Eigen::VectorXd& out_action) const;
	virtual void BuildNNOutputOffsetScale(Eigen::VectorXd& out_offset, Eigen::VectorXd& out_scale) const;

protected:
	int mNumActionFrags;
	bool mExpCritic;
	bool mExpActor;
	Eigen::VectorXd mBoltzmannBuffer;
	std::string mExpLayer;
	double mExpNoise;

	virtual void LoadNetIntern(const std::string& net_file);
	virtual void UpdateFragParams();

	virtual void BuildActionFragOutputOffsetScale(Eigen::VectorXd& out_offset, Eigen::VectorXd& out_scale) const;

	virtual void UpdateAction();
	virtual void DecideAction(tAction& out_action);
	virtual void ExploitPolicy(tAction& out_action);
	virtual void ExploreAction(tAction& out_action);
	virtual void DecideActionBoltzmann(tAction& out_action);

	virtual void GetRandActorAction(tAction& out_action);
	virtual void BuildActorAction(const Eigen::VectorXd& params, int a_id, tAction& out_action) const;
	virtual int BoltzmannSelectActor(const Eigen::VectorXd& params, Eigen::VectorXd& val_buffer) const;

	virtual void ApplyExpNoise(tAction& out_action);
	virtual void ApplyExpNoiseState(tAction& out_action);
	virtual bool ValidExpLayer() const;
	virtual void ApplyExpNoiseAction(tAction& out_action);

	virtual void ProcessCommand(tAction& out_action);

	virtual int GetMaxFragIdx(const Eigen::VectorXd& params) const;
	virtual double GetMaxFragVal(const Eigen::VectorXd& params) const;
	virtual void GetFrag(const Eigen::VectorXd& params, int a_idx, Eigen::VectorXd& out_action) const;
	virtual void SetFrag(const Eigen::VectorXd& frag, int a_idx, Eigen::VectorXd& out_params) const;
	virtual double GetVal(const Eigen::VectorXd& params, int a_idx) const;
	virtual void SetVal(double val, int a_idx, Eigen::VectorXd& out_params) const;

	virtual void FetchExpNoiseScale(Eigen::VectorXd& out_noise) const;

	virtual void BuildActorBias(int a_id, Eigen::VectorXd& out_bias) const;

#if defined (ENABLE_DEBUG_PRINT)
	virtual void PrintNetOutput(const Eigen::VectorXd& y, int a_id) const;
#endif

#if defined(ENABLE_DEBUG_VISUALIZATION)
public:
	virtual void GetVisActionFeatures(Eigen::VectorXd& out_features) const;
	virtual void GetVisActionValues(Eigen::VectorXd& out_vals) const;

protected:
#endif
};
back to top