Exemplo 3 da API Micro Aimsun Next:¶
Exemplo de Entrada de Veículo e Rastreamento de Veículo¶
Este exemplo mostra como implementar o rastreamento de veículos e como introduzir veículos no sistema usando uma distribuição de entrada externa. Ele também mostra como variar a velocidade dos veículos, aqui introduzindo uma variação aleatória, e como forçar uma mudança de rota.
Versão C++¶
#include "AKIProxie.h"
#include "CIProxie.h"
#include "ANGConProxie.h"
#include "AAPI.h"
#include <stdio.h>
int idVehFirst = 0;
int idVehSecond = 0;
int idVeh = 0;
int carPosition = 0;
int AAPILoad()
{
return 0;
}
int AAPIInit()
{
idVeh = ANGConnGetObjectIdByType( AKIConvertFromAsciiString( "car" ), AKIConvertFromAsciiString( "GKVehicle" ), false )
carPosition = AKIVehGetVehTypeInternalPosition( idVeh )
idVehFirst = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True);
idVehSecond = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True);
return 0;
}
int AAPISimulationReady()
{
return 0;
}
int AAPIManage(double time, double timeSta, double timeTrans, double acycle)
{
/* Qualquer ação de semáforo ou ITS iria aqui
return 0;
}
int AAPIPostManage(double time, double timeSta, double timeTrans, double acycle)
{
spd1 = AKIVehTrackedGetInf(idVehFirst).CurrentSpeed + rand(0.5);
spd2 = AKIVehTrackedGetInf(idVehSecond).CurrentSpeed + rand(0.5);
AKIVehTrackedModifySpeed(idVehFirst, spd1 );
AKIVehTrackedModifySpeed(idVehSecond,spd2 );
if ( AKIVehTrackedGetInf(idVehSecond).idSection == 545)
{
AKIVehTrackedModifyNextSection(idVehSecond, 546);
}
return 0;
}
int AAPIFinish()
{
return 0;
}
int AAPIUnLoad()
{
return 0;
}
Versão Python¶
from AAPI import *
idVehFirst = 0
idVehSecond = 0
carPosition = 0
def AAPILoad():
return 0
def AAPIInit():
global idVehFirst
global idVehSecond
global carPosition
idVeh = 8
carPosition = AKIVehGetVehTypeInternalPosition( idVeh )
idVehFirst = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True)
idVehSecond = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True)
return 0
def AAPISimulationReady():
return 0
def AAPIManage(time, timeSta, timTrans, SimStep):
'Qualquer ação de semáforo ou ITS iria aqui
return 0
def AAPIPostManage(time, timeSta, timTrans, SimStep):
global idVehFirst
global idVehSecond
spd1 = AKIVehTrackedGetInf(idVehFirst).CurrentSpeed + rand(0.5)
spd2 = AKIVehTrackedGetInf(idVehSecond).CurrentSpeed + rand(0.5)
AKIVehTrackedModifySpeed(idVehFirst, spd1)
AKIVehTrackedModifySpeed(idVehSecond, spd2)
if AKIVehTrackedGetInf(idVehSecond).idSection == 545:
AKIVehTrackedModifyNextSection(idVehSecond, 546)
return 0
def AAPIFinish():
return 0
def AAPIUnLoad():
return 0
def AAPIEnterVehicle(idveh,idsection):
return 0
def AAPIExitVehicle(idveh,idsection):
return 0