{"id":512,"date":"2014-08-21T16:55:28","date_gmt":"2014-08-21T19:55:28","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/?p=512"},"modified":"2021-06-24T07:54:55","modified_gmt":"2021-06-24T10:54:55","slug":"sumo-flow","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/blog\/sumo-flow\/","title":{"rendered":"Gera\u00e7\u00e3o de fluxos de ve\u00edculos no SUMO"},"content":{"rendered":"\n<p>A defini\u00e7\u00e3o ve\u00edculo-a-ve\u00edculo nas rotas \u00e9 uma atividade custosa, tanto no momento de especificar os ve\u00edculos, quanto em alguma modifica\u00e7\u00e3o que precise ser feita na quantidade de ve\u00edculos, j\u00e1 que normalmente a simula\u00e7\u00e3o contar\u00e1 com um grande n\u00famero deles. Para facilitar a especifica\u00e7\u00e3o de muitos ve\u00edculos, existe a op\u00e7\u00e3o de especificar um fluxo (flow) para a rota.<\/p>\n\n\n\n<p>A duas maneiras dispon\u00edveis para especificar um fluxo s\u00e3o a elabora\u00e7\u00e3o de um arquivo adicional e a especifica\u00e7\u00e3o na pr\u00f3pria rota.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><b>Especifica\u00e7\u00e3o na pr\u00f3pria rota<\/b><\/p>\n\n\n\n<p>A defini\u00e7\u00e3o de um fluxo ir\u00e1 realizar a repetitividade de carros em uma determinada rota. Sua especifica\u00e7\u00e3o \u00e9 simples, sendo realizada no lugar da especifica\u00e7\u00e3o do ve\u00edculo (vehicle), no arquivo de rotas, conforme exemplificado a seguir.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;flow begin=\"0\" end= \"200\" period=\"20\" color=\"1,1,0\" type=\"BUS\" id=\"type1\" route=\"from1\" \/&gt;<\/code><\/pre>\n\n\n\n<p>\u00c9 preciso definir o momento da simula\u00e7\u00e3o quando o primeiro ve\u00edculo partir\u00e1 e quando ser\u00e1 o momento final de gera\u00e7\u00e3o dos ve\u00edculos. A quantidade de ve\u00edculos \u00e9 regulada por algum dos seguintes par\u00e2metros:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>number<\/em> (n\u00famero): um n\u00famero inteiro que indica o total de ve\u00edculos que dever\u00e1 ser adicionada ao fluxo, de maneira linearmente espa\u00e7ada. Se o intervalo entre in\u00edcio e fim do fluxo for de 100 segundos e o n\u00famero for 50, ser\u00e1 gerado um carro a cada 2 segundos.<\/li><li><em>period<\/em> (per\u00edodo): define quanto tempo (em segundos) deve ser deixado entre um ve\u00edculo e outro em sua gera\u00e7\u00e3o. O valor pode ser especificado como decimal. Se for especificado um tempo de 5 segundos em uma fluxo com dura\u00e7\u00e3o de 100 segundos, 20 ve\u00edculos ir\u00e3o surgir na rota, com um intervalo de tempo entre eles de 5 segundos.<\/li><li>vehsPerHour (ve\u00edculos por hora): tamb\u00e9m um valor decimal, esse par\u00e2metro indica quantos ve\u00edculos por hora devem ser gerados, sendo esses tamb\u00e9m linearmente espa\u00e7ados.<\/li><li><em>probability<\/em> (probabilidade): um valor decimal dentro do intervalo entre zero e 1. A cada segundo \u00e9 realizado um &#8220;sorteio&#8221; que define, juntamente com a probabilidade estipulada, se ser\u00e1 gerado um carro.<\/li><\/ul>\n\n\n\n<p>Al\u00e9m desses elementos pr\u00f3prios do <em>flow<\/em>, tamb\u00e9m \u00e9 poss\u00edvel adicionar algumas caracteriza\u00e7\u00f5es pr\u00f3prias do ve\u00edculos, como cor (color) e o tipo (type). Tamb\u00e9m \u00e9 preciso especificar uma identifica\u00e7\u00e3o \u00fanica, assim como em outros elementos, e o nome da rota (identificador da rota) onde o fluxo deve ser associado.<\/p>\n\n\n\n<p>Observe que, como \u00e9 poss\u00edvel especificar o in\u00edcio e o fim do fluxo, adicionando-se outro fluxo na rota \u00e9 poss\u00edvel simular mudan\u00e7as de movimento dependendo do hor\u00e1rio. Por exemplo, poderia ser feito um fluxo representando o hor\u00e1rio da meia noite at\u00e9 sete horas, colocando uma probabilidade baixa de gerar um ve\u00edculo. Um fluxo das sete at\u00e9 as oito horas com uma grande probabilidade de gerar um ve\u00edculo e depois reduzir novamente a probabilidade para o hor\u00e1rio seguinte. O exemplo abaixo ilustra essa configura\u00e7\u00e3o no exemplo.<\/p>\n\n\n\n<p>A especifica\u00e7\u00e3o abaixo mostra a inclus\u00e3o de dois fluxos de ve\u00edculo, um para cada rota e utilizando um tipo de ve\u00edculo em cada fluxo.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;routes&gt;\n  &lt;vType accel=\"2\" decel=\"4\" maxSpeed=\"20\" id=\"Car\" length=\"5\" \/&gt;\n  &lt;vType accel=\"2\" decel=\"4\" maxSpeed=\"20\" id=\"Taxi\" sigma=\"1\" length=\"5\" color=\"1,0,0\" \/&gt;\n  &lt;route id=\"rota0\" edges=\"1to2 2to3\" \/&gt;\n  &lt;route id=\"rota1\" edges=\"1to2 2to3 3to2 2to1\" \/&gt;\n  &lt;flow id=\"f1\" type=\"Car\"  route=\"rota0\" begin=\"0\" end=\"900\" period=\"30\"\/&gt;\n  &lt;flow id=\"f2\" type=\"Taxi\" route=\"rota1\" begin=\"0\" end=\"900\" period=\"30\"\/&gt;\n&lt;\/routes&gt;<\/code><\/pre>\n\n\n\n<p>Na especifica\u00e7\u00e3o a seguir s\u00e3o adicionados outros 2 fluxos, sendo que esses geram ve\u00edculos do tipo &#8220;Bus&#8221; para ser mais f\u00e1cil visualizar. O fluxo identificado como &#8220;f3&#8221; \u00e9 similar ao identificado por &#8220;f2&#8221;, diferenciando-se apenas com um aumento no n\u00famero de ve\u00edculos gerados. Observe que quando acaba (propriedade <em>end<\/em>) o fluxo &#8220;f2&#8221;, o fluxo &#8220;f3&#8221; inicia e esse tem um per\u00edodo de espera em&nbsp;gerar um ve\u00edculo menor, fazendo com que mais ve\u00edculos sejam criados (no caso, 6 vezes maior).<\/p>\n\n\n\n<p>O quarto fluxo (f4) \u00e9 baseado em probabilidade, sendo que a cada segundo existe 10% de chance de ser gerado um ve\u00edculo e esse foi configurado para ser mostrado na cor verde, sendo o valor especificado no par\u00e2metro &#8220;<em>color<\/em>&#8220;, conforme pode ser visto na linha 10.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;routes&gt;\n  &lt;vType accel=\"2\" decel=\"4\" maxSpeed=\"20\" id=\"Car\" length=\"5\" \/&gt;\n  &lt;vType accel=\"2\" decel=\"4\" maxSpeed=\"20\" id=\"Taxi\" sigma=\"1\" length=\"5\" color=\"1,0,0\" \/&gt;\n  &lt;vType accel=\"1\" decel=\"3\" maxSpeed=\"16\" id=\"Bus\" length=\"10\" \/&gt;\n  &lt;route id=\"rota0\" edges=\"1to2 2to3\"\/&gt;\n  &lt;route id=\"rota1\" edges=\"1to2 2to3 3to2 2to1\"\/&gt;\n  &lt;flow id=\"f1\" type=\"Car\"  route=\"rota0\" begin=\"0\"   end=\"900\" period=\"30\" \/&gt;\n  &lt;flow id=\"f2\" type=\"Taxi\" route=\"rota1\" begin=\"0\"   end=\"300\" period=\"60\" \/&gt;\n  &lt;flow id=\"f3\" type=\"Bus\"  route=\"rota1\" begin=\"301\" end=\"600\" period=\"10\" \/&gt;\n  &lt;flow id=\"f4\" type=\"Bus\"  route=\"rota0\" begin=\"601\" end=\"900\" probability=\"0.1\" color=\"0,1,0\" \/&gt;\n&lt;\/routes&gt;<\/code><\/pre>\n\n\n\n<p>A defini\u00e7\u00e3o de fluxos \u00e9 bastante \u00fatil para reduzir a dimens\u00e3o do arquivo de rotas e ainda permite que ve\u00edculos individuais sejam definidos. Al\u00e9m disso, a distribui\u00e7\u00e3o por probabilidade gera uma simula\u00e7\u00e3o de tr\u00e2nsito mais real\u00edstica, sendo o comportamento n\u00e3o ficar\u00e1 sempre exatamente igual quando repetida a simula\u00e7\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A defini\u00e7\u00e3o ve\u00edculo-a-ve\u00edculo nas rotas \u00e9 uma atividade custosa, tanto no momento de especificar os ve\u00edculos, quanto em alguma modifica\u00e7\u00e3o que precise ser feita na quantidade de ve\u00edculos, j\u00e1 que normalmente a simula\u00e7\u00e3o contar\u00e1 com um grande n\u00famero deles. Para facilitar a especifica\u00e7\u00e3o de muitos ve\u00edculos, existe a op\u00e7\u00e3o de especificar um fluxo (flow) para [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":632,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[13],"tags":[18],"class_list":["post-512","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-simulacao","tag-sumo"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/comments?post=512"}],"version-history":[{"count":4,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/512\/revisions"}],"predecessor-version":[{"id":1076,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/512\/revisions\/1076"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/media\/632"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/media?parent=512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/categories?post=512"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/tags?post=512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}