Эффективность алгоритма
Модератор: immortal
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Эффективность алгоритма
Протестировал.
Обновил файл index.php через RapidSVN. Новый код на месте. В результате все графики перестали строиться вообще. Вместо них — битые картинки.
Если я заменил только один файл index.php на новый, это должно работать?
Обновил файл index.php через RapidSVN. Новый код на месте. В результате все графики перестали строиться вообще. Вместо них — битые картинки.
Если я заменил только один файл index.php на новый, это должно работать?
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Эффективность алгоритма
Отчёт о тестировании в 3-х частях
Начну с хороших новостей. Новый файл я запустил, всё работает.
Игра несомненно стоит свеч. Посмотрите на загрузку со старым файлом и с новым. Комментарии излишни.
Начну с хороших новостей. Новый файл я запустил, всё работает.
Игра несомненно стоит свеч. Посмотрите на загрузку со старым файлом и с новым. Комментарии излишни.
- Вложения
-
- cpu
- m.png (17.4 КБ) 7516 просмотров
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Эффективность алгоритма
Теперь о грустном. У нового алгоритма, мягко говоря, гигантские проблемы с линейностью шкалы времени. А у старого всё в порядке с этим.
- Вложения
-
- old
- nl_old.png (3.47 КБ) 7516 просмотров
-
- nl
- nl.png (3.43 КБ) 7516 просмотров
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Эффективность алгоритма
Ещё грустные новости. То, что он показывает, имеет очень небольшое отношение к реальности. Пока это температура на луне и доверять тому, что он рисует нельзя.
Но, учитывая показания загрузки процессора, доделать новый алгоритм надо обязательно.
Но, учитывая показания загрузки процессора, доделать новый алгоритм надо обязательно.
- Вложения
-
- old
- gold.png (32.58 КБ) 7516 просмотров
-
- new
- gnew.png (43.68 КБ) 7516 просмотров
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Эффективность алгоритма
Посмотрел я повнимательнее. Всё не так страшно. Нужно исправить всего одну небольшую ошибку.
У нового алгоритма проблема с тем, что когда данные с сенсоров не поступают (три прямые горизонтальные площадки на старом графике), от берёт значения (10:15, 10:19, 10:23...) идущие сразу после площадки и растягивает их в «прошлое» на всю ширину площадки. Отсюда «нелинейность» времени и «волны» с неправильной амплитудой вместо ровных линий.
У нового алгоритма проблема с тем, что когда данные с сенсоров не поступают (три прямые горизонтальные площадки на старом графике), от берёт значения (10:15, 10:19, 10:23...) идущие сразу после площадки и растягивает их в «прошлое» на всю ширину площадки. Отсюда «нелинейность» времени и «волны» с неправильной амплитудой вместо ровных линий.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Эффективность алгоритма
Посмотрел ещё повнимательнее и обнаружил ещё проблемы.
- когда мало точек — иногда не выдаёт время на шкале
- алгоритм не работает на непериодических сигналах. А PIR сенсоры и датчики открывания — это источники непериодических сигналов.
Что сделано. Соорудил жуткого монстра, но этот код решает все выявленные проблемы.
- Решена проблема с площадками на графике, правда ценой введения параметра $period_refresh=70. Это для датчиков с периодом обновления в 1 минуту. Для других периодов надо задавать другое значение. И, наверное, передавать его через параметры вызова графиков.
- Решена проблема с не выдачей времени на шкале.
- Решена проблема с «нелинейностью» времени.
- Решена проблема с отображением непериодических сигналов (параметр &prec=1). Алгоритм _не_пропускает_ни одного_ срабатывания датчика (даже длительностью в 1 сек.) и отображает факт срабатывания датчика на графике.
Ну и конечно фантастическая скорость и минимальная загрузка процессора.
- когда мало точек — иногда не выдаёт время на шкале
- алгоритм не работает на непериодических сигналах. А PIR сенсоры и датчики открывания — это источники непериодических сигналов.
Что сделано. Соорудил жуткого монстра, но этот код решает все выявленные проблемы.
- Решена проблема с площадками на графике, правда ценой введения параметра $period_refresh=70. Это для датчиков с периодом обновления в 1 минуту. Для других периодов надо задавать другое значение. И, наверное, передавать его через параметры вызова графиков.
- Решена проблема с не выдачей времени на шкале.
- Решена проблема с «нелинейностью» времени.
- Решена проблема с отображением непериодических сигналов (параметр &prec=1). Алгоритм _не_пропускает_ни одного_ срабатывания датчика (даже длительностью в 1 сек.) и отображает факт срабатывания датчика на графике.
Ну и конечно фантастическая скорость и минимальная загрузка процессора.
Код: Выделить всё
if ($total>0) {
$px=0;
$px_passed=0;
$dt=date('Y-m-d', $start_time);
$history=SQLSelect("SELECT ID, VALUE, UNIX_TIMESTAMP(ADDED) as UNX FROM phistory WHERE VALUE_ID='".$pvalue['ID']."' AND ADDED>=('".date('Y-m-d H:i:s', $start_time)."') AND ADDED<=('".date('Y-m-d H:i:s', $end_time)."') ORDER BY ADDED");
$total=count($history);
$itm=0;
$t1=date('H:i', $start_time);
$t2=date('H:i', $end_time);
$period_refresh=70;
$not_empty=0;
$tmp=0;
$delta_time = $end_time - $start_time;
if ($_GET['prec']=='1') {
$prec=1;
} else {
$prec=0;
}
if ($prec==0){
for($i=0; $i<$total; $i++) {
$unx = $history[$i]['UNX'];
if ($unx >= $start_time || $i==0) {
$not_empty=1;
if (($unx >= $start_time && $unx <= $start_time+$period_refresh) || $i==0) {
$values[$itm] = (float)$history[$i]['VALUE'];
$tmp=$values[$itm];
}else{
$values[$itm] = $tmp;
}
$itm++;
$temp_time=$start_time;
$start_time+=$period;
if ($px_passed > 40) {
if (date('Y-m-d', $unx)!=$dt) {
$hours[] = date('d/m', $unx);
$dt = date('Y-m-d', $unx);
} else {
$hours[] = date('H:i', $temp_time);
}
$px_passed=0;
} else {
$hours[]='';
}
$px += $px_per_point;
$px_passed += $px_per_point;
}
}
if ($not_empty==0){
$values[0] = 0;
$hours[0] = $t1;
$values[2] = 0;
$hours[2] = $t2;
}
} else { // end if ($prec==0)
//---------------------------- Precesion
$ar=0;
$u=0;
$wid=$w-90;
$shk=$wid/10;
$shk2=$delta_time/10;
for($z=0; $z<$wid; $z++) {
$values[$z] = 0;
if ($z==$shk*$u) {
$hours[$z]=date('H:i', $start_time+$shk2*$u);
$u++;
} else {
$hours[$z]="";
}
}//end for $z
for($i=0; $i<$total; $i++) {
$unx = $history[$i]['UNX'];
$sm=$unx-$start_time;
$k=$delta_time/$sm;
$ar=$wid/$k;
if ($values[$ar]==0){
$values[$ar] = (float)$history[$i]['VALUE'];
}
}//end for $i
}//end if ($prec==0) else
$DataSet->AddPoint($values,"Serie1");
$DataSet->AddPoint($hours,"Serie3");
} else {
$DataSet->AddPoint(0,"Serie1");
$DataSet->AddPoint(0,"Serie3");
} //end if ($total>0)
- Вложения
-
- prec
- nps.png (19.57 КБ) 7506 просмотров
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Эффективность алгоритма
Alex, здорово! Обязательно сегодня поразбираюсь и обновлю основную ветку 

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 289
- Зарегистрирован: Вс сен 16, 2012 9:39 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Эффективность алгоритма
Можно узнать, что за непереодические сигналы, и как это используется, на графике это что?
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Эффективность алгоритма
От температурного датчика идут сигналы с периодом, к примеру, в 1 минуту. А от PIR сенсора или датчика открывания двери 1 раз в час или 1 раз в день. Это и есть непериодические сигналы. Причём PIR сенсор может выдать сигнал всего в 1-2 секунды, который старый алгоритм просто может пропустить. Если это охранный датчик, а на графике всё спокойно, то это, сами понимаете, не дело. 
А на графике срабатывание датчиков присутствия и датчика открывания двери.

А на графике срабатывание датчиков присутствия и датчика открывания двери.
-
- Сообщения: 289
- Зарегистрирован: Вс сен 16, 2012 9:39 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Эффективность алгоритма
Я так и думал. спасибо. А старой код, я так понимаю, мог не пропустить данный сигнал.
Причём PIR сенсор может выдать сигнал всего в 1-2 секунды, который старый алгоритм просто может не пропустить.