Техническое задание для агента v0.1

Агента первой версии предполагается сделать настолько простым, что для его создания будет достаточно технологий, предложенных в рамках проекта и на данный момент полностью готовых к реализации.

Интерфейс агента

Агент существует в среде с дискретным временем. Каждый такт времени он получает из среды состояние своих рецепторов, затем вычисляет собственную реакцию и возвращает состояние своих эффекторов. Программное взаимодействие со средой осуществляется по средствам интерфейса:

//  Универсальный интерфейс интеллекта агента v0.1
class IIntelligenceInterface01 {
public:
	typedef std::vector<int> TIoDataContainer;	//	Контейнер данных эффекторов и рецепторов
	//	Прожить 1 такт времени, [in] receptors - состояние рецепторов,	[out] effectors - состояние эффекторов
	virtual void TimeStep( const TIoDataContainer& receptors, TIoDataContainer& effectors ) = 0;
};
Параметры агента

У агента имеется фиксированные (неизменные в течении жизни) количества эффекторов и рецепторов, которые задаются средой при создании агента. Каждый рецептор и эффектор может находится любом состоянии в диапазоне [0, MaxVal] где MaxVal - фиксированное в течении жизни число, индивидуальное для каждого рецептора и эффектора. Количества состояний задаются средой при создании агента. В качестве конкретных MaxVal не рекомендуется брать числа больше 10. Рецептор с индексом 0 является оптимизируемым поэтому агент будет действовать так, чтобы значения этого рецептора были максимальны.

Реализация агента
//	Реализация интеллекта агента v0.1
class CIntelligenceV01 : public IIntelligenceInterface01 {
public:
	typedef std::vector<unsigned int> TIoLimitsContainer;	//	Контейнер данных о допустимых диапазонах IO данных
	//  receptorsLimits - количества состояний для каждого рецептора,
	//	effectorsLimits - количества состояний для каждого эффектора
	CIntelligenceV01( const TIoLimitsContainer& receptorsLimits, const TIoLimitsContainer& effectorsLimits );
	//	IIntelligenceInterface01
	virtual void TimeStep( const TIoDataContainer& receptors, TIoDataContainer& effectors );
 
private:
	const TIoLimitsContainer receptorsLimits;
	const TIoLimitsContainer effectorsLimits;
 
	typedef std::vector<double> TDistributionType;	//	Тип для статистических распределений
	typedef std::vector<TDistributionType> TDistributionsContainer;	//	Контейнет из статистических распределений
	//	Кластер статистической модели мира
	struct CCluster {
		CCluster( int receptorsCount, int effectorsCount );
 
		TDistributionsContainer ReceptorsStatistics;
		TDistributionsContainer EffectorsStatistics;
		TDistributionType ContextStatistics;
		TDistributionType::value_type Weight;
		TDistributionType::value_type Expectation;
	};
 
	typedef std::vector<CCluster> TClustersContainer;
	TClustersContainer worldModel;
	TDistributionType context;
	TIoDataContainer prevStepEffectors;
 
		//	Описание кандидата нового состояния эффектора
	struct CEffectorVariant {
		CEffectorVariant( TDistributionType::value_type likelihood, int testedStateIndex,
			TIoDataContainer::value_type variant );
 
		const TDistributionType::value_type Likelihood;
		const int TestedStateIndex;
		const TIoDataContainer::value_type Variant;
	};
 
	//	Компаратор кандидатов
	struct CEffectorVariantComparer : public std::binary_function<CEffectorVariant, CEffectorVariant, bool> {
		bool operator()( const CEffectorVariant& left, const CEffectorVariant& right ) const;
	};
 
	//	Массив приоритетных очередей
	typedef std::vector< std::priority_queue<CEffectorVariant, std::vector<CEffectorVariant>,
		CEffectorVariantComparer> > TVariantQueuesContainer;
 
	//	Описание протестированного состояния эффектора
	typedef std::vector< std::vector<bool> > TVariantsContainer;
	class CEffectorsTestedState {
	public:
		CEffectorsTestedState( const TIoDataContainer& effectors );
		//	Породить новую комбинацию
		CEffectorsTestedState( CEffectorsTestedState& baseState,
			int effectorIndex, TIoDataContainer::value_type newVariant );
		const TIoDataContainer& Effectors() const { return effectors; }
		const TVariantsContainer& TestedVariants() const { return testedVariants; }
 
	private:
		TVariantsContainer testedVariants;	//	протестированные комбинации
		TIoDataContainer effectors;	//	состояние эффекторов
	};
	typedef std::vector<CEffectorsTestedState> TTestedStatesContainer;
 
	void calculateNextStepContext( const TIoDataContainer& receptors, TDistributionType& adArchive ) const;
	void updateStatistics( const TIoDataContainer& receptors, const TDistributionType& adArchive );
	void findBestReaction( const TDistributionType& adArchive, TIoDataContainer& effectors ) const;
};
Навигация
Печать/экспорт
Инстурменты