Введение
На 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 дан утвердительный ответ на этот вопрос.