Skip to content
Open

dev #10

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions itstools/connectv2x/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
"""Top-level package for connectv2x."""

__author__ = """Andres Ladino"""
__email__ = 'aladinoster@gmail.com'
__version__ = '0.3.0'
from .carfollow import Tampere
from .support import sigmoid, speed_pulse
from .plottools import plot_xva
from .messages import Msg2, Msg1
1 change: 0 additions & 1 deletion itstools/connectv2x/connectv2x.py

This file was deleted.

16 changes: 6 additions & 10 deletions itstools/connectv2x/traffic.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
# Imports
# ==============================================================================

from dataclasses import dataclass
import numpy as np
from bokeh.plotting import figure, show
from .vehicles import K_X, W_I, U_I
Expand All @@ -15,11 +16,12 @@
# ==============================================================================


@dataclass
class FundamentalDiagram:
def __init__(self, w=W_I, u=U_I, k_x=K_X):
self.w = w
self.k_x = k_x
self.u = u

w: float = W_I
k_x: float = K_X
u: float = U_I

@property
def C(self):
Expand Down Expand Up @@ -57,9 +59,3 @@ def plot_diagram(self):
p.xaxis.axis_label = xlabel
p.yaxis.axis_label = ylabel
return p

def __repr__(self):
return f"{self.__class__.__name__}({self.w},{self.u},{self.k_x})"

def __str__(self):
return f"Fundamental diagram w: {self.w}, u:{self.u}, k_x:{self.k_x}"
8 changes: 3 additions & 5 deletions itstools/macrotrasim/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
"""Top-level package for macrotrasim."""

__author__ = """Andres Ladino"""
__email__ = 'aladinoster@gmail.com'
__version__ = '0.1.0'
from .traffic import FundamentalDiagram, RoadLink, Demand
from .network import Network
from .lights import Light
7 changes: 7 additions & 0 deletions itstools/macrotrasim/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
RANDOM_SEED = 100
TRAFFIC_LIGHT_PERIOD = 90

U_I = 25
W_I = 6.25 # 5 # 6.25
K_X = 0.16 # 0.2 # 0.16
DT = 1 / (W_I * K_X)
46 changes: 46 additions & 0 deletions itstools/macrotrasim/lights.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# ==============================================================================
# STANDARD IMPORTS
# ==============================================================================

from dataclasses import dataclass, field
import numpy as np

# ==============================================================================
# INTERNAL IMPORTS
# ==============================================================================

from .constants import TRAFFIC_LIGHT_PERIOD as T
from .constants import RANDOM_SEED

# ==============================================================================
# CLASS AND DEFINITIONS
# ==============================================================================

RANDOM_SEED = 100
np.random.state = RANDOM_SEED
np.random.seed = RANDOM_SEED


def random_initializer(period: int = T):
green_time = np.random.randint(period)
return np.concatenate([np.ones(green_time), np.zeros(T - green_time)])


@dataclass
class Light:
state: np.array = field(default_factory=random_initializer)
period: int = T

@property
def duty(self):
"""Duty cycle"""
return np.sum(self.state) / len(self.state)

def __index__(self, value):
return self.state[value]

def setlight(self, duty: float = 0):
green_time = 10
self.state = np.concatenate(
[np.ones(green_time), np.zeros(self.period - green_time)]
)
1 change: 0 additions & 1 deletion itstools/macrotrasim/macrotrasim.py

This file was deleted.

80 changes: 80 additions & 0 deletions itstools/macrotrasim/manhattan.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
"""
Manhattan Network
=================
"""

import networkx as nx
from networkx.readwrite.edgelist import write_weighted_edgelist


def create_manhattan_intersections(m: int = 10, n: int = 10):
""" Build a manhattan grid road graph of n by m roads

Args:
m (int): number of rows
n (int): number of columns

N,W,E,S: North,Weast,East,South
"""
nodes = tuple((i, j) for i in range(m) for j in range(n))
vert_edgesSN = tuple(
(o, d) for o, d in zip(nodes, nodes[1:]) if o[1] != n - 1 and o[0] % 2
)
vert_edgesNS = tuple(
(d, o) for o, d in zip(nodes, nodes[1:]) if o[1] != n - 1 and ~o[0] % 2
)
vert_edges = vert_edgesSN + vert_edgesNS

# Suplementary external nodes/edges South
nodes_S = tuple((-1, i) for i in range(n))
edges_S = tuple(((-1, i), (0, i)) for i in range(n) if i % 2) + tuple(
((0, i), (-1, i)) for i in range(n) if ~i % 2
)

# Suplementary external nodes/edges North
nodes_N = tuple((m, i) for i in range(n))
edges_N = tuple(((m, i), (m - 1, i)) for i in range(n) if ~i % 2) + tuple(
((m - 1, i), (m, i)) for i in range(n) if i % 2
)

nodes = nodes + nodes_S + nodes_N

nodes_transposed = tuple((i, j) for j in range(n) for i in range(m))
horz_edgesEW = tuple(
(o, d)
for o, d in zip(nodes_transposed, nodes_transposed[1:])
if o[0] != m - 1 and o[1] % 2
)
horz_edgesWE = tuple(
(d, o)
for o, d in zip(nodes_transposed, nodes_transposed[1:])
if o[0] != m - 1 and ~o[1] % 2
)
horz_edges = horz_edgesEW + horz_edgesWE

# Suplementary external nodes/edges West
nodes_W = tuple((i, -1) for i in range(m))
edges_W = tuple(((i, -1), (i, 0)) for i in range(n) if i % 2) + tuple(
((i, 0), (i, -1)) for i in range(n) if ~i % 2
)

# Suplementary external nodes/edges East
nodes_E = tuple((i, n) for i in range(m))
edges_E = tuple(((i, n), (i, n - 1)) for i in range(n) if ~i % 2) + tuple(
((i, n - 1), (i, n)) for i in range(n) if i % 2
)

nodes = nodes + nodes_W + nodes_E
K = 10 # Scale factor
# Positions
nodesnpos = tuple((n,) + ({"pos": (K * n[0], K * n[1])},) for n in nodes)

edges = horz_edges + vert_edges + edges_S + edges_N + edges_E + edges_W
weightededges = tuple(e + (0,) for e in edges)

G = nx.DiGraph()
G.add_nodes_from(nodesnpos)
G.add_weighted_edges_from(weightededges, weight="density")

pos = {n: G.nodes[n]["pos"] for n in G.nodes}
return G, pos
13 changes: 13 additions & 0 deletions itstools/macrotrasim/metaclass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import abc
import networkx as nx
from dataclasses import dataclass


@dataclass
class NetworkAbs(metaclass=abc.ABCMeta):
@abc.abstractproperty
def supply(self):
pass

def demand(self):
return 2
Loading