The following editor will bring you an example of passing methods as parameters in java - polymorphism. The editor thinks it’s pretty good, so I’ll share it with you now and give it as a reference. Let’s follow the editor and take a look.
When I was studying intelligent algorithms some time ago, I found that if java is used to implement it, the specific implementation process is often similar, but the fitness value function is based on the
research object The differences have changed greatly, which has greatly hindered the maintenance of the code, so a question arises: Can the adaptation value function
be passed into the method as a parameter? According to C/C++ As a rule, due to the existence of pointers, functions can be passed in as pointers. Due to the complexity and difficulty of using pointers, the effect is average. If you change to an object-oriented thinking, you can think of designing an interface I. This interface only provides one method. Then it is equivalent to passing the interface as a parameter into the method. When calling, you only need to add the design A class implements interface I, then the function can be passed into the method.
The following takes the 0.618 gold search method as an example. Due to the different objective functions, it satisfies the above description. Note that this search is only feasible for single-peak functions.
The algorithm is shown in the figure below:
##1. First create an interface. There is only one interface. Adaptation value method:
public interface Fitness {
public double getFitness(double X);
}
2. Create a class and simply implement the above 0.618 search method:
public class stationUtils{/***
* 黄金分割搜索法,寻找最小值的函数
* @param min 搜索上限
* @param max 搜索下限
* @param fitness 函数值
* @return
*/
public double goldenSearch(double min,double max,Fitness fitness){
/*double X1=min+0.382*(max-min);*/
double a=doubleOperation.substract(max,min);
double X1=doubleOperation.add(min,doubleOperation.multiply(0.382,a));
/*double X2=min+0.618*(max-min);*/
double X2=doubleOperation.add(min,doubleOperation.multiply(0.618,a));
double F1=fitness.getFitness(X1);
double F2=fitness.getFitness(X2);
while(Math.abs(doubleOperation.substract(X1,X2))>delt){
if(F1<F2){
max=X2;
X2=X1;
F2=F1;
X1=min+0.382*(max-min);
F1=fitness.getFitness(X1);
}else{
min=X1;
X1=X2;
F1=F2;
X2=min+0.618*(max-min);
F2=fitness.getFitness(X2);
}
}
return doubleOperation.pide(doubleOperation.add(max,min),2);
}
}
3. Create a class to implement the Fitness interface, that is, write your own target function into it, Here is a quadratic function of one variable as an example:
## public class Func implements Fitness{
@Override
public double getFitness(double X) {
return X*X- 3 * X + 1;
}
}
@Test
public void run1(){
Func func=new Func();
double result=stationUtils.goldenSearch(-2.00,4.00,func);
System.out.println(result);
}
, there are more parameters passed in, the value can be passed into the interface implementation class, then getFitness This method can access this parameter.
The above is the detailed content of Java uses methods as examples of polymorphism by passing parameters. For more information, please follow other related articles on the PHP Chinese website!