Код и ПО

Атлас — городская платформа мониторинга и моделирования дорожного движения

Автор: Жолошев Музарбек

Атлас — городская платформа мониторинга и моделирования дорожного движения. Она собирает движение города на одной живой карте из открытых данных и данных партнёров: улицы, их загрузку и общественный транспорт. Модель потоков показывает, где и почему теряется время, и заранее проверяет решения: перекрытие улицы, режим светофора, новое здание. Атлас подсказывает, но ничем не управляет: решение всегда остаётся за специалистами города, для которых сделан отдельный экран. Город видит потоки, а не отдельную машину или человека. Платформа компании Doroga (ОсОО «Дорога Глобал»), научный партнёр — КГТУ им. И. Раззакова. Автор идеи и концепции — Жолошев Музарбек.

// содержимое
// «Атлас» (Doroga) · фрагмент исходного кода · автор проекта: Жолошев Музарбек · 21 октября 2026 г.
// Карточка потока «район → район»: цифры потока за час и по часам дня. Отдельная машина в них не видна.

// Click panels. The city sees flows, never a person: a car click opens its whole flow (district → district),
// never one car. Every number comes from the model (src/sim.ts) and its day profile (src/day.ts), labelled «модель».

const linkKmh = (r: { path: Int32Array; ts: Float32Array }, i: number) => (G.links[r.path[i]].len / 1000) / (Math.max(1e-6, r.ts[i + 1] - r.ts[i]) / 60);

/** The flow's figures for trips that left in the hour up to D, over every wave of the day. */
export function flowStats(day: Day, home: string, job: string, D: number) {
  let cars = 0, trips = 0, km = 0, min = 0, jam = 0;
  for (const v of day.waves) for (const r of v.runs) {
    if (r.home !== home || r.job !== job || r.dep <= D - 60 || r.dep > D) continue;
    const n = r.path.length, dur = r.ts[n] - r.ts[0];
    let len = 0, slow = 0;
    for (let i = 0; i < n; i++) { len += G.links[r.path[i]].len; if (linkKmh(r, i) < 15) slow += r.ts[i + 1] - r.ts[i]; }
    cars += r.cars; trips++; km += (len / 1000) * r.cars; min += dur * r.cars; jam += slow * r.cars;
  }
  return { cars, trips, kmh: min ? km / (min / 60) : 0, min: cars ? min / cars : 0, jam: cars ? jam / cars : 0 };
}

/** A flow's departures per hour, 06:00–22:00, over the morning and its replays (src/day.ts), all trips counted. */
const FLOW_DAY = new Map<string, number[]>();
function flowDay(day: Day, home: string, job: string) {
  const key = `${day.mode.key}:${home}:${job}`;
  let h = FLOW_DAY.get(key);
  if (h) return h;
  h = new Array((DAY1 - DAY0) / 60).fill(0);
  for (const v of day.waves) for (const r of v.runs) {
    if (r.home !== home || r.job !== job) continue;
    const k = Math.floor((r.dep - DAY0) / 60);
    if (k >= 0 && k < h.length) h[k] += r.cars;
  }
  FLOW_DAY.set(key, h);
  return h;
}
ФАЙЛЫ
Файл 1↗
СЕРТИФИКАТ № KSTU-DEP-2026-999D1F
ДАТА: 21 октября 2026 г. в 20:30
ЗАФИКСИРОВАНО
SHA-256
0e5832f28d7ba83447aa5935db462de42909b1325bbc407934170452838655c9

Запись подтверждает депонирование материала в системе КГТУ на указанную дату. Не является государственным патентом и не подтверждает новизну разработки.