数学建模社区-数学中国

标题: 数学建模--粒子群算法模版 [打印本页]

作者: 杨利霞    时间: 2018-11-1 10:43
标题: 数学建模--粒子群算法模版
数学建模--粒子群算法模版
www.madio.net
求解下列非线性规划最优解
min f(x) = x(1)^2 + x(2)^2 + 8;

! W2 [# U$ q5 V7 ^! C" d
         s.t.
         x(1)^2 - x(2) >= 0;
         -x(1) - x(2)^2 + 2 = 0;
         x(1),x(2) >=0
主函数:
clc;
format long;%------给定初始化条件---------------------------------------
0 `4 M2 F& x, ]" S7 x3 i6 B, m
c1=2;             %学习因子1
c2=2;             %学习因子2
w=0.7;            %惯性权重
MaxDT=1000;       %最大迭代次数
D = 1;
M=40;             %初始化群体个体数目eps=1;      %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)----------
for i=1:M
    for j=1:D
        x(i,j)=rand; %随机初始化位置
        v(i,j)=rand; %随机初始化速度
    endend
%------先计算各个粒子的适应度,并初始化p(i)和gbest-------------
for i=1:M
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);end
gbest=x(1,:);             %gbest为全局最优
for i=2:M
    if fitness(x(i,:)) < fitness(gbest)
        gbest=x(i,:);
    endend
%------进入主要循环,按照公式依次迭代,直到满足精度要求----------
for t=1:MaxDT
    for i=1:M
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(gbest-x(i,:));
        x(i,:)=x(i,:)+v(i,:);
        if fitness(x(i,:))<p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
        if p(i)<fitness(gbest)
            gbest=y(i,:);
        end
    endend

/ a% e' _; f4 M; ^" U% N9 b+ T2 ]4 O$ X! a9 H' q5 k/ J+ N
Solution=gbest'
Result=fitness(gbest)
function objvalue = fitness(X)
x2 = X;
x1 = 2-X^2;
    if x1^2-x2>=0 && -x1-x2^2+2==0 && x1>=0 &&x2>=0
            objvalue = x1^2+x2^2+8;
        else
            objvalue = 1000;
    end
end
: E( M6 q1 |! X6 ~$ [0 o5 D
) j. E1 k; C' G0 D+ n0 Y' F

8 m' v6 A7 e: q1 C  R3 Q$ I: w6 d) t5 i& X





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5