Гермионная сеть

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Гермионная сеть

Сообщение ignat99 » Сб янв 18, 2014 9:21 pm

Попытка создать алгоритм для обучения дома.

По этой ссылке я брал рабочую модель дома:
http://connect.smartliving.ru/profile/57

Тут я постарался выделить маленькую подзадачу для решения.
http://www.gotai.net/forum/default.aspx ... 7604#87604

Вот такие компоненты я бы хотел добавит к тестовой гермионной сети.
# Situational net sensors: s1=sensorMovement1.status, s2=sensorMovement2.status,
# Situational net cell: sM=sensorMovementSUM.status,
# Situational net effectors: callMethod("sensorMovementSUM.statusChanged",array("status"=>0), callMethod("sensorMovementSUM.statusChanged",array("status"=>1)
# Sensors initialisation: setGlobal("sensorMovement1.status",0), setGlobal("sensorMovement2.status",0),

# Temporal net sensors: NobodyHomeMode.active, GuestsMode.active, SecurityArmedMode.active
# Temporal net cell: say("Attention! Alert! motion is detected!",5)
# Temporal net effectors: callMethod('SecurityArmedMode.check'), callMethod('NobodyHomeMode.check')
# Temporal net initialisation: setGlobal("GuestsMode.active",0), setGlobal("SecurityArmedMode.active",1), setGlobal("NobodyHomeMode.active",0)

# Situational net effectors: runScript('nl_TurnOffAll'), runScript('mute'), callMethod("hello.action"), callMethod("NooLiteD_TualetTP.turnOn"), callMethod("NooLite_RGB_1.check"), runScript('sayTodayAgenda')

Вот так выглядит "темпоральная сеть" первого датчика движения sensorMovement1.
hermetic_net.png
это гермионная сеть сгенерированная переключением датчика движения
hermetic_net.png (13.53 КБ) 20144 просмотра
A*-1 это уровень состояний датчика ( людей нет, кто то пришёл, все ушли только что, кто то есть).
A*-2 уровень последовательностей событий (предсказание - кто то придёт, предсказание - кто то останется, прдсказание - все уйдут)
A*-3 уровень (не показан на иллюстрации) гипотеза развития событий (когда кто то придёт он либо уйдёт, либо останется)
A*-4-5 уровень (не показаны на иллюстрации) знания о том, что в доме бывают люди.


Рассмотрим переход состояния датчика из 0 в 1.
Конструкция A2-1 соответствует факту перехода (кто то пришёл в дом).
При этом датчик переходит из состояния A1-0 в состояние A2-0. (state=0 меняется на state=1)
Ребро от A1-0 до A2-1 зелёное - соответсвует восходящему управляющему потоку.
Ребро от A2-1 до A2-0 синее - соответствует нисходящему потоку

Обратите внимание что во втором слое нет переходов между
A1-1 и A3-1, A1-1 и A4-1, A2-1 и A3-1. Так же нет и обратных переходов для них.
Это и есть логика работы дома.

Если подобные переходы появяться то сразу возникнет ещё один слой и синал будет передан вверх в блее абстрактный (фильтрованный) слой.


Более подробно почитать и посмотреть ссылки можно тут:
http://www.gotai.net/forum/default.aspx?postid=87049


A1 - это слой состояний датчика ( людей нет, кто то пришёл, все ушли только что, кто то есть)
A2 - cлой последовательностей событий.
Последний раз редактировалось ignat99 Ср янв 22, 2014 7:04 pm, всего редактировалось 5 раз.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Гермионная сеть

Сообщение sergejey » Сб янв 18, 2014 11:22 pm

А где можно про терминалогию почитать? Видимо, что-то интересное, но мне совершенно непонятное, т.к. весьма далёк от AI :)

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: Гермионная сеть

Сообщение ignat99 » Сб янв 18, 2014 11:59 pm

sergejey писал(а):А где можно про терминалогию почитать? Видимо, что-то интересное, но мне совершенно непонятное, т.к. весьма далёк от AI :)
По ссылке как раз PHP код.
http://connect.smartliving.ru/profile/57
Там можно по нажимать на чёрные названия Методов класса и Методов объекта.
Вы увидите простые условия:

Класс -> keySensors->Объекты класса:->sensorMovement1(Сенсор движения)->Методы объекта:->statusChanged

//Устанавливаем значения в суммарный датчик движения
if (getGlobal("sensorMovement1.status")==0
&& getGlobal("sensorMovement2.status")==0
&& getGlobal("sensorMovementSUM.status")==1){
callMethod("sensorMovementSUM.statusChanged",array("status"=>0));
}elseif(getGlobal("sensorMovement1.status")==1
&& getGlobal("sensorMovementSUM.status")==0){
callMethod("sensorMovementSUM.statusChanged",array("status"=>1));
}

В коде выидим что человек изобретает шину, если на шине сенсор1 или сенсор2 сработал, значит общий sensorMovementSUM устанавливается в 1

Тоесть срабатывает, и передаёт значения в 2 других скрипта - "охрана дома" и "никого нет дома".

sensorMovementSUM - Агрегатный сенсор движения - собирает в себя все движение в доме
Методы объекта:
statusChanged

// здесь подписываем объекты на событие изменения состояния
// суммарного датчика движения
callMethod('SecurityArmedMode.check'); // охрана
callMethod('NobodyHomeMode.check'); // никого нет дома

Посмотрим что делает охрана (Поиск на странице по слову SecurityArmedMode)

Класс OperationalModes->Объекты класса: SecurityArmedMode - постановка на охрану
->Методы объекта: modeChanged

if($this->getProperty('active')){
// Принудительно гасим все датчики движения
setGlobal("sensorMovement1.status",0);
setGlobal("sensorMovement2.status",0);
// При постановке на охрану никого не должно быть дома
setGlobal("NobodyHomeMode.active",1);
// При постановке на охрану гостей выпроваживаем
setGlobal("GuestsMode.active",0);
}else{
// При снятии с охраны дома появляются люди
setGlobal("NobodyHomeMode.active",0);
}

check

// Проверка датчика движения
if (getGlobal("SecurityArmedMode.active")
&&getGlobal("sensorMovementSUM.status")){
//При включенной охране обнаружено движение. ТРЕВОГА!!! ТРЕВОГА!!!
say("Внимание! Тревога! обнаружено движение!",5);
}

NobodyHomeMode - никого нет дома
Методы объекта:
modeChanged

if ($this->getProperty("active")){
// выключим весь свет
runScript('nl_TurnOffAll');
// выключим звук
runScript('mute');
}else{
// кто-то дома
callMethod("привет.action");
//Включим теплый пол
callMethod("NooLiteD_TualetTP.turnOn");
//Включим световой будильник
callMethod("NooLite_RGB_1.check");
//Наромним о делах
runScript('sayTodayAgenda');
}

check

// Проверка датчика движения
/*
if (getGlobal("NobodyHomeMode.active") // никого нет дома
&&!getGlobal("SecurityArmedMode.active") // охраны нет
&&getGlobal("sensorMovementSUM.status")){ // движение ЕСТЬ
//В режиме никого нет дома обраружено движение. Значит пришли люди.
setGlobal("NobodyHomeMode.active",0);
}

if (!getGlobal("NobodyHomeMode.active") // Режим Никого нет дома выключен
&&!getGlobal("SecurityArmedMode.active") // охраны нет
&&!getGlobal("SleepAllMode.active") // спящих нет
&&!getGlobal("sensorMovementSUM.status") // движения НЕТ
&&(getGlobal("sensorMovementSUM.updatedTimestamp")

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

Тоесть есть процесс;

На входе 2 датчика\сенсора (s1,s2) движения,

а на выходе
sensorMovement1.status
sensorMovement2.status
NobodyHomeMode.active
GuestsMode.active
SecurityArmedMode.active
и ещё фраза
say("Внимание! Тревога! обнаружено движение!",5);

Всё что нам надо это придумать, такую последовательность состояний. Что бы у нас сгенерировалась правильно функционирующая гермионная сеть. Мне кажется достаточно просто перебрать все возможные состояния и переходы.

s1->0
s2->0

s1->1
s1->0

s2->1
s2->0

s1->1
s2->1
s1->0
s1->0

и аналогичная последовательность для переходов из 1 в 0. Просто меняем 0 на 1

s1->1
s2->1

s1->0
s1->1

s2->0
s2->1

s1->0
s2->0
s1->1
s1->1

Я плохо понимал курс в институте по созданию тестов, ну что то в этом духе.
Каждому состоянию и переходу у нас есть набор состояний Эффекторов\глобальных переменных

Вот видимо это и есть "Программа начальной активации"(ПНА)
Последовательность обхода комплексных сенсоров можно задать вручную на этапе (ПНА)
В Гермионных сетях это называется "ситуативной сетью".
Примеры, которые приводил до этого относятся к "темпоральной сети".

Извините за терминологию придерживаюсь оригинальной публикации по гермионной сети.
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: Гермионная сеть

Сообщение ignat99 » Вс янв 19, 2014 11:22 pm

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

Код: Выделить всё

#!/usr/bin/env python 2.7

import numpy as np

#   The result of the two structures like this
#   edges = np.array([(0, 1),(1, 0),(0, 4),(4, 3))])    
def signal_to_hn(N,vsignal,edges1,edges2):
    x0=0	# this is due to the numbering of objects when
    x1=x0+1 	# creating in points_on_field() by numpy functions
    layer=0
    input0 = []
    input0_coordinate = {}  # the same ^^^
    tree0=[]
    pair0=[]
    pair_index=0
    medges1=[]
    medges2=[]
    for i in xrange(len(vsignal)):
        if (pair_index==2):
        	if not pair0 in tree0:
        		tree0.append(pair0)
        		cell1=[]
        		x0_coordinate = input0_coordinate[pair0[0]]
        		cell1.append(x0_coordinate)
        		cell1.append(x1)
        		medges1.append(cell1)
        		cell2=[]
        		x1_coordinate = input0_coordinate[pair0[1]]
        		cell2.append(x1)
        		cell2.append(x1_coordinate)
        		medges2.append(cell2)
        		x1=x1+N
        		
        	pair0=[]
        	pair_index=0
    	pair0.append(vsignal.item(i))
    	pair_index=pair_index+1
    	if  not vsignal.item(i) in input0 :
    		input0.append(vsignal.item(i))
    		input0_coordinate[vsignal.item(i)] = x0
    		x0 = x0 + N
    		if (x0 > N*N ):
    			print "Need to increase the number of switching environment (N)"
    			exit(0)

    return medges1, medges2

################################################################################
if __name__ == '__main__':

    N=5 # size of switching environment

    vsignal= np.array([0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0])
    medges1 = np.array([])
    medges2 = np.array([])
    
    edges1, edges2 = signal_to_hn(N,vsignal,medges1,medges2)
    print edges1, edges2
    exit(0)

ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Гермионная сеть

Сообщение ErmolenkoM » Пн янв 20, 2014 10:52 am

Очень интересно! Очень хочется увидеть продолжение и результат.
aka msh555
Cubian на Cubietruck, Connect
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: Гермионная сеть

Сообщение ignat99 » Ср янв 22, 2014 10:09 pm

Вот результат работы программы:
hermetic_net.png
2 уровня\слоя сети состояний сенсора
hermetic_net.png (21.15 КБ) 19973 просмотра
Линия от A1-2 до A2-5 это продолжение для возможного дополнительного состояния.
В финальной версии программы её не будет.


Код функции для генерации 2 слоёв:
Следующий этап - модификация кода для любого количества уровней\слоёв гермионной сети за счёт рекурсивных циклов.

Код: Выделить всё

#   The result of the two structures like this
#   edges = np.array([(0, 1),(1, 0),(0, 4),(4, 3))])       
def signal_to_hn(N,vsignal,edges1,edges2):
    x0=0	# this is due to the numbering of objects when
    x1=x0+1 	# creating in points_on_field() by numpy functions
    x2=x0+2
    x3=0
    layer=0
    input0 = []
    input0_coordinate = [[{}]*N for i in range(N)]  # the same ^^^
    input1_coordinate = [[{}]*N for i in range(N)] 
    input0_index=0
    input1_index=0
    tree0 = [[]*N for i in range(N)]
    #tree0 = np.zeros([N,N])
    tree0_index=0
    pair_old=[]
    pair0=[]
    pair1=[]
    pair_index=0
    medges1=[]
    medges2=[]

    for j in range(1):
      for i in xrange(len(vsignal)):
    			
        if (pair_index==2):
        	if (not pair0 in tree0[tree0_index]) :
        		input1_index = 0  
        		
        		tree0[tree0_index].append(pair0)
        		
        		cell1=[] # new pair \
        		x0_coordinate = input0_coordinate[input0_index][pair0[0]]
        		input1_coordinate[input0_index][pair0[0]] = x1 # saved coordinat of top of sub-cell of layer 1
        		cell1.append(x0_coordinate)
        		cell1.append(x1)
        		medges1.append(cell1)

        		cell2=[] #    /
        		x1_coordinate = input0_coordinate[input0_index][pair0[1]]
        		cell2.append(x1)
        		cell2.append(x1_coordinate)
        		medges2.append(cell2)
 
        		input0_coordinate[input0_index+1][pair0[1]] = x2 # saved coordinat of first half of layer 2 cell
        		x1=x1+N
        		x2=x2+N

        		
        		
        	else :
        		input1_index = input1_index +1 
        		if input1_index == 1 :
        			
				cell1=[] # first old pair \
        			x2_coordinate = input1_coordinate[input0_index][pair0[0]] # top of elementar sub-pair 1
        			x2_old = input0_coordinate[input0_index+1][pair0[1]]
        			cell1.append(x2_coordinate)
        			cell1.append(x2_old)
        			medges1.append(cell1)
        			
        		if input1_index == 2 :		# second old pair /
        			cell2=[]
        			x3_coordinate = input1_coordinate[input0_index][pair0[0]] # top of elementar sub-pair 2
        			cell2.append(x2_old)
        			cell2.append(x3_coordinate)
        			medges2.append(cell2)
        			input1_index = 0
        		
        	pair0=[]
        	pair_index=0

    	pair0.append(vsignal.item(i))
    	pair_index=pair_index+1
    	if  not vsignal.item(i) in input0 :
    		input0.append(vsignal.item(i))
    		input0_coordinate[input0_index][vsignal.item(i)] = x0
    		x0 = x0 + N
    		if (x0 > N*N ):
    			print "Need to increase the number of switching environment (N)"
    			exit(0)

    return medges1, medges2
krashn056
Сообщения: 35
Зарегистрирован: Пн янв 20, 2014 9:28 pm
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Гермионная сеть

Сообщение krashn056 » Пт янв 24, 2014 8:35 am

Интересная идея!) с ее помощью можно определять есть ли дома человек и где он находиться! Вот только на сколько это точно будет работать!
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: Гермионная сеть

Сообщение ignat99 » Пт янв 24, 2014 9:37 am

krashn056 писал(а):Интересная идея!) с ее помощью можно определять есть ли дома человек и где он находиться! Вот только на сколько это точно будет работать!
Я не слышал о сделанном и протестированном коде такого типа.
Вначале надо дописать программу, добавить рекурсию, кластеры, рейтинги\лимиты\барьеры.
Программу начальной инициализации. Программу предсказаний в фоновом режиме.
А после этого тестировать.
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: Гермионная сеть

Сообщение ignat99 » Вс июл 12, 2015 12:48 pm

Продолжаем тему гермионных сетей и нейросетей (для особо тупых случаев).
Вероятно можно использовать в каких то простых случаях для обучения элементарным действиям Smart *** (с) что то подобное

https://github.com/google/deepdream/blo ... ream.ipynb

Статья на Хабре:

http://geektimes.ru/post/253240/
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: Гермионная сеть

Сообщение ignat99 » Сб авг 08, 2015 8:34 pm

Почитали бы хоть про гермеонную сеть:

http://www.gotai.net/forum/default.aspx ... 659#130659

Или про постановку задачи:

http://www.gotai.net/forum/default.aspx ... 584#131584

В примере:

1 уровень состояний датчика - людей нет, кто то пришёл, все ушли только что, кто то есть
2 уровень последовательностей событий - предсказание - кто то придёт, предсказание - кто то останется, прдсказание - все уйдут
3 уровень времени - гипотеза развития событий (когда кто то придёт он либо уйдёт, либо останется)
4 уровень базы знаний - знания о том, что в доме бывают люди.

Вот дальше этого примера я не буду рассматривать пок не чего.



Расшифровка:

0-Уровень сети
==========

0 уровень - 2 датчика в 2 проходных коридорах и у каждого 2 состояния (есть люди и нет людей)
1 уровень 2*2=4 состояния.

1 - Уровень сети
===========

Давайте придадим смысл этим состояниям. Для этого возьмём 1 Луаврика и попробуем ему объяснить что значат эти 4 состояния, какой в них смысл и какой интеллект из этого можно получить.

1 состояние - оба датчика не активны (смысл очевиден - людей нет)
2 состояние - 1 датчик сработал ( то есть система перешла из состояния 1 в состояние 2. (смысл очевиден - кто то пришёл в комнату 1).
3 состояние - 2 датчик сработал ( то есть система перешла из состояния 1 в состояние 3. (кто то пришёл в комнату 2).

А вот дальше гораздо, гораздо сложнее.

Система не знает можно ли попасть из комнаты 1 в комнату 2 и обратно, или можно попасть в комнату 2 непосредственно без комнаты 1. Вот выяснение этих фактов требует времени, в случае не яного задания топологии помещения. Вот этот факт и есть ИИ, если система получит его самостоятельно. Но есть но, допустим есть дверь между комнатой 1 и комнатой 2, в начале работы системы она была заштукатурена, а потом (когда система обучилась) проход снова открыли.


Получается, по мимо этих 2 датчиков желательно иметь ещё один источник информации - например видеокамеры широкого обзора. На этих видеокамерах надо диагностировать (используя алгоритмы обработки изображения) появление новых объектов. И надо уметь связывать новые объекты и показания датчиков (автоматически, без участия человека - без задания топологии помещения).

Второй вариант выяснения топологии - специальный подвижный робот с видео или радио или акустикой или да же группа роботов (взаимодействующая для построения топологии - работу этого алгоритма вы видели неоднократно в х.ф. типа "Прометей")

Есть состояние 4 - переход из комнаты 1 в комнату 2.
И состояние 5 - переход из комнаты 2 в комнату 1.

Дальше ещё сложнее:

Состояние 6:
А если вначале зашло 2 человека в комнату 1 и один из них прошёл в комнату 2, тогда у нас оба датчика работают.

Состояние 7: Зашли в комнату 2 и один из них прошёл в комнату 1, опять оба датчика работают.

Состояние 8: Они (2 человека) сговорились и зашли одновременно в комнату 1 и комнату 2

Состояние 9: Зашли с малым интервалом, достаточным для прохода в комнату 2.

Состояние 10: То же самое но вначале комната 2, затем малый интервал и комната 1.

Понятно что в случае 9-10 мы точно не можем сказать сколько людей зашло и вышло и где они находятся.

На втором уровне 4 состояния (4 перехода на 0 уровне):

1-датчики не работают. (смысл - не кого нет)
2 - 1 датчик работает, 2 не работает. (кто то есть в 1 комнате)
3 - 1 не работает, 2 работает (кто то есть во 2 комнате)
4 - оба датчика работают. (кто то есть везде)

2 Уровень сети (Сколько переходов на 1 уровне?)
===============================

Из комбинаторики известно (можно заложить этот алгоритм для автоматического прогнозирования максимальных затрат) число размещений по 2 буквы с повторениями (может не чего не происходить) и дадут нам количество переходов на уровне сети:


(n элементов, взятых по m, где элементы в наборе могут повторяться)

Понять формулу просто, если убрать из 16 состояний 4 неподвижных состояния, то 12 получается так.

Из 1 состояния мы можем оказаться в 3 других состояниях. Но всего у нас состояний 4. 4*3=12.

Теперь возьмём из поля Луарвика смысл этих состояний (частично мы описали выше 10 состояний). Попробуем определить что мы пропустили, при использовании только мыслей без математики.

Пропущены 2 простых состояния, года 1 человек или группа находилась в комнате, а потом вышла.

Как видим не все состояния одинаково полезны для произвольной системы.

Если бы работал алгоритм (в смысле Луарвика), то мы сразу бы сгенерировали уйму состояний.

А так как тут работает ИИ, то генерируются только состояния соответствующие поведению живых объектов в реальном мире, впрочем во время "сна" сети (когда продолжают повторятся те же сигналы - те 4 состояния 2 уровня и те 2 состояния 1 уровня когда не чего не движется) мы можем сделать прогноз всех пропущенных состояний и да же отработать ( в режиме моделирования реакции на эти новые (теоретически возможные состояния)).


То есть уровень неопределённости в такой системе ниже, чем в системе без Гермеонной сети.

Повторяем пройденный материал (допустим живёт только 1 человек в однокомнатной квартире с кухней а проход между кухней и комнатой замурован, датчики стоят на входах в кухню и комнату):

1 уровень сети - сработка датчиков (4 состояния не бывает не когда, если оно возникнет нужно бить тревогу - звонить в полицию)
2 уровень сети - размуровывание двери (четыре активных состояния входы и выходы из комнаты и кухни и три стационарных - если кто то пролезет сквозь стену (влезет в форточку, когда человек спит в другой комнате - надо бить тревогу)

3 уровень сети - предсказания во времени поведения человека (если человек зашёл на кухню, то сразу после он выйдет, аналогично с комнатой). Если человек рассеянный то он может выйти из кухни и сразу снова войти, если заранее всегда думает то сразу после кухни идёт обязательно комната либо уход из дома. Количество состояний тут будет зависеть от человека. Если в доме будет робот с надёжной батарейкой, то тут будет минимальный набор состояний (так как робот обычно планирует свои действия на несколько шагов и не зависит от мелких факторов - например не будет гоняться за мухой, которая залетела в квартиру, если в функции робота это не входит).

Так же тут надо учитывать такую возможность, что отсчёт будет начат с момента, когда человек находился на кухне (а не в прихожей). Поэтому будут состояния вышел из кухни и зашёл в комнату на этом уровне.

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

Так как Гермеонная сеть бинарная то в этом есть и достоинство и недостаток.

Недостаток в том что будут дублироваться двойственные состояния (начало движения произошло с кухни или с прихожей?). Это будет зависеть от чётного или нечётного числа интервалов в неподвижных состояниях.

Достоинство в том, что это по сути бинардик Филипова, где классификация устанавливается автоматически.

Так же есть вопросы (на которые можно ответить только практикой). Когда считать Гермеонную сеть обученной и доверить включения света? Ответ будет где то между построением минимального набора (хотя бы один узел на самом верхнем уровне - верхний уровень мы задаём при старте системы) и максимального (полный набор состояний - точно по комбинаторике). Полагаю что на практике уровень вложенности Гермеонных сетей будет зависеть от самой конфигурации.

Таким образом задача Луаврика в определении ИИ системы сводиться просто заданием высоты (глубины) сети, после достижения которой, считаем сеть способной к самостоятельной работе.

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