Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
vadere
vadere
Commits
b50befdd
Commit
b50befdd
authored
Nov 30, 2018
by
Stefan Schuhbaeck
Browse files
add additional call to topographyController to synchronize the LinkedCellGrid.
parent
a1f3607a
Pipeline
#77737
failed with stages
in 109 minutes and 33 seconds
Changes
6
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Tools/ContinuousIntegration/run_vadere_console_with_all_scenario_files.py
View file @
b50befdd
...
...
@@ -14,6 +14,8 @@ import re
import
shutil
import
subprocess
import
time
import
argparse
def
find_scenario_files
(
path
=
"VadereModelTests"
,
scenario_search_pattern
=
"*.scenario"
,
exclude_patterns
=
[
"TESTOVM"
,
"output"
,
"legacy"
]):
scenario_files
=
[]
...
...
@@ -44,17 +46,22 @@ def run_scenario_files_with_vadere_console(scenario_files, vadere_console="Vader
passed_scenarios
=
[]
failed_scenarios_with_exception
=
[]
failed_summary
=
[]
for
i
,
scenario_file
in
enumerate
(
scenario_files
):
try
:
print
(
"Running scenario file ({}/{}): {}"
.
format
(
i
+
1
,
total_scenario_files
,
scenario_file
))
scenario_name
=
os
.
path
.
basename
(
scenario_file
).
split
(
'.'
)[
0
]
log_file
=
os
.
path
.
join
(
scenario_name
+
".log"
)
# Measure wall time and not CPU time simply because it is the simplest method.
wall_time_start
=
time
.
time
()
# Use timout feature, check return value and capture stdout/stderr to a PIPE (use completed_process.stdout to get it).
completed_process
=
subprocess
.
run
(
args
=
[
"java"
,
"-enableassertions"
,
"-jar"
,
vadere_console
,
"scenario-run"
,
"-f"
,
scenario_file
,
"-o"
,
output_dir
],
completed_process
=
subprocess
.
run
(
args
=
[
"java"
,
"-enableassertions"
,
"-jar"
,
vadere_console
,
"--logname"
,
log_file
,
"scenario-run"
,
"-f"
,
scenario_file
,
"-o"
,
output_dir
],
timeout
=
scenario_timeout_in_sec
,
check
=
True
,
stdout
=
subprocess
.
PIPE
,
...
...
@@ -65,6 +72,7 @@ def run_scenario_files_with_vadere_console(scenario_files, vadere_console="Vader
print
(
"Finished scenario file ({:.1f} s): {}"
.
format
(
wall_time_delta
,
scenario_file
))
passed_scenarios
.
append
(
scenario_file
)
except
subprocess
.
TimeoutExpired
as
exception
:
print
(
"Scenario file failed: {}"
.
format
(
scenario_file
))
...
...
@@ -76,17 +84,39 @@ def run_scenario_files_with_vadere_console(scenario_files, vadere_console="Vader
prefix
=
" * OSM * "
print
(
prefix
+
"Scenario file failed: {}"
.
format
(
scenario_file
))
print
(
"-> Reason: non-zero return value {}"
.
format
(
exception
.
returncode
))
print
(
" {}"
.
format
(
read_first_error_linies
(
exception
.
stderr
)))
failed_summary
.
append
(
prefix
+
"Scenario file failed: {}"
.
format
(
scenario_file
))
failed_summary
.
append
(
"-> Reason: non-zero return value {}"
.
format
(
exception
.
returncode
))
failed_summary
.
append
(
" {}"
.
format
(
read_first_error_linies
(
exception
.
stderr
)))
failed_scenarios_with_exception
.
append
((
scenario_file
,
exception
))
if
os
.
path
.
exists
(
output_dir
):
shutil
.
rmtree
(
output_dir
)
return
{
"passed"
:
passed_scenarios
,
"failed"
:
failed_scenarios_with_exception
}
return
{
"passed"
:
passed_scenarios
,
"failed"
:
failed_scenarios_with_exception
,
"failed_summary"
:
failed_summary
}
def
read_first_error_linies
(
error_byte_string
):
err_string_lines
=
error_byte_string
.
decode
(
'utf-8'
).
split
(
'
\n
'
)
if
len
(
err_string_lines
)
>=
2
:
return
re
.
sub
(
'\s+'
,
' '
,
' '
.
join
(
err_string_lines
[:
2
]))
else
:
return
'unknown error see vadere log file.'
def
print_summary
(
passed_and_failed_scenarios
):
total_passed_scenarios
=
len
(
passed_and_failed_scenarios
[
"passed"
])
total_failed_scenarios
=
+
len
(
passed_and_failed_scenarios
[
"failed"
])
total_scenarios
=
total_passed_scenarios
+
total_failed_scenarios
faild_summary
=
passed_and_failed_scenarios
[
"failed_summary"
]
if
len
(
faild_summary
)
>
0
:
print
(
"#################"
)
print
(
"# Faild Summary #"
)
print
(
"#################"
)
for
line
in
faild_summary
:
print
(
line
)
print
(
"###########"
)
print
(
"# Summary #"
)
...
...
@@ -96,8 +126,7 @@ def print_summary(passed_and_failed_scenarios):
print
(
"Passed: {}"
.
format
(
total_passed_scenarios
))
print
(
"Failed: {}"
.
format
(
total_failed_scenarios
))
if
__name__
==
"__main__"
:
def
run_all
():
long_running_scenarios
=
[
"basic_4_1_wall_gnm1"
,
"queueing"
,
...
...
@@ -118,9 +147,24 @@ if __name__ == "__main__":
for
scenario
in
long_running_scenarios
:
search_pattern
=
"*"
+
scenario
+
"*.scenario"
scenario_files_long
=
find_scenario_files
(
scenario_search_pattern
=
search_pattern
)
tmp_passed_and_failed_scenarios
=
run_scenario_files_with_vadere_console
(
scenario_files_long
,
scenario_timeout_in_sec
=
480
)
tmp_passed_and_failed_scenarios
=
run_scenario_files_with_vadere_console
(
scenario_files_long
,
scenario_timeout_in_sec
=
480
)
passed_and_failed_scenarios
[
"passed"
].
extend
(
tmp_passed_and_failed_scenarios
[
"passed"
])
passed_and_failed_scenarios
[
"failed"
].
extend
(
tmp_passed_and_failed_scenarios
[
"failed"
])
passed_and_failed_scenarios
[
"failed_summary"
].
extend
(
tmp_passed_and_failed_scenarios
[
"failed_summary"
])
return
passed_and_failed_scenarios
if
__name__
==
"__main__"
:
parser
=
argparse
.
ArgumentParser
(
description
=
'Run ModelTest'
)
parser
.
add_argument
(
'--scenario'
,
'-s'
,
nargs
=
'?'
,
default
=
''
,
metavar
=
'S'
,
help
=
'only run one selected scenario'
)
args
=
vars
(
parser
.
parse_args
())
if
args
[
'scenario'
]
==
''
:
passed_and_failed_scenarios
=
run_all
()
else
:
passed_and_failed_scenarios
=
run_scenario_files_with_vadere_console
([
args
[
'scenario'
]])
print_summary
(
passed_and_failed_scenarios
)
...
...
VadereSimulator/src/org/vadere/simulator/control/Simulation.java
View file @
b50befdd
...
...
@@ -289,12 +289,13 @@ public class Simulation {
targetController
.
update
(
simTimeInSec
);
}
topographyController
.
update
(
simTimeInSec
);
topographyController
.
update
(
simTimeInSec
);
//rebuild CellGrid
step
++;
for
(
Model
m
:
models
)
{
m
.
update
(
simTimeInSec
);
}
topographyController
.
update
(
simTimeInSec
);
//rebuild CellGrid
if
(
topographyController
.
getTopography
().
hasTeleporter
())
{
teleporterController
.
update
(
simTimeInSec
);
...
...
VadereSimulator/src/org/vadere/simulator/control/TargetController.java
View file @
b50befdd
...
...
@@ -27,9 +27,9 @@ public class TargetController {
public
TrafficLightPhase
phase
=
TrafficLightPhase
.
GREEN
;
public
TargetController
(
Topography
scenario
,
Target
target
)
{
public
TargetController
(
Topography
topography
,
Target
target
)
{
this
.
target
=
target
;
this
.
topography
=
scenario
;
this
.
topography
=
topography
;
if
(
this
.
target
.
isStartingWithRedLight
())
{
phase
=
TrafficLightPhase
.
RED
;
...
...
VadereSimulator/src/org/vadere/simulator/entrypoints/cmd/VadereConsole.java
View file @
b50befdd
...
...
@@ -21,6 +21,9 @@ public class VadereConsole {
private
final
static
Logger
logger
=
Logger
.
getLogger
(
VadereConsole
.
class
);
public
static
void
main
(
String
[]
args
)
{
// rimea_01_pathway_gnm1.scenario rimea_04_flow_gnm1_050_h.scenario
// String[] tmp = {"scenario-run", "-f", "VadereModelTests/TestGNM/scenarios/rimea_04_flow_gnm1_050_h.scenario"};
// args = tmp;
ArgumentParser
parser
=
createArgumentParser
();
try
{
...
...
VadereState/src/org/vadere/state/scenario/DynamicElementContainer.java
View file @
b50befdd
...
...
@@ -61,7 +61,9 @@ public class DynamicElementContainer<T extends DynamicElement> {
this
.
elementMap
.
put
(
element
.
getId
(),
element
);
this
.
cellsElements
.
addObject
(
element
);
assert
(
elementMap
.
size
()
==
cellsElements
.
size
());
assert
(
elementMap
.
size
()
==
cellsElements
.
size
())
:
"Number of pedestrians in LinkedCellGrid does not match number of pedestrians"
+
" in topography"
;
for
(
DynamicElementAddListener
<
T
>
listener
:
addListener
)
{
listener
.
elementAdded
(
element
);
...
...
@@ -71,7 +73,10 @@ public class DynamicElementContainer<T extends DynamicElement> {
public
synchronized
void
moveElement
(
T
element
,
VPoint
oldPosition
)
{
this
.
cellsElements
.
moveObject
(
element
,
oldPosition
);
assert
(
elementMap
.
size
()
==
cellsElements
.
size
());
assert
(
elementMap
.
size
()
==
cellsElements
.
size
())
:
"Number of pedestrians in LinkedCellGrid does not match number of pedestrians"
+
" in topography"
;
for
(
DynamicElementMoveListener
<
T
>
listener
:
moveListener
)
{
listener
.
elementMove
(
element
);
}
...
...
@@ -81,7 +86,9 @@ public class DynamicElementContainer<T extends DynamicElement> {
this
.
elementMap
.
remove
(
element
.
getId
());
this
.
cellsElements
.
removeObject
(
element
);
assert
(
elementMap
.
size
()
==
cellsElements
.
size
());
assert
(
elementMap
.
size
()
==
cellsElements
.
size
())
:
"Number of pedestrians in LinkedCellGrid does not match number of pedestrians"
+
" in topography"
;
for
(
DynamicElementRemoveListener
<
T
>
listener
:
removeListener
)
{
listener
.
elementRemoved
(
element
);
}
...
...
VadereUtils/src/org/vadere/util/geometry/LinkedCellsGrid.java
View file @
b50befdd
...
...
@@ -76,6 +76,33 @@ public class LinkedCellsGrid<T extends PointPositioned> implements Iterable<T> {
}
}
private
class
ContainerisedElement
{
final
private
int
[]
cell
;
final
private
T
object
;
ContainerisedElement
(
int
[]
cell
,
T
object
){
this
.
cell
=
cell
;
this
.
object
=
object
;
}
public
int
[]
getCell
()
{
return
cell
;
}
public
T
getObject
()
{
return
object
;
}
@Override
public
String
toString
()
{
return
"ContainerisedElement{"
+
"cell="
+
Arrays
.
toString
(
cell
)
+
", object="
+
object
+
", pos= "
+
((
PointPositioned
)
object
).
getPosition
()
+
'}'
;
}
}
/**
* Generates an empty grid of GridCell<T> objects.
*
...
...
@@ -301,6 +328,19 @@ public class LinkedCellsGrid<T extends PointPositioned> implements Iterable<T> {
return
false
;
}
public
List
<
ContainerisedElement
>
getElementContainer
(
final
T
element
){
List
<
ContainerisedElement
>
elements
=
new
ArrayList
<>();
for
(
int
r
=
0
;
r
<
grid
.
length
;
r
++)
{
// TODO [priority=medium] [task=test] changed this [20.08.2014] here 1 to r - pls check this
for
(
int
c
=
0
;
c
<
grid
[
r
].
length
;
c
++)
{
if
(
grid
[
r
][
c
].
objects
.
contains
(
element
)){
elements
.
add
(
new
ContainerisedElement
(
new
int
[]{
r
,
c
},
element
));
}
}
}
return
elements
;
}
@Override
public
int
hashCode
()
{
final
int
prime
=
31
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment