1 Emulador de Botoeiras no VISSIM

Este projeto visa fornecer um mecanismo para simular o acionamento de botoeiras de pedestres no vissim. Para este fim foram gerados dois ciclos com tempos que consideram o tempo de ciclo com acionamento da botoeira e sem acionamento de botoeira.

Primeiramente foi criado o tempo de ciclo normal de 70 segundos como demonstrado (Figura 1).

Figura 1: Tempo de ciclo sem acionamente de pedestres

Figura 1: Tempo de ciclo sem acionamente de pedestres

Na sequencia foi criado o tempo de ciclo de pedestres de 92 segundos como demonstrado (Figura 2).

Figura 2: Tempo de ciclo com acionamente de pedestres

Figura 2: Tempo de ciclo com acionamente de pedestres

Após em Daily Signal Program foi criada uma sequencia de troca de programações (Figura 3). Note que esta sequencia visa alterar a programação semafórica ao longo do dia. O intuito foi utilizar este instrumento para alterar a programação a cada ciclo gerando de forma randomizada, a simulação de ciclos com e sem acionamento de botoeiras de pedestres.
Figura 3: Sequencia de programações diárias

Figura 3: Sequencia de programações diárias

As configurações de Signal Controles ficam armazenadas em arquivos .sig no diretório dos arquivos do projeto. A Figura 4 apresenta parte do codigo XML do arquivo com a tag dailyProgLists que exibe a ID cada programação e o instante de inicialização. O objetivo é gerar uma sequência de programações curtas que permitam intercalar estágios com e sem acionamento de botoeiras e estejam aninhados como atributos do tipo dailyProgListItem

Figura 4:

Figura 4:

1.1 Gerando os elementos dailyProgListItem

Como a inteção é facilitar a criação de atributs dailyProgListItem ao longo de períodos de 30/60 minutos recorreu-se ao uso de um script para obter esta programação, evitando cálculos e configurações excessivas na interface do VISSIM.

Para tanto, alguns parametros necessários para o signal controller foram definidos, permitindo gerar uma sequencia de programações de ciclos desejados no formato do arquivo de configurção de semáforos do VISSIM.

O usuário ao definir a duração de um cilo semafórico no VISSIM fornece o tempo em segundos, posteriormente este tempo é convertido em milissegundos pelo próprio programa. Para lidar com isso, inicialmente cria-se a variável milisegundos para obter o produto \(tempo*milisegundos\)

milissegundos = 1000

Como o tempo de ciclo se altera com o acionamento da botoeira e deseja-se simular ciclos com e sem acionamento, é criada uma variável do tipo lista com os tempos dos dois ciclos em segundos.

segundos = c(70,92)

Como diferentes cenários podem iniciar em diferentes horários, foi criada a variável start que armazena o instante de inicialização da simulação. Este valor deverá ser alterado de acordo com o horário da simulação definido em Silulation/Parameters/Start Time no VISSIM.

start = 00000000

Posteriormente é criada uma lista com as IDs das programações que correspondem aos ciclos com e sem acionamento por pedestres,

prog = c(1, 2)

Por fim é criada a variável informando o limite do tempo de simulação, responsável por encerrar o laço que irá criar os atributos de programação de sequencia dos estágios.

limite = 3600000

Para garantir que os resultados sejam impressos como valores inteiros, é setado o parametro scipen.

options(scipen = 999)

Feito isso, é criada afunção que irá gerar o código desejado

gerador = function(ciclo, ch, inicio, programas, teto){
  for (i in 1:1000) {
    a = sample(c(1, 2), 1, replace=TRUE, prob=c(0.5,0.5)) # randomização do acionamento da botoeira
    pedestre = prog[a] # obtenção do ciclo com ou sem pedestre de acordo com a randomização
    t = segundos[a]*milissegundos # obtenção do tempo correspondente ao ciclo definido como com ou sem pedestre
    time = ifelse(i == 1, start, start+t) # definição do tempo de inicio do ciclo definido
    start = time
    if (start > teto) {
      break() # encerramento da iteração ao atingir o limite maximo de tempo
    }else{ # criação da linha de código para configuração do arquivo .sig
      cat('<dailyProgListItem time="' , start, '" prog_id="', pedestre, '" />',sep = "")
      cat("\n")  
    }
  }  
}

Ao executar o laço, iterativamente é criado o código desejado:

gerador(ciclo = segundos, ch = r, inicio = start, programas = prog, teto = limite)
## <dailyProgListItem time="0" prog_id="2" />
## <dailyProgListItem time="92000" prog_id="2" />
## <dailyProgListItem time="184000" prog_id="2" />
## <dailyProgListItem time="276000" prog_id="2" />
## <dailyProgListItem time="368000" prog_id="2" />
## <dailyProgListItem time="438000" prog_id="1" />
## <dailyProgListItem time="508000" prog_id="1" />
## <dailyProgListItem time="600000" prog_id="2" />
## <dailyProgListItem time="670000" prog_id="1" />
## <dailyProgListItem time="762000" prog_id="2" />
## <dailyProgListItem time="832000" prog_id="1" />
## <dailyProgListItem time="902000" prog_id="1" />
## <dailyProgListItem time="972000" prog_id="1" />
## <dailyProgListItem time="1064000" prog_id="2" />
## <dailyProgListItem time="1134000" prog_id="1" />
## <dailyProgListItem time="1226000" prog_id="2" />
## <dailyProgListItem time="1318000" prog_id="2" />
## <dailyProgListItem time="1388000" prog_id="1" />
## <dailyProgListItem time="1458000" prog_id="1" />
## <dailyProgListItem time="1550000" prog_id="2" />
## <dailyProgListItem time="1620000" prog_id="1" />
## <dailyProgListItem time="1712000" prog_id="2" />
## <dailyProgListItem time="1804000" prog_id="2" />
## <dailyProgListItem time="1874000" prog_id="1" />
## <dailyProgListItem time="1966000" prog_id="2" />
## <dailyProgListItem time="2058000" prog_id="2" />
## <dailyProgListItem time="2128000" prog_id="1" />
## <dailyProgListItem time="2220000" prog_id="2" />
## <dailyProgListItem time="2312000" prog_id="2" />
## <dailyProgListItem time="2382000" prog_id="1" />
## <dailyProgListItem time="2452000" prog_id="1" />
## <dailyProgListItem time="2544000" prog_id="2" />
## <dailyProgListItem time="2636000" prog_id="2" />
## <dailyProgListItem time="2706000" prog_id="1" />
## <dailyProgListItem time="2798000" prog_id="2" />
## <dailyProgListItem time="2890000" prog_id="2" />
## <dailyProgListItem time="2960000" prog_id="1" />
## <dailyProgListItem time="3030000" prog_id="1" />
## <dailyProgListItem time="3100000" prog_id="1" />
## <dailyProgListItem time="3170000" prog_id="1" />
## <dailyProgListItem time="3262000" prog_id="2" />
## <dailyProgListItem time="3332000" prog_id="1" />
## <dailyProgListItem time="3402000" prog_id="1" />
## <dailyProgListItem time="3494000" prog_id="2" />
## <dailyProgListItem time="3564000" prog_id="1" />

A próxima etapa consiste em copiar o código e inserir no arquivo .sig (Figura 5), definindo configuração gerada

Figura 5:

Figura 5:

Após salvo o arquivo .sig basta abrir o VISSIM e verificar no signal controler (Figura 6) que a programação foi efetivamente configurada. O próximo passo é ativar a varição dinâmica dos ciclos no VISSIM.

Figura 6:

Figura 6:

Para ativar a alteração dinâmica de ciclos, basta abrir a lista de Signal Controllers e no signal controller desejado alterar o atributo ProgNo para o ID do Daily signal program list, nesse exemplo iqual a 1000.

Figura 7:

Figura 7:

Após basta salvar o arquivo VISSIM para que as alterações sejam definidas (Figura 8).

Figura 8:

Figura 8: