Давеча я читал книжку про алгоритмы «исскуственного интеллекта», и наткнулся на описание алгоритмов нечеткой логики. В отличие от бинарной логики, где утверждение может быть ложным или истинным, в нечеткой логике истинность утверждения принимает значение от 0,0 до 1,0. Далее, одна и та же величина может быть основой для нескольких нечетких переменных. Вот что можно сказать про человека в возрасте 40 лет:
- Он молодой? - Нет.
is_young(40) = 0,0 - Он зрелый? - Да.
is_mature(40) = 1,0 - Он старый? - Не очень.
is_old(4) = 0,3
К нечетким переменным применимы правила нечеткой логики:
- fuzzy_and(a, b) = min(a, b)
- fuzzy_or(a, b) = max(a, b)
- fuzzy_not(a) = 1 - a
В граничных случаях (когда a и b равны 0,0 или 1,0) правила нечеткой логики полностью соответствуют правилам бинарной логики. Например,
fuzzy_and(0, 1) = min(0, 1) = 0
Когда я прочитал все это, я подумал - а ведь всю эту замуть можно с успехом применить на сайте! :) Суть моей идеи заключалась в следующем:
1. Тянем откуда-нибудь прогноз погоды.
2. Скармливаем его набору fuzzy-правил, на выходе получаем характеристику погоды («очень жарко», «слегка прохладно»).
3. На основе характеристики «советуем» посетителям тот или иной товар.
Изначально я задумывал что-то действительно большое, но где-то по пути обломался, и набор правил получился не сильно большой. Я сделал две основные характеристики: по температуре и по влажности. Температура зависит от собственно температуры воздуха, сезона и времени суток (летним днем +5°C - это холодрыга, летней ночью - это прохладно, а зимой - довольно тепло) и силы ветра (чем сильнее ветер, тем на улице прохладней). С влажностью все намного проще, она зависит только от относительной влажности воздуха (летом сухой воздух сушит кожу так же сильно, как и зимой).
Результат можно заценить на
главной странице «Техно-столицы» (блок «Погода в Киеве» и «Робот-метеоролог советует...»). Лично я им очень доволен :) За два месяца работы скрипта советами «робота-метеоролога» воспользовалось 40 человек - довольно много, учитывая, что в среднем в день на сайт заходит 120 посетителей.