#

混沌优化算法


混沌优化算法

基于Logistic映射产生混沌运动轨道的遍历性,可将其混沌用于函数优化问题:
混沌优化算法的基本思想是将变量从混沌空间变换到解空间,然后利用混沌变量所具有的丰富的非线性动力学特征————随机性、遍历性、规律性的特点进行搜索。混沌优化算法易跳出局部最优解,不需要优化问题具有连续性和可微性。

变尺度混沌优化算法

以求目标函数:

maxf(x)=1(2x12+2x22+x32+2x1x2+2x1x38x16x24x3+9)\max f\left( x \right) =1-\left( 2x_{1}^{2}+2x_{2}^{2}+x_{3}^{2}+2x_1x_2+2x_1x_3-8x_1-6x_2-4x_3+9 \right)

带条件约束:

\begin{equation} s.t. \begin{cases} x_1+x_2+2x_3\le 3\\ x_1,x_2,x_3\ge 0\\ \end{cases} \end{equation}

step 1:应用Logistic方程产生混沌变量进行优化搜索:

xk+1=μxk(1.0xk)x_{k+1} = \mu \cdot x_k (1.0 -x_k)

step 2:随机产生初始为[0,1]区间内n个相异初值$$x_{0i}$$,得到n个轨迹不同的混沌变量。计算性能指标$$f(x_{0i})$$,$$x_{0i} =a+x_{0i}(b-a)$$。

step 3:根据混沌方程进行迭代,产生新解$$x_i\in \left[ 0,1 \right] $$。计算相应的性能指标$$f(x_{i}),x_{i} =a+x_{i}(b-a)$$。

step 4:如果$$f(x_i) < f(x_{i0})$$则接受新解$$x_{i0}=x_i$$(用于复制运算)

step 5:随机对新种群中部分解按照概率$$P_c$$进行交换运算

step 6:随机对新种群中部分解按照概率$$P_m$$进行变异运算,经过4~6后得到$$x_{1i} \in \left[ 0,1 \right] $$

step 7:如果$$f(x_{1i}) < f(x_{i0})$$,则接受新解$$x_{i0}=x_{1i}$$从中找出性能最好的个体$$X_c$$。转跳到步骤3.如果$$X_c$$在规定的迭代次数m里没有满足指定的误差要求搜索条件,则进行下一步骤8,否则结束。

step 8:以上一搜索结果$$X_c$$为中心,以$$\frac{r}{a}$$为半径,r为前一步的搜索半径,即前一步解空间的半径,a为r的衰减因子。以$$x_{k+1} = \mu \cdot x_k (1.0 -x_k)$$为搜索函数,重复步骤3~7,缩小范围进行搜索,直到满足误差要求。最终所得到的$$X_c,f(X_c)$$为全局最优。

注意:若$$x_i$$定义域包含负数,则可以通过混沌函数:$$x_{k+1} = \mu \cdot x^{3}_n - \mu x_n+x_n$$此时$$x_i$$在[-1,1]上遍历,目标函数为$$f(X),X=ax$$

代码如下:

(1)函数定义:

function myfunction=myfunction(x1,x2,x3)
myfunction=1-(2*x1^2+2*x2^2+x3^2+2*x1*x2+2*x1*x3-8*x1-6*x2-4*x3+9)
end

(2)设置吸收域:

function myjudge=myjudge(x1,x2,x3)
a=-x1-x2-2*x3+3;
if x1>0&&x2>0&&x3>0&&a>=0
    myjudge=1;
else
    myjudge=0;
end

(3)主函数:

%参数设置
num=3;                                           %混沌变量
r=2;
for k=1:100
for z=1:100
    X=rand(num,1);
    TempX = r * X;
   if myjudge(TempX(1), TempX(2), TempX(3)) == 1   %当TempX变量满足可行域时跳出循环
     break
   end
end

MaxX = TempX;

MaxF = myfun(MaxX(1), MaxX(2), MaxX(3));  %性能指标

for i = 2:5000
   for j =1:num                                        %X的每个变量做循环
    X(j, i) = 4 * X(j, i - 1) * (1 - X(j, i - 1));   %logistic迭代
   TempX(j) = r * X(j, i);                           %搜索半径为2
   end
   
   if myjudge(TempX(1), TempX(2), TempX(3))==1              %如果可行且性能更好,更换新解
      TempF = myfun(TempX(1), TempX(2), TempX(3));
        if TempF > MaxF 
         MaxX(j) = TempX(j);
         MaxF = TempF;
        end
   end
end
%二次载波
X=rand(num,1);

for i = 2:5000                      
    for j = 1:num
    X(j, i) = 4 * X(j, i - 1) * (1 - X(j, i - 1));
    end
end

for i = 1:5000
      TempX = MaxX + 0.0001 * X(:, i);
      
    if myjudge(TempX(1), TempX(2), TempX(3))==1 
    TempF = myfun(TempX(1), TempX(2), TempX(3));
        if TempF > MaxF
        MaxX(j) = TempX(j);
        MaxF = TempF;
       end
    end
 end
MaxF = vpa(MaxF, 4);                        %保留四位有效数字
for i = 1:num
MaxX(i) = vpa(MaxX(i), 4);
end
Max(k)=MaxF;
end
sz=subs(Max);
[m,n]=max(sz);
B=Max(n);%最大值
X=MaxX;%解

文章作者: 王胜鹏
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王胜鹏 !
评论
 上一篇
常微分方程数值解法 常微分方程数值解法
微分方程数值解 核心思想:用差分代替微分 常微分方程 eg1:$$\begin{equation} \begin{cases} y’=y-\frac{2x}{y}, 0<x<1 \\ y\left( 0 \right) =1
2020-07-30
下一篇 
DCT图像处理 DCT图像处理
图像处理————傅里叶变换 定义: 对于数字图像来说,它的储存方式主要为二维矩阵,因此引进连续二元函数的二维傅里叶变换及反变换定义(学过傅里叶变换的看应该很容易理解,就不细讲): F(u,v)=∫−∞+∞∫−∞+∞f(x,y)e−j2π(u
2020-05-14
  目录