Skip to content

Exemplo 5 da Aimsun Next Micro API

Exemplo de Gestão de Transporte Público

Este exemplo mostra como gerenciar o transporte público. Ele gera um novo ônibus um minuto após o início da simulação e desabilita sua primeira parada de ônibus. Ao mesmo tempo, o Módulo da API Aimsun Next armazena a distância percorrida.

Versão C++

#include "AKIProxie.h"
#include "CIProxie.h"
#include "ANGConProxie.h"
#include "AAPI.h"
#include <fstream>

char            astring[128];
std::ofstream   fileFloatCar;
int         idveh = 0;
int         busVehicleTypeId = 79;
bool        timeChanged = false;
// Os procedimentos podem ser modificados pelo usuário
int AAPILoad()
{   
    return 0;
}

int AAPIInit()
{   
    AKIPrintString("Iniciando....");
    fileFloatCar.open("C:/tmp/BusyPy.txt", std::ios::out);
    idveh = 0;
    return 0;
}

int AAPISimulationReady()
{
    return 0;
}

int AAPIManage(double time, double timeSta, double timeTrans, double acycle)
{
    double tempsEntrada = AKIGetIniSimTime() + 60;
    if (timeSta == tempsEntrada) {
        AKIPrintString("Entrando em um Veículo");
        //obtendo a posição do tipo de veículo de ônibus
        int busPosition = AKIVehGetVehTypeInternalPosition(busVehicleTypeId);
        idveh = AKIPTEnterVeh( 1, busPosition, 1 );
        snprintf(astring, 128, " idveh = %d", idveh);
        AKIPrintString(astring);
    }
    if (timeSta >= tempsEntrada + 1 && timeChanged == false) {
        AKIPrintString("Modificando o Tempo de Parada da primeira parada de ônibus");
        double res = 0;
        res = AKIPTVehModifyStopTime( idveh, 0, 0 );
        snprintf(astring, 128, " res = %d", res);
        AKIPrintString(astring);
        timeChanged = true;
    }
    return 0;
}

int AAPIPostManage(double time, double timeSta, double timeTrans, double acycle)
{ 
    if (idveh > 0) {
        InfVeh infveh = AKIVehTrackedGetInf(idveh);
        if (infveh.report == 0) {
            snprintf(astring, 128, "%f %f
", timeSta, infveh.TotalDistance);
            fileFloatCar << astring;
        } else {
            idveh = 0;
            fileFloatCar.close();
        }
    }
    return 0;
}

int AAPIFinish()
{
    AKIPrintString("...Finalizando");
    return 0;
}

int AAPIUnLoad()
{
    return 0;
}

Versão Python

from AAPI import *

#variáveis globais
fileFloatCar = 0
idveh=0
busVehicleTypeId = 79
timeChanged = False

def AAPILoad():
    return 0
def AAPIInit():
    AKIPrintString("Iniciando....")
    global idveh, fileFloatCar
    fileFloatCar=open('C:/tmp/BusPy.txt', 'w');
    idveh = 0
    return 0

def AAPISimulationReady():
    return 0

def AAPIManage(time, timeSta, timeTrans, acycle):
    global idveh
    global busVehicleTypeId
    global timeChanged

    tempsEntrada = AKIGetIniSimTime()+60
    if timeSta == tempsEntrada:
        AKIPrintString("Entrando em um Veículo")
        #obtendo a posição do tipo de veículo de ônibus
        busPosition = AKIVehGetVehTypeInternalPosition(busVehicleTypeId)
        idveh = AKIPTEnterVeh( 1418, busPosition, True )
        astring = ' idveh = %d' %(idveh)
        AKIPrintString(astring)


    if timeSta >= tempsEntrada + 1 and timeChanged == False:
        AKIPrintString("Modificando o Tempo de Parada da primeira parada de ônibus")     
        res = AKIPTVehModifyStopTime( idveh, 0, 0 )
        astring = ' res = %d' %(res)
        AKIPrintString(astring)
        timeChanged = True
    return 0

def AAPIPostManage(time, timeSta, timeTrans, acycle):
    global idveh, fileFloatCar
    if idveh > 0 :
        infveh = AKIVehTrackedGetInf(idveh)
        if infveh.report == 0:
            astring = "%f %f
" %(timeSta, infveh.TotalDistance)
            fileFloatCar.write(astring)
        else:
            idveh = 0
            fileFloatCar.close()
    return 0

def AAPIFinish():
    AKIPrintString("...Finalizando")
    return 0

def AAPIUnLoad():
    return 0