Skip to the content.

Configuration

A scenario lives in a folder of five files. The parameter names are the same as the Java framework, so an existing settings folder is read as-is. This page documents what the Python parser accepts, the units, the defaults, and which parameters the Python port actually acts on.

The properties parser is load_parameters in pureedgesim/parameters.py. The XML parsers are in pureedgesim/config.py, entered through load_settings(folder).

How properties are read

simulation_parameters.properties is a plain key=value file. The loader ignores blank lines, lines starting with #, and lines without =. Keys are case-sensitive. There are no inline comments: everything after the = is part of the value.

Two behaviors are worth knowing:

Simulation, execution, and output

Property Attribute it sets Default Units and notes
simulation_time simulation_duration 10 Minutes; the parser multiplies by 60. Must be > 0.
update_interval update_interval 1 Seconds between a node’s status tick (mobility, static energy, battery). >= 0.01.
pause_length pause_length 3 Wall-clock seconds between sequential iterations. Cosmetic; >= 0.
batch_size batch_size 100 Root tasks pushed into the event queue at once. > 0.
random_seed random_seed none Whole number. Set it for reproducible runs; leave empty for a fresh run each time.
parallel_simulation parallel_simulation false Runs scenarios in separate processes. Writes Parallel_simulation.csv.
wait_for_all_tasks wait_for_all_tasks true Continue past simulation_time until every task is terminal (bounded).
save_log_file save_log_file true Write the per-scenario .txt report. The CSV is always written.
clear_output_folder clear_output_folder false Delete the output folder before the first iteration (skipped if it is the CWD).
output_folder output_folder output Base results folder; a timestamped subfolder is created inside it.

Charts and logging (parsed, no effect in Python)

These keys are read and validated so a Java settings folder parses cleanly, but the Python port has no visualizer or per-event logger, so they do nothing:

Property State in Python
display_real_time_charts Accepted, ignored. There is no Swing/chart window.
auto_close_real_time_charts Accepted, ignored.
charts_update_interval Accepted, validated (0.01 to 60), otherwise ignored.
save_charts Accepted, ignored. No chart images are produced.
deep_log_enabled Accepted, ignored. There is no SimLog equivalent.

See Python vs Java for the full gap list.

Map and wireless range

Property Attribute it sets Default Units
length simulation_map_length 200 Meters. The map spans [0, width] x [0, length]. > 0.
width simulation_map_width 200 Meters. > 0.
edge_devices_range edge_devices_range 10 Meters; device-to-device (mist) and orchestrator reach. > 0.
edge_datacenters_coverage edge_data_centers_range 200 Meters; max device-to-edge-DC distance. > 0.

Orchestration

Property Attribute it sets Default Notes
enable_orchestrators enable_orchestrators false False: each device decides locally. True: delegate to the node chosen by deploy_orchestrator.
deploy_orchestrator deploy_orchestrator CLOUD MIST (the device), CLOUD (first cloud DC), EDGE (device’s serving edge DC), or any other string picks the nearest node marked as an orchestrator.
orchestration_architectures orchestration_architectures ALL Comma list. Valid: CLOUD_ONLY, EDGE_ONLY, MIST_ONLY, MIST_AND_CLOUD, EDGE_AND_CLOUD, MIST_AND_EDGE, ALL.
orchestration_algorithms orchestration_algorithms TRADE_OFF Comma list. Built-in: TRADE_OFF, ROUND_ROBIN. A custom orchestrator may accept others.

The sweep runs the cross product of architectures, then algorithms, then device counts. Each combination is one scenario, one CSV row.

Edge device sweep

Property Attribute it sets Default Notes
min_number_of_edge_devices min_number_of_devices 100 Start of the device sweep. > 0.
max_number_of_edge_devices max_number_of_devices 300 End of the sweep, inclusive. >= min.
edge_device_counter_size devices_increment 100 Step between counts. > 0.

SimulationParameters.device_counts produces the list; if the range is empty it falls back to [max].

Registry (container download)

Property Attribute it sets Default Notes
enable_registry enable_registry false When true and registry_mode is CLOUD, a non-cloud destination downloads the application container before running the first task of that app.
registry_mode registry_mode CLOUD Validated to CLOUD or CACHE. Only CLOUD has an effect; CACHE performs no download in the default network model.

The container transfer is modeled as a network send of size container_size over the route from the registry (first cloud node) to the destination. Once a node has run an application its id is added to installed_containers, so later tasks of the same app skip the download.

Network model

Property Attribute it sets Default Notes
realistic_network_model realistic_network_model false False: each hop is served in one step, at the clock of the second that sent it. True: transfers progress one interval at a time and share the link.
network_update_interval network_update_interval 1 Seconds between the progress ticks of a busy link, in realistic mode. >= 0.001.
one_shared_wan_network one_shared_wan_network true True: a WAN router fronts the cloud, and the hop from that router to the cloud data center is typed IGNORE, so it moves no counter. False: devices link straight to the cloud data center. Either way only the gateway edge data center (the one named dc1) hangs on the WAN, and the others reach it through the MAN ring.

Bandwidths are read in Mbps (the parser multiplies by 1e6), latencies in seconds, and energies in nanojoules per bit (converted to Watt-hours by NANOJOULES_TO_WATT_HOURS = 2.7778e-13). These are the values behind the LEAF network model.

Property Default (raw) Attribute
wan_bandwidth, wan_latency, wan_nanojoules_per_bit 20, 0.06, 46.7 wan_bandwidth, wan_delay, wan_energy_per_bit
man_bandwidth, man_latency, man_nanojoules_per_bit 1000, 0.01, 0 man_bandwidth, man_delay, man_energy_per_bit
wifi_bandwidth, wifi_latency 1300, 0.005 wifi_bandwidth, wifi_delay
wifi_device_transmission_nanojoules_per_bit 283.17 wifi_device_transmission_energy
wifi_device_reception_nanojoules_per_bit 137.01 wifi_device_reception_energy
wifi_access_point_transmission_nanojoules_per_bit 23.8 wifi_access_point_transmission_energy
wifi_access_point_reception_nanojoules_per_bit 23.8 wifi_access_point_reception_energy
ethernet_bandwidth, ethernet_nanojoules_per_bit, ethernet_latency 1000, 40000, 0.002 ethernet_*
cellular_bandwidth, cellular_latency 100, 0.03 cellular_bandwidth, cellular_delay
cellular_device_transmission_nanojoules_per_bit 438.4 cellular_device_transmission_energy
cellular_device_reception_nanojoules_per_bit 51.97 cellular_device_reception_energy
cellular_base_station_nanojoules_per_bit_up_link 6200 cellular_base_station_uplink_energy
cellular_base_station_nanojoules_per_bit_down_link 20500 cellular_base_station_downlink_energy (scaled by CELLULAR_DOWNLINK_FACTOR)

Validation rules

After parsing, validate raises ValueError (naming the file and the property) if any of these fails: simulation_time > 0; update_interval >= 0.01; pause_length >= 0; batch_size > 0; length > 0; width > 0; edge_devices_range > 0; edge_datacenters_coverage > 0; min_number_of_edge_devices > 0; max >= min; edge_device_counter_size > 0; network_update_interval >= 0.001; charts_update_interval in [0.01, 60]; registry_mode in {CLOUD, CACHE}; orchestration_algorithms not empty; every architecture in the allowed set.

applications.xml

The root is <applications> with one or more <application> elements. Each application:

<application name="Health">
  <type>Hard Real-time</type>
  <rate>20</rate>
  <usage_percentage>20</usage_percentage>
  <latency>0.02</latency>
  <container_size>20</container_size>
  <request_size>20</request_size>
  <results_size>20</results_size>
  <task_length>500</task_length>
</application>
Element Meaning Units
name (attribute) Application label; falls back to id then a positional name.  
type Free text, usable by a custom orchestrator to branch. Default Unknown.  
rate Tasks generated per minute per device. Must be > 0 (mean). tasks/min
usage_percentage Share of devices using this app. The last application may omit it and takes the remainder. %
latency Maximum tolerable end-to-end delay, the task deadline. seconds
container_size Application image size. KB
request_size Offloading request payload. KB
results_size Task result payload. KB
task_length Work per task. MI (million instructions)

Every numeric element may instead be a distribution element (see Simulation models):

<task_length distribution="lognormal" mean="25000" std="8000" min="5000"/>

An optional <arrival> element turns the workload into an inter-arrival model instead of evenly-spaced bursts:

<arrival>poisson</arrival>
<arrival>uniform</arrival>
<arrival distribution="weibull" shape="2" scale="3"/>

poisson/exponential give gaps with mean 60 / rate seconds; uniform/random give gaps in [0, 2 * mean]; a distribution element gives gaps in seconds directly. An empty <arrival>, or constant/even, is the same as omitting it.

Subtasks (service graphs)

An application may declare <subtask> children to become a multi-stage service graph instead of a single task. Each subtask is one Task; the whole set is one request that shares a deadline.

<subtask name="capture"    task_length="200"  results_size="5"   latency="2"/>
<subtask name="preprocess" depends_on="capture" task_length="600" results_size="20" latency="5"/>
<subtask name="detect"     depends_on="preprocess" task_length="4000" results_size="10" latency="10"/>
<subtask name="aggregate"  depends_on="classify,track" task_length="300" results_size="20" latency="15"/>
<subtask name="enhance"    depends_on="detect" task_length="100" optional="true"/>

Recognized attributes (anything else is an error): name, depends_on, task_length, request_size, results_size, container_size, latency, optional.

cloud.xml

The root is <cloud_data_centers> with <datacenter> elements. A cloud data center may omit <location> (it defaults to the origin). All fields may be distributions.

<datacenter>
  <idleConsumption>0</idleConsumption>
  <maxConsumption>5776</maxConsumption>
  <isOrchestrator>false</isOrchestrator>
  <cores>200</cores>
  <mips>40000</mips>
  <ram>16000</ram>
  <storage>1000000</storage>
</datacenter>
Element Meaning Units
periphery Only meaningful for edge DCs; a cloud DC is never peripheral. bool
isOrchestrator Mark this node as a candidate orchestrator. bool
cores, mips Compute capacity. mips is per core, in MI/s.  
ram, storage Memory and cache, in MB. MB
idleConsumption, maxConsumption Idle and full-load power, in Watts (per hour in the energy model). W
location/x_pos, location/y_pos Fixed position on the map. meters

edge_datacenters.xml

Same <datacenter> structure, but <location> is required (a missing one is an error), and two edge DCs may not share a location. An optional <network_links> block lists MAN links between edge DCs by name:

<network_links>
  <link><from>dc1</from><to>dc2</to></link>
</network_links>

Unmatched names are skipped when the topology is built. A <datacenter> with <periphery>true</periphery> can serve nearby devices.

edge_devices.xml

The root is <edge_devices> with <device> elements, one per device type. The <percentage> of all types must sum to 100.

<device>
  <connectivity>wifi</connectivity>
  <mobility>true</mobility>
  <speed>1.8</speed>
  <minPauseDuration>100</minPauseDuration>
  <maxPauseDuration>400</maxPauseDuration>
  <minMobilityDuration>60</minMobilityDuration>
  <maxMobilityDuration>100</maxMobilityDuration>
  <battery>true</battery>
  <percentage>18</percentage>
  <batteryCapacity>18.75</batteryCapacity>
  <initialBatteryLevel>100</initialBatteryLevel>
  <idleConsumption>0.2</idleConsumption>
  <maxConsumption>5</maxConsumption>
  <isOrchestrator>false</isOrchestrator>
  <generateTasks>true</generateTasks>
  <cores>8</cores>
  <mips>25000</mips>
  <ram>4000</ram>
  <storage>256</storage>
</device>
Element Meaning Units / allowed values
connectivity Access technology. wifi, cellular, ethernet
mobility Move the device. <mobility> may be a bool or a <mobility model="..."> element. bool
speed Movement speed. m/s
min/maxPauseDuration Pause length before a move. seconds
min/maxMobilityDuration Move length before a pause. seconds
battery, batteryCapacity, initialBatteryLevel Battery model. Wh and %
percentage Share of devices of this type. % (sum = 100)
idleConsumption, maxConsumption Power draw. W
isOrchestrator, generateTasks Role flags. bool
cores, mips, ram, storage Compute. A device with mips or cores or storage of 0 is a sensor (generates tasks but cannot execute).  
location/x_pos, location/y_pos Optional clustering position; may be distributions. Without it, devices scatter uniformly. meters

A <mobility model="..."> element selects a named mobility model and passes options as attributes:

<mobility model="gauss-markov" alpha="0.8" std="15">true</mobility>
<mobility model="waypoint" waypoints="50,50;250,150;150,250">true</mobility>

See Simulation models for each model’s options.