Гермионная сеть
Модератор: immortal
-
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
- Благодарил (а): 1 раз
- Поблагодарили: 22 раза
Гермионная сеть
Попытка создать алгоритм для обучения дома.
По этой ссылке я брал рабочую модель дома:
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. 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лой последовательностей событий.
По этой ссылке я брал рабочую модель дома:
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. 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: Гермионная сеть
А где можно про терминалогию почитать? Видимо, что-то интересное, но мне совершенно непонятное, т.к. весьма далёк от AI
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
- Благодарил (а): 1 раз
- Поблагодарили: 22 раза
Re: Гермионная сеть
По ссылке как раз PHP код.sergejey писал(а):А где можно про терминалогию почитать? Видимо, что-то интересное, но мне совершенно непонятное, т.к. весьма далёк от AI
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
Я плохо понимал курс в институте по созданию тестов, ну что то в этом духе.
Каждому состоянию и переходу у нас есть набор состояний Эффекторов\глобальных переменных
Вот видимо это и есть "Программа начальной активации"(ПНА)
Последовательность обхода комплексных сенсоров можно задать вручную на этапе (ПНА)
В Гермионных сетях это называется "ситуативной сетью".
Примеры, которые приводил до этого относятся к "темпоральной сети".
Извините за терминологию придерживаюсь оригинальной публикации по гермионной сети.
-
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
- Благодарил (а): 1 раз
- Поблагодарили: 22 раза
Re: Гермионная сеть
Код который строит первый слой (уровень\карту) гермионной сети.
Надо его дополнить до построения всех необходимых уровней.
До создания полноценной гермионной сети ещё много работы.
Надо его дополнить до построения всех необходимых уровней.
До создания полноценной гермионной сети ещё много работы.
Код: Выделить всё
#!/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)
-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
-
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
- Благодарил (а): 1 раз
- Поблагодарили: 22 раза
Re: Гермионная сеть
Вот результат работы программы:
В финальной версии программы её не будет.
Код функции для генерации 2 слоёв:
Следующий этап - модификация кода для любого количества уровней\слоёв гермионной сети за счёт рекурсивных циклов.
Линия от 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
-
- Сообщения: 35
- Зарегистрирован: Пн янв 20, 2014 9:28 pm
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
Re: Гермионная сеть
Интересная идея!) с ее помощью можно определять есть ли дома человек и где он находиться! Вот только на сколько это точно будет работать!
-
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
- Благодарил (а): 1 раз
- Поблагодарили: 22 раза
Re: Гермионная сеть
Я не слышал о сделанном и протестированном коде такого типа.krashn056 писал(а):Интересная идея!) с ее помощью можно определять есть ли дома человек и где он находиться! Вот только на сколько это точно будет работать!
Вначале надо дописать программу, добавить рекурсию, кластеры, рейтинги\лимиты\барьеры.
Программу начальной инициализации. Программу предсказаний в фоновом режиме.
А после этого тестировать.
-
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
- Благодарил (а): 1 раз
- Поблагодарили: 22 раза
Re: Гермионная сеть
Продолжаем тему гермионных сетей и нейросетей (для особо тупых случаев).
Вероятно можно использовать в каких то простых случаях для обучения элементарным действиям Smart *** (с) что то подобное
https://github.com/google/deepdream/blo ... ream.ipynb
Статья на Хабре:
http://geektimes.ru/post/253240/
Вероятно можно использовать в каких то простых случаях для обучения элементарным действиям Smart *** (с) что то подобное
https://github.com/google/deepdream/blo ... ream.ipynb
Статья на Хабре:
http://geektimes.ru/post/253240/
-
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
- Благодарил (а): 1 раз
- Поблагодарили: 22 раза
Re: Гермионная сеть
Почитали бы хоть про гермеонную сеть:
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 уровень - сильно зависит от времени, будет масса комбинаций связанных со статичными состояниями. (например сколько циклов работы гермеонной сети человек пробыл в кухне).
Так как Гермеонная сеть бинарная то в этом есть и достоинство и недостаток.
Недостаток в том что будут дублироваться двойственные состояния (начало движения произошло с кухни или с прихожей?). Это будет зависеть от чётного или нечётного числа интервалов в неподвижных состояниях.
Достоинство в том, что это по сути бинардик Филипова, где классификация устанавливается автоматически.
Так же есть вопросы (на которые можно ответить только практикой). Когда считать Гермеонную сеть обученной и доверить включения света? Ответ будет где то между построением минимального набора (хотя бы один узел на самом верхнем уровне - верхний уровень мы задаём при старте системы) и максимального (полный набор состояний - точно по комбинаторике). Полагаю что на практике уровень вложенности Гермеонных сетей будет зависеть от самой конфигурации.
Таким образом задача Луаврика в определении ИИ системы сводиться просто заданием высоты (глубины) сети, после достижения которой, считаем сеть способной к самостоятельной работе.
Полагаю этот один параметр можно отдать в распоряжение Луаврику и прочим хвилосохвам, только для места их обитания. Не дай бог допустить доступ к этому параметру, дальше чем стены их квартиры или забора/границы вокруг их дома.
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 уровень - сильно зависит от времени, будет масса комбинаций связанных со статичными состояниями. (например сколько циклов работы гермеонной сети человек пробыл в кухне).
Так как Гермеонная сеть бинарная то в этом есть и достоинство и недостаток.
Недостаток в том что будут дублироваться двойственные состояния (начало движения произошло с кухни или с прихожей?). Это будет зависеть от чётного или нечётного числа интервалов в неподвижных состояниях.
Достоинство в том, что это по сути бинардик Филипова, где классификация устанавливается автоматически.
Так же есть вопросы (на которые можно ответить только практикой). Когда считать Гермеонную сеть обученной и доверить включения света? Ответ будет где то между построением минимального набора (хотя бы один узел на самом верхнем уровне - верхний уровень мы задаём при старте системы) и максимального (полный набор состояний - точно по комбинаторике). Полагаю что на практике уровень вложенности Гермеонных сетей будет зависеть от самой конфигурации.
Таким образом задача Луаврика в определении ИИ системы сводиться просто заданием высоты (глубины) сети, после достижения которой, считаем сеть способной к самостоятельной работе.
Полагаю этот один параметр можно отдать в распоряжение Луаврику и прочим хвилосохвам, только для места их обитания. Не дай бог допустить доступ к этому параметру, дальше чем стены их квартиры или забора/границы вокруг их дома.