我正在寻找Java中的“Whale_optimization_algorithm”代码,我在一个网站上找到它,但是当我试图运行它时。它显示“无法找到或加载Main class Whale_optimization_algorithm.java”的错误 但它成功编译。
这是代码
package test;
import java.io.*;
abstract class f_xj
{
abstract double func(double x[]);
}
public class Whale_optimization_algorithm {
double A;
double C;
double a;
double a2;
double b;
double l;
double p;
double r1;
double r2;
double Leader_score;
double[] Leader_pos;
double D_Leader;
double distance2Leader;
double[] Lower;
double[] Upper;
double[] X_rand;
double D_X_rand;
int Maxiter;
int rand_leader_index;
double[][] Positions;
double[] Fitness;
int N;
int D;
f_xj ff;
public Whale_optimization_algorithm(f_xj iff, int iMaxiter, double[] iLower, double[] iUpper, int iN)
{
ff=iff;
Maxiter=iMaxiter;
Lower=iLower;
Upper=iUpper;
D=Lower.length;
N=iN;
Positions=new double[N][D];
Fitness=new double[N];
Leader_pos=new double[D];
X_rand=new double[D];
Leader_score=100000000000.0;
}
void init()
{
for(int i=0;i<N;i++)
{for(int j=0;j<D;j++)
{Positions[i][j]=Lower[j]+((Upper[j]-Lower[j])*Math.random());}}
}
double[][] solution()
{
init();
int iter=0;
while(iter<Maxiter)
{
for(int i=0;i<N;i++)
{
for(int j=0;j<D;j++)
{if ((Positions[i][j]<Lower[j]) || (Positions[i][j]>Upper[j]))
{Positions[i][j]=Lower[j]+((Upper[j]-Lower[j])*Math.random());}}
Fitness[i]=ff.func(Positions[i]);
if(Fitness[i]<Leader_score)
{
Leader_score=Fitness[i];
for(int j=0;j<D;j++)
{Leader_pos[j]=Positions[i][j];}
}
}
a=2.0 - (double)iter*(2.0/(double)Maxiter);
a2= -1.0 + (double)iter*(-1.0/(double)Maxiter);
for(int i=0;i<N;i++)
{
r1=Math.random();
r2=Math.random();
A=2.0*a*r1-a;
C=2.0*r2;
b=1.0;
l=(a2-1.0)*Math.random() + 1.0;
p=Math.random();
for(int j=0;j<D;j++)
{
if (p<0.5)
{
if (Math.abs(A)>=1.0)
{
rand_leader_index=(int)Math.floor((double)N*Math.random());
X_rand[j]=Positions[rand_leader_index][j];
D_X_rand=Math.abs(C*X_rand[j] - Positions[i][j]);
Positions[i][j]=X_rand[j] - A*D_X_rand;
}
else if (Math.abs(A)<1)
{
D_Leader=Math.abs(C*Leader_pos[j] - Positions[i][j]);
Positions[i][j]=Leader_pos[j]-A*D_Leader;
}
}
else if (p>=0.5)
{
distance2Leader=Math.abs(Leader_pos[j] - Positions[i][j]);
Positions[i][j]=distance2Leader*Math.exp(b*l)*Math.cos(l*2.0*Math.PI) + Leader_pos[j];
}
}
}
iter++;
}
double out[][]=new double[2][D];
out[0][0]=Leader_score;
for(int i=0;i<D;i++)
{out[1][i]=Leader_pos[i];}
return out;
}
void toStringnew()
{
double[][] out=solution();
System.out.println("Optimized value = "+out[0][0]);
for(int i=0;i<D;i++)
{System.out.println("x["+i+"] = "+out[1][i]);}
}
void toTxtfile()
{ String named="whale_plateframe_f36_ackley.txt";
String line="";
int lineNo;
try
{
FileWriter fw=new FileWriter(named,true);
BufferedWriter bw=new BufferedWriter(fw);
LineNumberReader lnr=new LineNumberReader(new FileReader(named));
lnr.setLineNumber(1);
for(int i=1;i<=lnr.getLineNumber();i++)
{bw.newLine();}
double[][] dd=solution();
Double d1d=new Double(dd[0][0]);
String s1=d1d.toString();
int nn=dd[1].length;
Double[] val=new Double[nn];
String[] str=new String[nn];
for(int i=0;i<nn;i++)
{val[i]=new Double(dd[1][i]);}
for(int i=0;i<nn;i++)
{str[i]=val[i].toString();}
bw.write(s1+" ");
for(int i=0;i<nn;i++)
{bw.write(str[i]+" ");}
bw.close();
lnr.close();
}catch(IOException e)
{e.printStackTrace();}
}
}
请帮帮我。我是Java新手。 如果我要添加方法如何添加它或在方法中调用此类?
答案 0 :(得分:1)
作为基本JAVA的一部分,首要的是主要功能对于独立类来说是必须的。
但是,有些方法可以在不实现此类中的main函数的情况下执行所需的函数:
答案 1 :(得分:0)
请在测试包中选择一个简单的课程。然后运行它。
public class MainClass {
public static void main(String args[]) {
Whale_optimization_algorithm algo = new Whale_optimization_algorithm();
algo.init();
algo.solution();
algo.toTxtfile();
}
}