LINUX.ORG.RU

Задача отлова часто посещаемых мест клиентами, на поэтажном плане здания

 , ,


0

3

Дано:

  • Поэтажный план здания в таком-то масштабе.
  • На этом плане указано, где точки доступа Wi-Fi в этом здании.
  • С каждой из этих точек доступа можно снимать уровни сигнала, приходящие от каждого из клиентов.

Найти:

Алгоритм расчета интенсивности пребывания клиента в зависимости от того места, где он находится в помещении, так называемую «тепловую карту», которая накладывается на этот поэтажный план.

★★★★★

Последнее исправление: Infra_HDC (всего исправлений: 1)

В чём вопрос-то? Триангуляцию хочешь сделать?

dsxl
()

https://en.wikipedia.org/wiki/Cluster_analysis
UPGMA какая-нибудь, плюс выявить аномалии у тех, кто регистрируется на разных точках, но всегда имеет низкий сигнал и что-то сделать, например, выровнять статистику сделав из таких «погрешность».

system-root ★★★★★
()

А тебе важно просто статистику собрать (в этой комнате клиенты сидят чаще, чем в соседней) или важно именно за конкретными клиентами следить (Иванов обычно сидит на первом этаже, а Петров на втором)?

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

очевидно конкретные клиенты не важны, тк суть расчета скорей всего установка вендига где народу побольше

anonymous
()
Ответ на: комментарий от anonymous

Тогда можно бфло бы просто найти самую «популярную» точку доступа и поставить где-то рядом с ней

dsxl
()

Остается много вопросов. Вы что хотите снять статистику, а потом ее обобщить и на основании этого сделать глобальные выводы? Ну, что-то и можно обобщить, но я бы особо не обольщался.

А так, многое зависит от того какое здание, что делают клиенты и т.п. Нужна модель их поведения. По модели поведения можно уже проводить имитационные эксперименты, а дальше уже делать выводы.

WiFi может помочь построить такие модели поведения клиентов, но сам по себе вряд ли будет решающим фактором.

А так очень похоже на задачу агентного моделирования. Там же рядом дискретно-событийное моделирование

dave ★★★★★
()

Зачем измерять, формируй! Лепишь на стены указатели «Вай-фай лучше всего ловится там!» и концентрируешь хомячков там, где нужно.

Harald ★★★★★
()

Для локализации пользователя достаточно определить его расстояние до ТД и угол, под которым на неё падает Wi-Fi-излучение от смартфона.

Deathstalker ★★★★★
()

Да просто матрицу «точки-клиенты» в PCA засунуть, на выходе получаешь

1) карту точек доступа, это prcomp(df.wifidata, center=F)$rotation[,c(1,2)]

2) карту клиентов этих точек, это prcomp(df.wifidate, center=F)$x[,c(1,2)]

естественно для попадания на физическую карту придется прокрустом морфить пространство (на примере известных точек). ну и c(1,2) придется выбирать с умом.

PS давай данные, плати и я сделаю прототип :)

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

А как учитывается диаграмма направленности антенн точек доступа ? (вниз сильно меньше чем вбок)

anonymous
()
Ответ на: комментарий от anonymous

1) Разные коэффициенты в нагрузках осей.

2) Раз карта трехмерная, в результате PCA получиться три значимых компоненты. И последующий прокруст будет морфить карту к реальному расположению точек на физическом плане (учитывая все эти неоднородности).

anonymous
()
Ответ на: комментарий от anonymous

принудительно чиповать негодяев

Поголовное принудительное анальное зондирование!

anonymous
()
Ответ на: комментарий от anonymous

1) Разные коэффициенты в нагрузках осей.

Извиняюсь, что-то туплю. Откуда их брать? Диаграмма диполя - бублик, (реально м.б.блин или конус у патч-антены), он м.б. случайно наклонен, усиление по осям не известно (если предварительно не обмерить).

anonymous
()
Ответ на: комментарий от anonymous

PCA само все считает. Просто по набору силы сигнала клиентов на точках стационарных.

Классический пример — восстановление карты географической из таблицы расстояний между городами. (тут просто обобщение на 3д случай)

Ну кинь датасет если уже данные есть, на нем можно показать.

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Данных нет. Соорудил генератор (в первом приближении).

// gcc -o tc tc.c -lm
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define ND 12
double dd[ND][3] = {//координаты приемников
    {20, 10, 2}, {40, 20, 2}, {60, 10, 2}, {80, 20, 2},	//1этаж
    {20, 10, 6}, {40, 20, 6}, {60, 10, 6}, {80, 20, 6},	//2этаж
    {20, 10, 10}, {40, 20, 10}, {60, 10, 10}, {80, 20, 10},	//3этаж
};
#define NT 240
double tt[NT][3];//координаты точек задержки
int tt_init()
{
    int i;
    for (i = 0; i < NT; i++) {
        tt[i][0] = 2.5 + 5 * (i % 20);
        tt[i][1] = 3.0 + 6 * ((i / 20) % 4);
        tt[i][2] = 1.2 + 4 * (i / 80);
    }
    return 0;
}
double r(double b, double e)
{
    return b + (e - b) * rand() / ((double) RAND_MAX);
}
double ean(double *d, double *s, double e)
{//мощность в приемнике
    int i;
    double x[3], m, g;
    for (i = 0; i < 3; i++)
        x[i] = d[i] - s[i];
    m = x[0] * x[0] + x[1] * x[1];
    if (m < 1.0e-7)
        return 0.0;
    g = x[2] / sqrt(m);
    g = 2.0 / sqrt(g * g + 1.0);//бублик
    return e * g / (m + x[2] * x[2]);
}
int main()
{
    int c, n, t, i, j;
    double e;

    tt_init();
    for (c = 0; c < 5555; c++) {
        n = r(1, 10);
        e = r(0.5, 1.0);
        for (i = 0; i < n; i++) {
            t = r(0, NT);
            printf("%d", c);
            for (j = 0; j < ND; j++)
                printf(",%7.5f", 100*ean(dd[j], tt[t], e));
            printf("\n");
        }
    }
    return 0;
}
В первой колонке - номер клиента, в остальных уровень сигнала в приемниках. Строчки с одинаковым номером клиента - точки где клиент задерживался. Все «бублики» - горизонтально, шума нет.

Еще хочется научиться выделять кластеры точек по признаку: клиент выбирает их одновременно. Это можно ?

anonymous
()

Задача из разряда «в здании 2^n этажей, какая кнопка лифта нажимается чаще всего». Конечно, вендинговые автоматы нужно поставить у входа.

anymouse
()

" интенсивности пребывания клиента "
то есть ? может интенсивности сигнала в месте пребывания?

xmikex ★★★★
()

Достоверно известно, что данные по вайфаю можно переносить на реальные тушки? Или хотя бы, что все клиенты регистрируются хоть на какой-то точке?

ya-betmen ★★★★★
()
Ответ на: комментарий от anonymous

Генераторы я сам писать могу, это пара строчек в R.

Этот способ работает на идеальных данных всегда.

Пересчет расположения точек в неком объеме в расстояния до группы случайных фиксированных точек в этом же объеме, это просто dist(). И потом prcomp() на получившуюся таблицу. В rotations и x соответственно результат для фиксированных точек опорных и просто точек клиентов.

Есть смысл испытывать только реальные данные (ну или некий симулятор распространения сигнала на плане здания), поскольку все вот эти нелинейности и т.п. мелочи.

psv1967 ★★★★★
()
Ответ на: комментарий от anonymous

Это какой то диплом как я понимаю. Если я его напишу за тебя в этом нет никакого смысла. Все ключевые слова названы, даже логика прописана расчета.

Просто читай что такое PCA, грузи модельные данные, и разбирайся в результатах.

psv1967 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.