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
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 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:
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:
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:
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:
Após basta salvar o arquivo VISSIM para que as alterações sejam definidas (Figura 8).
Figura 8: