Beispiel #1
0
	void IOServer::Run()
	{
		IOServerProcessor proc(*this);
		if (!proc.CreateProcessor())
			return;
		for (; RunOneStep(proc); )
		{
		}
		proc.DestroyProcessor();
	}
Beispiel #2
0
//---------------------------------------------------------------------------------------------------------------------------
//PATHFIND
//---------------------------------------------------------------------------------------------------------------------------
std::vector<IntVector2> PathFinder::FindBestPathFromStartToGoal(IntVector2 start, IntVector2 goal, int movementProperties) {

	if (start == goal)
		return std::vector<IntVector2>();

	m_start = start;
	m_goal = goal;

	CleanUpListsAndRestart();

	PathNode* startNode = CreateNode(start, nullptr, 0.f, 0.f, 0.f);
	startNode->h = MapProxy::ComputeHueristic(startNode->m_position, m_goal);
	startNode->f = startNode->h;
	AddNodeToOpenList(startNode);

	while (!m_isFinished) {
		if (!RunOneStep(movementProperties)) {
			return std::vector<IntVector2>();
		}
	}

	return m_currBestPath;
}
Beispiel #3
0
__HMATHLNGDLL__
int _solde( CDSR_VMEval *pOdeRTI, 
	CDSRArray<CDSRReal> *pInitials, 
	CDSRArray<CDSRReal> *pArg, 
	CDSRMatrix<CDSRReal > *pFunc, 
	CDSRReal rlPrec, unsigned long nMaxCount )
{
	unsigned long i, j, nCount;

	if ( pOdeRTI == 0 || pInitials == 0 || pArg == 0 || pFunc == 0 )
		throw "Internal error";
	pFunc->resize_matrix( pArg->size(), pInitials->size() );

	CDSRReal value;
	CDSRReal step;
	CDSRReal rlError;
	COdeOneStepParam param( -1.0, 2.0 );

	CDSRArray<CDSRReal> func( *pInitials );
	CDSRArray<CDSRReal> funcD( pInitials->size(), 0.0 );

	CDSRArray<CDSRReal> funcBack( pInitials->size(), 0.0 );
	CDSRArray<CDSRReal> funcBackD( pInitials->size(), 0.0 );

	//
	RunOneStep( pOdeRTI, (*pArg)[ 0 ], &func, &funcD );

	for ( j = 0; j < pInitials->size(); j++ )
		(*pFunc)( 0, j ) = func[ j ];

	//
	for ( i = 1; i < pArg->size(); i++ )
	{
		nCount = 0;
		step = (*pArg)[ i ] - (*pArg)[ i - 1 ];
		value = (*pArg)[ i - 1 ];

		while ( ((step > 0.0) ? value < (*pArg)[ i ] : value > (*pArg)[ i ]) )
		{
			funcBack = func;
			funcBackD = funcD;
			param.setStep( step );

			while ( !SoldeOneStep( pOdeRTI, value, &func, &funcD, param, rlError, rlPrec ) )
			{
				func = funcBack;
				funcD = funcBackD;
				step *= 0.5;
				param.setStep( step );
			}
			value += step;

			if ( rlError < rlPrec * ALMA_ODE_PREC_MUL )
				step *= 2.0;

			nCount++;
			if ( nCount > nMaxCount )
			{
				for ( j = 0; j < pInitials->size(); j++ )
					(*pFunc)( i, j ) = func[ j ];
				return -int(i);
			}
		}

		for ( j = 0; j < pInitials->size(); j++ )
			(*pFunc)( i, j ) = func[ j ];
	}
	return 0;
}
Beispiel #4
0
__HMATHLNGDLL__
void _solde( CDSR_VMEval *pOdeRTI, 
	CDSRArray<CDSRReal> *pInitials, 
	CDSRArray<CDSRReal> *pArg, 
	CDSRArray<CDSRArray<CDSRReal>*> *pFunc, 
	CDSRArray<CDSRArray<CDSRReal>*> *pFuncD, 
	CDSRArray<CDSRArray<CDSRReal>*> *pFuncM, 
	CDSRReal rlPrec, 
	unsigned long nMaxCount )
{
	unsigned long i, j, nCount;

	pFunc->resize( pInitials->size() );
	if ( pFuncD )
		pFuncD->resize( pInitials->size() );
	if ( pFuncM )
		pFuncM->resize( pInitials->size() );

	for ( j = 0; j < pInitials->size(); j++ )
		(*pFunc)[ j ] = new CDSRArray<CDSRReal>( pArg->size() );
	if ( pFuncD )
		for ( j = 0; j < pInitials->size(); j++ )
			(*pFuncD)[ j ] = new CDSRArray<CDSRReal>( pArg->size() );
	if ( pFuncM )
		for ( j = 0; j < pInitials->size(); j++ )
			(*pFuncM)[ j ] = new CDSRArray<CDSRReal>( pArg->size() );

	CDSRReal rlValue;
	CDSRReal rlStep;
	CDSRReal rlError;
	COdeOneStepParam param( -1.0, 2.0 );

	CDSRArray<CDSRReal> func( *pInitials );
	CDSRArray<CDSRReal> funcD( pInitials->size(), 0.0 );
	CDSRArray<CDSRReal> funcM( pInitials->size(), 0.0 );

	CDSRArray<CDSRReal> funcBack( pInitials->size(), 0.0 );
	CDSRArray<CDSRReal> funcBackD( pInitials->size(), 0.0 );

	//
	RunOneStep( pOdeRTI, (*pArg)[ 0 ], &func, &funcD );

	for ( j = 0; j < pInitials->size(); j++ )
		(*((*pFunc)[ j ]))[ 0 ] = func[ j ];
	if ( pFuncD )
		for ( j = 0; j < pInitials->size(); j++ )
			(*((*pFuncD)[ j ]))[ 0 ] = funcD[ j ];
	if ( pFuncM )
		for ( j = 0; j < pInitials->size(); j++ )
			(*((*pFuncM)[ j ]))[ 0 ] = 0.0;

	//
	for ( i = 1; i < pArg->size(); i++ )
	{
		nCount = 0;
		rlStep = (*pArg)[ i ] - (*pArg)[ i - 1 ];
		rlValue = (*pArg)[ i - 1 ];

		while ( ((rlStep > 0.0) ? rlValue < (*pArg)[ i ] : rlValue > (*pArg)[ i ]) )
		{
			funcBack = func;
			funcBackD = funcD;
			param.setStep( rlStep );

			while ( !SoldeOneStep( pOdeRTI, rlValue, &func, &funcD, param, rlError, rlPrec ) )
			{
				func = funcBack;
				funcD = funcBackD;
				rlStep *= 0.5;
				param.setStep( rlStep );
			}
			rlValue += rlStep;

			if ( rlError < rlPrec * ALMA_ODE_PREC_MUL )
				rlStep *= 2.0;

			nCount++;
			if ( nCount > nMaxCount )
				throw "Iteration counter limit exceeded";
		}

		for ( j = 0; j < pInitials->size(); j++ )
			(*((*pFunc)[ j ]))[ i ] = func[ j ];
		if ( pFuncD )
			for ( j = 0; j < pInitials->size(); j++ )
				(*((*pFuncD)[ j ]))[ i ] = funcD[ j ];
		if ( pFuncM )
			for ( j = 0; j < pInitials->size(); j++ )
				(*((*pFuncM)[ j ]))[ i ] = funcM[ j ];
	}
}