📄 llr.java
字号:
import java.text.*;
public class llr {
public static void main (String[] args)
{
//粒子规模16个
//学习因子
double c1=2.0,c2=2.0;
int i,k;
//存放能量最小值
double Emin=0.0;
int dum=-1;
//惯性权重
double numda=0.35;
long ddum=-1,dumm=-1,duum=-1;
//存放电阻值
double R1[]=new double[20];
double R2[]=new double[20];
double R3[]=new double[20];
double R4[]=new double[20];
//电阻最优值
double R1b=0.0;
double R2b=0.0;
double R3b=0.0;
double R4b=0.0;
//个体最优参数值
double pbestR1[]=new double[20];
double pbestR2[]=new double[20];
double pbestR3[]=new double[20];
double pbestR4[]=new double[20];
// 更新各个参数的速度和位置
double vr1[]=new double[20];
double vr2[]=new double[20];
double vr3[]=new double[20];
double vr4[]=new double[20];
//群体最优相应参数值
double gbestR1=0.0,gbestR2=0.0,gbestR3=0.0,gbestR4=0.0;
//能量值
double E1[]=new double[20];
double E[][]=new double[200000][20];
//最小暂存值
double Eming[]=new double[200000];
double Eminest[]=new double[200000];
//存放最小功率
double Ee[]=new double[20];
//随机数
d6r1F g0=new d6r1F();
d6r2F g=new d6r2F();
d6r3F g1=new d6r3F();
d6r4F g2=new d6r4F();
Energe t1=new Energe();
minenergy t2=new minenergy();
// Ebest t3=new Ebest();
DecimalFormat form = new DecimalFormat("0.000000");
// 设定初始的20个粒子,每个粒子有20个参数 ,分别为R1,R2,R3,R4,Vbe
for(i=0;i<20;i++)
{
R1[i]=10.00000+3*g0.ran0(dum);
R2[i]=10.00000-3*g0.ran0(ddum);
//R3[i]=10.00000-3*g0.ran0(duum);
//R4[i]=10.00000+3*g0.ran0(dumm);
dum=g2.ran3_idum;
ddum=g.ran1_idum;
dumm=g1.ran2_idum;
duum=g0.ran0_idum;
}
//K为步数,设定最大算法迭代次数
for(k=0;k<20000;k++)
{
//调用目标函数,计算每个粒子相应的适应度
t1.Energe(R1,R2,R3,R4,E1);
//为每步操作设定粒子相应值
for(i=0;i<20;i++)
{
E[k][i]=E1[i];
//检测适应度函数的正误
//System.out.print("E1[i]---"+E[k][0]);
}
//System.out.println("\n");
//第k步的能量最小值,全局最小值
Eming[k]=t2.minenergy(E1);
Eminest[k]= Eming[k];
//当粒子群中单步中某粒子能量为最小值时,存储其相关参数值(单步全局)
//double Eb[]=new double[20000];
if(k>=0){
double Ebest=E[k][0];
R1b=R1[0]; R2b=R2[0];R3b=R3[0]; R4b=R4[0];
//循环判断
for(int m=0;m<20;m++)
{
if(E1[m]<Ebest)
{
Ebest=E[k][m];
R1b=R1[m];R2b=R2[m];R3b=R3[m];R4b=R4[m];
}
}
//Eb[k]=Eeb;
System.out.println(Eminest[k]);
}
//个体极值
if(k >= 1)
{
for (i = 0; i < 20; i++)
{
if (E[k][i] < E[k - 1][i])
{
pbestR1[i]=R1[i];
pbestR2[i]=R2[i];
pbestR3[i]=R3[i];
pbestR4[i]=R4[i];
}
else
E[k][i] = E[k-1][i];
//System.out.println("pbestR1>>>"+pbestR1[i]+" ");
}
if (Eming[k] < Eming[k-1])
{
gbestR1=R1b;
gbestR2=R2b;
gbestR3=R3b;
gbestR4=R4b;
//System.out.println("0.0000");
}
else
{
Eming[k]=Eming[k-1];
}
Emin=Eming[k];
//调整精确度
//if((Math.abs(Eb[k]-Eb[k-1])<1))
if((Math.abs(Eminest[k]-Eminest[k-1])<0.00001))
break;
}
//算法核心
for(i=0;i<20;i++)
{
//变量变化
//System.out.print("vr1[i]>>>"+vr1[i]+" ");
vr1[i] = numda*(vr1[i] + c1* g0.ran0(ddum) * (pbestR1[i] - R1[i]) +
c2*g0.ran0(dum) * (gbestR1 - R1[i]));
vr2[i] = numda*(vr2[i] + c1* g1.ran2(dum) * (pbestR2[i] - R2[i]) +
c2*g0.ran0(duum) * (gbestR2 - R2[i]));
vr3[i] = numda*vr3[i] + c1*g0.ran0(dumm) * (pbestR3[i] - R3[i]) +
c2*g.ran1(dum) * (gbestR3 - R3[i]);
vr4[i] = numda*vr4[i] +c1* g1.ran2(dum) * (pbestR4[i] - R4[i]) +
c2*g1.ran2(dum) * (gbestR4- R4[i]);
//System.out.print("vr1[i]>>>"+vr1[i]+" ");
//System.out.print("R1>>>"+form.format(R1[i])+" ");
//限定速度范围
if(vr1[i]>1.000)
{
vr1[i]=1.0000;
}
if(vr1[i]<-1.0000)
{
vr1[i]=-1.0000;
}
if(vr2[i]>1.0000)
{
vr2[i]=1.000;
}
if(vr2[i]<-1.000)
{
vr2[i]=-1.000;
}
/**if(vr3[i]>1.0000)
{
vr3[i]=1.000;
}
if(vr3[i]<-1.000)
{
vr3[i]=-1.000;
}
if(vr4[i]>1.000)
{
vr4[i]=1.0000;
}
if(vr4[i]<-1.000)
{
vr4[i]=-1.0000;
}*/
//参数在速度下变化
R1[i]=R1[i]+vr1[i];
R2[i]=R2[i]+vr2[i];
//R3[i]=R3[i]+vr3[i];
//R4[i]=R4[i]+vr4[i];
//System.out.print("vr1[i]>>>"+vr1[i]+" ");
//System.out.print("vr2[i]>>>"+vr2[i]+" ");
//System.out.print("R1>>>"+form.format(R1[i])+" ");
//限制参数活动范围
if(R1[i]>13.0000){
R1[i]=13.0000;
}
if(R1[i]<7.0000){
R1[i]=7.0000;
}
if(R2[i]>13.0000){
R2[i]=13.0000;
}
if(R2[i]<7.0000){
R2[i]=7.0000;
}
/**if(R3[i]>13.0000){
R3[i]=13.0000;
}
if(R3[i]<7.0000){
R3[i]=7.0000;
}
if(R4[i]>13.0000){
R4[i]=13.0000;
}
if(R4[i]<7.0000){
R4[i]=7.0000;
}*/
dum=g2.ran3_idum;
ddum=g.ran1_idum;
dumm=g1.ran2_idum;
duum=g0.ran0_idum;
//System.out.println("R1>>>"+form.format(R1[i])+" ");
}
//System.out.println("\n");
}
//System.out.println("\n");
//输出参数
System.out.println(" k is ");
System.out.print(k+" ");
System.out.print("\n");
System.out.println(" the min value is ");
System.out.print(form.format(Emin)+" ");
System.out.print("\n");
System.out.print(form.format(gbestR1)+" ");
System.out.print(form.format(gbestR2)+" ");
System.out.print(form.format(gbestR3)+" ");
System.out.print(form.format(gbestR4)+" ");
System.out.print("\n");
System.out.print(form.format(R1b)+" ");
System.out.print(form.format(R2b)+" ");
System.out.print(form.format(R3b)+" ");
System.out.print(form.format(R4b)+" ");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -