powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм интерпретации событый
19 сообщений из 19, страница 1 из 1
Алгоритм интерпретации событый
    #39685661
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим есть устройство, которое зажигает цветные светодиоды сигнализируя о своем состоянии.
Нужно интерпретировать эти состояния, их может быть очень много и записывать в коллекцию событий

Например:

1. Горят только СКЗС и не горят другие - произошло событие А, если вместе с СКЗС горят и другие события А не было.
2. Горят КЗ, а состояние других пофиг - произошло событие Б.

Как описать и хранить в коде все эти сочетания случаев? Язык C#
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39685671
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
[Flags]
public enum LightSignal
{
   None = 0,
   Blue = 0b00001,
   Red = 0b00010,
   White = 0b00100,
   Yellow = 0b01000,
   Green = 0b10000,

   TypeA = Blue | Red | Green | White,
   TypeB = Red | Green,
   TypeC = Yellow | Green,
   TypeLastToB = Red | Blue
}

public enum EventType
{
   Unknown,
   A,
   B,
   C,
   RenameLastToB
}

public EventType CalcEvent(LightSignal ls)
{
   if(LightSignal.TypeA == ls) return EventType.A;
   if(LightSignal.TypeB == ls) return EventType.B;
   if(LightSignal.TypeC == ls) return EventType.C;

   if((LightSignal.TypeLastToB & ls) == LightSignal.TypeLastToB) return EventType.RenameLastToB;

   return defauit;
}



Фих знает, короче. Можно матрицы написать или хитрую методу на третичной логике.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39685677
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltКак описать и хранить в коде все эти сочетания случаев?Две маски. Маска "горит" и маска "не горит". Например:

Горят только СКЗ и не горят другие - произошло событие А. У события A маска Г 11001, маска Н 00110.
Горят КЗ, а состояние других пофиг - произошло событие Б. У события Б маска Г 01001, маска Н 00000.

Проверка. Есть состояние С. Если оно соответствует некоему состоянию, то должно быть:

С XOR Г = 00000
С AND H = 00000
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39685684
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttEolt,

Фих знает, короче. Можно матрицы написать или хитрую методу на третичной логике.

Про матрицы решений что-то слышал. Но вот нагуглить никак не могу.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39685721
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EolthVosttEolt,

Фих знает, короче. Можно матрицы написать или хитрую методу на третичной логике.

Про матрицы решений что-то слышал. Но вот нагуглить никак не могу.

Про двоичную систему наверняка слышал, в твоем случае состояние системы кодируется 5 битами.
Таким образом, у тебя 2^5=32 различных состояний системы в диапазоне 0..31.
Вот и опиши, что надо делать в каждом из этих состояний в массиве Action[0..31].
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39685887
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltПро матрицы решений что-то слышал. Но вот нагуглить никак не могу.

Ну вон в коде привёл же битовые маски. Делаешь из этого матрицу, я написал в методе для экономии. Но можно матрицу перенести в конфиг файл и тогда это можно будет менять в конфиге.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687280
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

обычный ДКА
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687351
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

можно примерчик реализации в контексте моего случая?
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687381
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eoltkealon(Ruslan),

можно примерчик реализации в контексте моего случая?
у тебя есть варианты состояний индикатора К, 2^5 вариантов

есть варианты состояний { S }

у тебя должна быть построена двумерная таблица M[S, K] (реальная или условная неважно)
и индикатор срабатывания F[S]

в реализации простой цикл

S = M[S, K];
if ( F[S] ) {действие... }

как будешь делать M и F это уже на твоё усмотрение, хоть вручную ...
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687423
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выше решение попроще описано 21636635
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// Таблица соответствия событий и состояний
События[0b00000] = Событие1
События[0b00001] = Событие1
...
События[0b11111] = СобытиеN

// Обработка cостояния S
switch(События[S]) {
case Событие1:
...
case Событие2:
...
}
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687538
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня скорее не таблица событий получается, а дерево.
Потому что некоторые события могут наступить, только если перед ними было другое нужное событие.

Например:

Код: sql
1.
2.
3.
Если светится красный светодиод, и перед этим горел только синий светодиод, то  наступило событие XXX
Если светится красный светодиод, и перед этим горел синий и любые другие или
                                                    горел не синий, то событие XXX не наступило.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687546
MBo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBo
Гость
EoltПотому что некоторые события могут наступить, только если перед ними было другое нужное событие.


Так это и есть состояния, с которыми работает машина состояний (она же конечный автомат)
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687553
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltУ меня скорее не таблица событий получается, а дерево.
Потому что некоторые события могут наступить, только если перед ними было другое нужное событие.
Это ничего не меняет. Дбавляем каждому элементу второй параметр - предыдущее состояние:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// Таблица соответствия событий и состояний
События[0b00000][0b00000] = Событие1
События[0b00000][0b00001] = Событие1
...
События[0b11111][0b11111] = СобытиеN

// Обработка cостояния S при предыдущем S_prev
switch(События[S][S_prev]) {
case Событие1:
...
case Событие2:
...
}


Таблица станет 1024 элемента.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687575
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Крайне не оптимальное решение. Сомнительное удовольствие заполнять такую карту. Уж лучше дерево тогда. Или простой алгоритм вычисления, в котором можно определить символы и вынести скрипт наружу.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687616
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt, так бы сразу и сказал))
Можно и методами конечных автоматов, а вообще напрашивается "контекстно-зависимая грамматика", пути по вершинам графа с повторениями, не марковские модели.

Да и хр3, что здесь ещё надо, автор выдавливает по каплям. Можно по типу экспертных систем: описать конечный набор базовых продукций "если -- то", тот же конечный автомат будет.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687736
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКрайне не оптимальное решение.
O(1) вообще-то. Самое быстрое решение по сравнению с другими вариантами.

Инициализировать массив на 1024 элемента думаю не сложно, а в некоторых ЯП это сделает компилятор, т.е. во время выполнения не потратится ни одного такта проца.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687739
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСомнительное удовольствие заполнять такую карту. Уж лучше дерево тогда.
Можно написать скрипт который сгенерит код инициализации массива и скопирует в буфер обмена.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687757
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TO(1) вообще-то. Самое быстрое решение по сравнению с другими вариантами.

Крайне не оптимальное с точки зрения конфигурирования. И гибкость алгоритмов распознавания страдает. А если одно единственное событие, допустим, состоит из 3-х последовательных сигналов? Если было бы задано, что один сигнал = событие, ещё куда ни шло, но уже есть отклонения, полной задачи мы не знаем. Следовательно, нужен более гибкий и эффективный подход. Ещё важно, чтобы он был сопровождаемый, об этом очень и очень часто забывают, что крайне лично меня огорчает.
...
Рейтинг: 0 / 0
Алгоритм интерпретации событый
    #39687793
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Нормально всё с сопровождением и асимптотикой, по возможностями КА равноценен любым регулярным описаниям (собственно они к нему и приводятся обычно). Незаменимая вещь при реализации протоколов и прочих нудных вещей.
Для сжатия используют таблицу классов или кодогенерацию. С отладкой вот оч плохо, но это с любыми регулярками так.

вот только автор пока не может написать сколько ему нужно правил и какого они рода
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм интерпретации событый
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]