Введение

На Habr достаточно много публикаций, в которых рассматривается понятие энтропии, вот только некоторые из них [1÷5]. Публикации были позитивно восприняты читателями и вызвали большой интерес. Достаточно привести определение энтропии, которое дал автор публикации [1]: «энтропия — это то, как много информации вам не известно о системе». Публикаций о явлении хаосе на Habr тоже достаточно [6÷9]. Однако связь энтропии и хаоса в обеих группах публикаций не рассматривалась.

Это объясняется тем, что различные области знаний выделяют разные виды меры хаоса:
• информационная;
• термодинамическая;
• дифференциальная;
• культурная.

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

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

Что из этого получилось Вы узнаете заглянув под кат.

Механизмы перехода от порядка к хаосу

Анализ механизмов перехода от порядка к хаосу в реальных системах и различных моделях выявил универсальность относительно немногих сценариев перехода к хаосу. Переход к хаосу может быть представлен в виде диаграммы бифуркаций (термин «бифуркация» употребляется для обозначения качественных перестроек системы c возникновением нового режима её поведения).

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

Будем рассматривать бифуркации удвоения периода и появление хаоса в точечных отображениях. Отображение – это функция, которая показывает зависимость последующих значений параметров системы от предыдущих значений:

.

Рассмотрим также и вторую часто применяемую функцию:

:

Листинг программы

# -*- 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 для , для этого будем применять листинг №2.

При ведет к каскаду бифуркаций удвоения периода.

При привело к каскаду бифуркаций удвоения периода.

При сужается.

При помощи диаграмм мы проследили путь от порядка к хаосу, задавая при этом значения для разных логистических функций. Остаётся ответить на вопрос: как измерять хаос? Ответ для некоторых из перечисленных в начале статьи типов хаоса известен
– энтропия мера хаоса. Этот ответ в полной мере можно отнести и к информационному хаосу, однако какую энтропию здесь применить и как сравнить с уже рассмотренным численным значением — на этот вопрос я попытаюсь ответить в следующей части статьи.

Информационная энтропия и энтропийный коэффициент

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

Энтропийный коэффициент определиться из соотношения:

где: – среднеквадратичное отклонение.

Информационная энтропия как мера хаоса

Для анализа явлений информационного хаоса используя энтропийный коэффициент, вначале создадим диаграмму ветвления для функции с нанесением переходных областей, полученных при построении гистограмм:

Диаграмма ветвления

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

Ссылки

  1. Энтропия? Это просто!
  2. Введение в понятие энтропии и ее многоликость.
  3. Энтропия и деревья принятия решений.
  4. Трактат об энтропии.
  5. Энтропия и WinRAR.
  6. Математические модели хаоса.
  7. Немного о хаосе и о том, как его сотворить.
  8. Критический взгляд на аттрактор Лоренца.
  9. Генераторы хаоса на ПЛИС.

Источник