Введение
На Habr достаточно много публикаций, в которых рассматривается понятие энтропии, вот только некоторые из них [1?5]. Публикации были позитивно восприняты читателями и вызвали большой интерес. Достаточно привести определение энтропии, которое дал автор публикации [1]: «энтропия — это то, как много информации вам не известно о системе». Публикаций о явлении хаосе на Habr тоже достаточно [6?9]. Однако связь энтропии и хаоса в обеих группах публикаций не рассматривалась.
Это объясняется тем, что различные области знаний выделяют разные виды меры хаоса:
- информационная;
- термодинамическая;
- дифференциальная;
- культурная.
Также описываются меры хаоса с учётом их специфики даже в одной из указанных областей довольно сложно.
Пробуя предельно упростить задачу, я решил рассмотреть связь информационной энтропии и хаоса на примере сходства областей прохождения от порядка к хаосу на диаграммах в виде точечных отображений и на графиках энтропийного коэффициента для этих областей.
Что из этого получилось Вы узнаете заглянув под кат.
Механизмы перехода от порядка к хаосу
Анализ механизмов перехода от порядка к хаосу в реальных системах и различных моделях выявил универсальность относительно немногих сценариев перехода к хаосу. Переход к хаосу может быть представлен в виде диаграммы бифуркаций (термин «бифуркация» употребляется для обозначения качественных перестроек системы c возникновением нового режима её поведения).
Вхождение системы в непредсказуемый режим описывается каскадом бифуркаций, следующих одна за другой. Каскад бифуркаций ведет последовательно к появлению выбора между двумя решениями, затем четырьмя и так далее, система начинает колебаться в хаотическом, турбулентном режиме последовательного удвоения количества возможных значений.
Будем рассматривать бифуркации удвоения периода и появление хаоса в точечных отображениях. Отображение – это функция, которая показывает зависимость последующих значений параметров системы от предыдущих значений:
Рассмотрим также и вторую часто применяемую функцию:
C помощью точечных отображений изучают объекты не с непрерывным, а с дискретным временем. При переходе к отображению размерность изучаемой системы может уменьшаться.
При изменении внешнего параметра \lambda точечные отображения демонстрируют довольно сложное поведение, которое становится хаотическим при достаточно больших \lambda. Хаос это очень быстрое разбегание траекторий в фазовом пространстве.
Бифуркация–это качественная перестройка картины движения. Значения управляющего параметра, при которых происходят бифуркации, называются критическими или бифуркационными значениями.
Для построения диаграмм будем применять следующие два листинга:
№1. Для функции:
Листинг программы
# -*- coding: utf8 -*-
import matplotlib.pyplot as plt
from numpy import *
def f(a,x0):
x1=(a-1)/a#точка пересечения функции с прямой
def ff(x):#логистическая функция
return a*x*(1-x)
def fl(x):
return x
x=x0;y=0;Y=[];X=[]
for i in arange(1,1000,1):
X.append(x)
Y.append(y)
y=ff(x)
X.append(x)
Y.append(y)
x=y
plt.title('Диаграмма логистической функции \n$x_{n+1}=\lambda \cdot x_{n}\cdot (1-x_{n})$ при $\lambda$ =%s и x0=%s '%(a,x0))
plt.plot(X,Y,'r')
x1=arange(0,1,0.001)
y1=[ff(x) for x in x1]
y2=[fl(x) for x in x1]
plt.plot(x1,y1,'b')
plt.plot(x1,y2,'g')
plt.grid(True)
plt.show()
№ 2. Для функции
Листинг программы
# -*- coding: utf8 -*-
import matplotlib.pyplot as plt
from numpy import *
def f(a,x0):
x1=((a-1)/a)**0.5
def ff(x):#логистическая функция
return a*x*(1-x**2)
def fl(x):
return x
x=x0;y=0;Y=[];X=[]
for i in arange(1,1000,1):
X.append(x)
Y.append(y)
y=ff(x)
X.append(x)
Y.append(y)
x=y
plt.title('Диаграмма логистической функции \n$x_{n+1}=\lambda \cdot x_{n}\cdot (1-x_{n}^{2})$ при $\lambda$ =%s и x0=%s '%(a,x0))
plt.plot(X,Y,'r')
x1=arange(0,1,0.001)
y1=[ff(x) for x in x1]
y2=[fl(x) for x in x1]
plt.plot(x1,y1,'b')
plt.plot(x1,y2,'g')
plt.grid(True)
plt.show()
Для оценки влияния характера логистической функции на критические значения рассмотрим диаграммы с функцией для этого будем применять листинг №1:
При 0< \lambda <1 для и x0=0,47 получим диаграмму:
В этом случае отображение имеет единственную неподвижную точку
которая является устойчивой.
При для x0=0,7 получим диаграмму:
На отрезке [0, 1] появляется еще одна неподвижная устойчивая точка
При для и x0=0,01 получим диаграмму:
Неподвижная точка , теряет устойчивость.
При для и x0=0,7 получим диаграмму:
Отображение претерпевает бифуркацию: неподвижная точка становится неустойчивой, и вместо нее появляется двукратный цикл.
При для
и x0=0,2 получим диаграмму:
При переходе параметра через значение , 2-кратный цикл становится 4-кратным, и далее.
При конечном значении в системе имеются неустойчивые циклы всех возможных порядков:
Для оценки влияния характера логистической функции на критические значения рассмотрим диаграммы с функцией , для этого будем применять листинг №2.
При для и x0=0,2:
Отображение имеет единственную неподвижную точку , которая является устойчивой.
При для и x0=0,55:
Точка теряет устойчивость, появляется новая устойчивая точка
При для и x0=0,2:
Происходит бифуркация удвоения периода, появляется 2-кратный цикл. Дальнейшее увеличение ведет к каскаду бифуркаций удвоения периода.
При для и x0=0,2:
Увеличение привело к каскаду бифуркаций удвоения периода.
При в системе имеются неустойчивые циклы всех возможных периодов:
Как было показано на диаграммах, с ростом порядка логистической функции диапазон изменения сужается.
При помощи диаграмм мы проследили путь от порядка к хаосу, задавая при этом значения для разных логистических функций. Остаётся ответить на вопрос: как измерять хаос? Ответ для некоторых из перечисленных в начале статьи типов хаоса известен
– энтропия мера хаоса. Этот ответ в полной мере можно отнести и к информационному хаосу, однако какую энтропию здесь применить и как сравнить с уже рассмотренным численным значением — на этот вопрос я попытаюсь ответить в следующей части статьи.
Информационная энтропия и энтропийный коэффициент
Мы будем рассматривать информационную двоичную энтропию для независимых случайных событий c возможными состояниями, распределёнными с вероятностями . Информационная двоичная энтропия рассчитывается по формуле:
Эта величина также называется средней энтропией сообщения. Величина называется частной энтропией, характеризующей только i-e состояние. В общем случае основание логарифма в определении энтропии может быть любым, большим 1; его выбор определяет единицу измерения энтропии.
Мы будем использовать десятичные логарифмы, при которых энтропия и информация измеряется в битах. Количество информации в битах будет вычисляться правильно, когда, например, переменные и будут подставляться в соответствующие выражения для энтропии безразлично в каких, но обязательно в одних и тех же единицах. Действительно:
где X и должны быть в одних и тех же единицах.
Оценка энтропийного значения случайной величины по экспериментальным данным находится по гистограмме из следующего соотношения:
где: –ширина каждого столбца гистограммы; — количество столбцов; -общее количество данных; — количество данных в -том столбце.
Энтропийный коэффициент определиться из соотношения:
где: – среднеквадратичное отклонение.
Информационная энтропия как мера хаоса
Для анализа явлений информационного хаоса используя энтропийный коэффициент, вначале создадим диаграмму ветвления для функции с нанесением переходных областей, полученных при построении гистограмм:
Диаграмма ветвления
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
from numpy import*
N=1000
y=[]
y.append(0.5)
for r in arange(3.58,3.9,0.0001):
for n in arange(1,N,1):
y.append(round(r*y[n-1]*(1-y[n-1]),4))
y=y[N-250:N]
x=[r ]*250
plt.plot( x,y, color='black', linestyle=' ', marker='.', markersize=1)
plt.figure(1)
plt.title("Диаграмма ветвления при 3,6<= $\lambda$ <=3,9")
plt.xlabel("r")
plt.ylabel("$\lambda$ ")
plt.axvline(x=3.63,color='black',linestyle='--')
plt.axvline(x=3.74,color='black',linestyle='--')
plt.axvline(x=3.83,color='black',linestyle='--')
plt.axvline(x=3.9,color='black',linestyle='--')
plt.show()
Получим:
Построим график для энтропийного коэффициента при тех же областях :
График для энтропийного коэффициента
import matplotlib.pyplot as plt
from numpy import*
data_k=[]
m='auto'
for p in arange(3.58,3.9,0.0001):
q=[round(p,2)]
M=zeros([1001,1])
for j in arange(0,1,1):
M[0,j]=0.5
for j in arange(0,1,1):
for i in arange(1,1001,1):
M[i,j]=q[j]*M[i-1,j]*(1-M[i-1,j])
a=[]
for i in arange(0,1001,1):
a.append(M[i,0])
n=len(a)
z=histogram(a, bins=m)
if type(m) is str:
m=len(z[0])
y=z[0]
d=z[1][1]-z[1][0]
h=0.5*d*n*10**(-sum([w*log10(w) for w in y if w!=0])/n)
ke=round(h/std(a),3)
data_k.append(ke)
plt.title("Энтропийный коэффициент ke для 3,6<= $\lambda$ <=3,9")
plt.plot(arange(3.58,3.9,0.0001),data_k)
plt.xlabel("$\lambda$ ")
plt.ylabel("ke")
plt.axvline(x=3.63,color='black',linestyle='--')
plt.axvline(x=3.74,color='black',linestyle='--')
plt.axvline(x=3.83,color='black',linestyle='--')
plt.axvline(x=3.9,color='black',linestyle='--')
plt.grid()
plt.show()
Получим:
Сравнивая диаграмму и график, видим идентичное отображение областей на диаграмме и на графике для энтропийного коэффициента для функции .
Для дальнейшего анализа явлений информационного хаоса с использованием энтропийного коэффициента, создадим диаграмму ветвления для логистической функции: с нанесением переходных областей:
Диаграмма ветвления
import matplotlib.pyplot as plt
from numpy import*
N=1000
y=[]
y.append(0.5)
for r in arange(2.25,2.56,0.0001):
for n in arange(1,N,1):
y.append(round(r*y[n-1]*(1-(y[n-1])**2),4))
y=y[N-250:N]
x=[r ]*250
plt.plot( x,y, color='black', linestyle=' ', marker='.', markersize=1)
plt.figure(1)
plt.title("Диаграмма ветвления при 2.25<=$\lambda$ <=2.56")
plt.xlabel("$\lambda$ ")
plt.ylabel("y")
plt.axvline(x=2.34,color='black',linestyle='--')
plt.axvline(x=2.39,color='black',linestyle='--')
plt.axvline(x=2.45,color='black',linestyle='--')
plt.axvline(x=2.49,color='black',linestyle='--')
plt.axvline(x=2.56,color='black',linestyle='--')
plt.show()
Получим:
Построим график для энтропийного коэффициента при тех же областях :
График энтропийного коэффициента
import matplotlib.pyplot as plt
from numpy import*
data_k=[]
m='auto'
for p in arange(2.25,2.56,0.0001):
q=[round(p,2)]
M=zeros([1001,1])
for j in arange(0,1,1):
M[0,j]=0.5
for j in arange(0,1,1):
for i in arange(1,1001,1):
M[i,j]=q[j]*M[i-1,j]*(1-(M[i-1,j])**2)
a=[]
for i in arange(0,1001,1):
a.append(M[i,0])
n=len(a)
z=histogram(a, bins=m)
if type(m) is str:
m=len(z[0])
y=z[0]
d=z[1][1]-z[1][0]
h=0.5*d*n*10**(-sum([w*log10(w) for w in y if w!=0])/n)
ke=round(h/std(a),3)
data_k.append(ke)
plt.figure(2)
plt.title("Энтропийный коэффициент ke для 2.25<= $\lambda$ <=2.56")
plt.plot(arange(2.25,2.56,0.0001),data_k)
plt.xlabel("$\lambda$ ")
plt.ylabel("ke")
plt.axvline(x=2.34,color='black',linestyle='--')
plt.axvline(x=2.39,color='black',linestyle='--')
plt.axvline(x=2.45,color='black',linestyle='--')
plt.axvline(x=2.49,color='black',linestyle='--')
plt.axvline(x=2.56,color='black',linestyle='--')
plt.grid()
plt.show()
Получим:
Сравнивая диаграмму и график, видим идентичное отображение областей на диаграмме и на графике для энтропийного коэффициента для функции
Выводы:
В статье решена учебная задача: является ли информационная энтропия мерой хаоса, а также средствами Python дан утвердительный ответ на этот вопрос.
ksbes
Странно, всегда считал, что энтропия это среднее (мат. ожидание) информации необходимой для описания системы. Т.е. это как раз то что мы знаем, а не потенциально не знаем. То что мы не знаем — это скорее энтальпия, наверное, если уж переносить термодинамические потенциалы в теорию информации.
А так статья интересная, спасибо!