Как разграничить приоритеты выполнения команд? избежать конфликтов.

Draghkon
Offline
Зарегистрирован: 17.09.2013

Вопрос не столько по реализации, сколько по логике.

 

В коде есть есть несколько функций, которые могут конфликтовать.

Допустим стоит задача - охлаждать комнату (умный дом) - если температура возрастает, идет увеличение частоты вращения вентилятора (кондея) 

В то же время есть функция которая устанавливает порог шума - и если шума много - снижает частоту вращения.

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

Загвоздка в том, как исключить конфликты? и разграничить приоритеты?

Никак не допру, как это это должно работать.. я представлял себе приоритеты в %, но что будет если у всех приоритет 10% и будет ли он отличаться от того, когда у всех 30%? как вообще будут коррелировать между собой эти функции, если сумма приоритетов меньше или больше 100%?

Или это как-то иначе надо решать?

 

Draghkon
Offline
Зарегистрирован: 17.09.2013

Чтобы понятнее было приведу пример с тем же кондеем:

допустим стоит макс. температура 20С

И макс уровень шума 25db

Ну и до какого-то момента все будет в этих рамках, но допустим на улице жарко - и тут начнется дерготня.. одна функция будет кондей разгонять, а другая тормозить..

Заранее отрегулировать это температурой мы не можем, потому что не знаем при каких условиях показатели шума и температуры сравняются. 

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

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

Вот как это расписать алгоритмически я не знаю..

toc
Offline
Зарегистрирован: 09.02.2013

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

toc
Offline
Зарегистрирован: 09.02.2013

для приоретизации задач, конкурирующих за разделяемый ресурс, например, процессорное время, сначала решите более простые вопросы.
1. есть всего один уровень приоритета "обычный" и есть несколько заданий, которые нужно выполнить. Как распределять время процессора между заданиями? Например, так: взять одно незавершённое задание и выполнять его одну секунду, затем взять другое, через секунду - третье...
2. А теперь есть два уровня приоритета: "обычный" и "важный" ....

Мне кажется, что двух уровней хватит в большинстве случаев. В ос виндовс их, кажется, пять. Сто (ваших процентов) - точно перебор.

step962
Offline
Зарегистрирован: 23.05.2011

Почитайте о нечеткой логике.

Draghkon
Offline
Зарегистрирован: 17.09.2013

Toc

Почему то  я затрудняюсь оперировать этими казалось бы простыми параметрами "обычный" и важный".. всетаки вопрос в том "на сколько важнее"..  Ведь когда речь идет о процессорном времени - то это хоти и общий ресурс, но противоречия в командах не возникает. А тут - если сделать одну из задач "важной" то другая автоматически не будет выполняться... Во всяком случая я не представляю себе иного варианта если мы говорим о балансе холодно\тихо. которые технически прямопротивоположны. Если мы говорим что для нас важен холод - то его соблюдение неизменно приведет к полному игнорированию уровня шума.. и наоборот.

Вариант с пользовательским режимом, в котором все это задано програмно - существует как запасной.. мне всегда хочется как можно меньше задавать жестких границ в программе.

step962

Спасибо, очень интересная тема!

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

Нашел хорошую статью на хабре по практическому применению: http://habrahabr.ru/post/125614/

но примеров там маловато и не совсем проясняют идею.. 

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

Draghkon
Offline
Зарегистрирован: 17.09.2013

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

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

 

Вроде бы как раз через нечеткую логику возможно такое реализовать. но примеров не видел.

axill
Offline
Зарегистрирован: 05.09.2011

Дело получается совсем не в програмировании. Програмирование нужно начинать когда сформулирована задача (по умному - написаны бизнестребования). В вашем случае вы спрашиваете "как програмировать то не знаю что"

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

в вашм примере например можно ввести еще один параметр - разница между заданной температурой и фактической.пока разница не превышает 5 градусов - приоритет шуму итогда программа обеспечивает уровень шума с зазором температуры в 5 градусов. Как только зазор нарушен - игнорируем шум и стараемся снизить температуру пока не достигнем зазора

Draghkon
Offline
Зарегистрирован: 17.09.2013

axill

Ну я вобщем-то не менее конкретно выразился чем вы.  Кроме того, в начале темы я указал что проблема больше не в реализации, а в построении алгоритма -т.е. что должно происходить и в какой последовательности.

В вашем примере - эта самая разница в 5С  и будет так сказать дозволением для температуры в пользу шума. Я говорил об этом с самого начала. Вопрос в том, как эту разницу получить, и почему она будет именно такой? 

Прямо задать пользователем в настройках - это было бы слишком просто для нас и слишком заморочено для пользователя. 

Далее - если в вашем примере мы преодалеваем барьер в 5С - то что происходит? Охлаждение врубается на полную, всячески игнорируя шум?   А задача стоит в том чтобы усилить охлаждение ровно настолько, чтобы оставаться в приделах этих 5С. опять же - как это рассчитать?

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

Опять же еще идеальнее было бы принимать такие решения на основе предпочтений пользователя и его субъективных суждений. т.е. переодически спрашивать его: "Не холодно ли тебе девица?" - на что пользователь будет давать ответ от 1 до 10. 

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

Например выпил пользователь горячего чаю - температу в комнате снижаем на градус, но не потому что так заложено в программе, а потому что после чая пользователь обычно говорит что ему жарко.

Это конечно на будущее)

Вроде нечеткая логика - самый мощный инструмент тут, хотя нехотелось бы конечно строить нейронную сеть ради термостата, но по ходу придется.

Вот только примеров маловато. найти не могу.

 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

нечеткая логика и нейронная сеть совсем разные штуки...

по нечеткой логике поищите на сайте matlab. У них пакет fuzzy-logic и к нему было хорошее описание и примеры.

Лет 12 назад еще делал диплом как раз по теме управления термопроцессами на нечеткой логике, помниится там и накопал. Хотя сейчас нечеткую логику везде пихают, где нет нормальных мат моделей или куча параметров, взаимодействие которых неподдается мат. описанию.

Кстати в продлвинутых кондишках используют ету fuzzy-логику, у них даже в каталогах везде про это выделено жирным :).

 

axill
Offline
Зарегистрирован: 05.09.2011

мне что-то подобное попадалось здесь http://www.antor.fr/apps/smart-virtual-thermostat/?lang=en

почитайте, может что-то для себя подчерпнете, особенно раздел 3 - Auto learning (автообучение)