java 将方法作为传参–多态的实例

2025-05-29 0 44

在前段时研究智能算法时,发现如果使用java进行实现的话,往往具体实现过程差不多,但是适应值函数却根据

研究对象的不同发生很大的改变,这样对代码的维护产生很大的阻碍,于是产生的一个疑问:可不可以将适应值函数

作为参数传入到方法中,根据C/C++的习惯的话,由于指针的存在,可以将函数作为指针传入,由于指针使用的复杂

性以及难维护性,效果一般。如果换一种面向对象的思想,可以想设计一个接口I,这个接口只提供一个方法,那么相

当于可以将接口作为参数传入到方法中,调用时只需要将设计一个类,实现接口I,那么就可以将函数传入到方法中了。

下面以0.618黄金搜索法为例,由于目标函数的不同,满足上面所叙述的,注意这种搜索只能时单峰的函数才可行,

算法如下图所示:

java 将方法作为传参--多态的实例

1.首先创建一个接口,这个接口只有一个适应值的方法:

?

1

2

3
public interface Fitness {

public double getFitness(double X);

}

2.创建一个类,简单实现上面0.618搜索的方法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34
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.divide(doubleOperation.add(max,min),2);

}

}

3.在创建一个类,用来实现Fitness接口,也就是将自己目标函数写进去,这里以一元二次函数为例:

?

1

2

3

4

5

6
public class Func implements Fitness{

@Override

public double getFitness(double X) {

return X*X- 3 * X + 1;

}

}

4.简单调用一下:

?

1

2

3

4

5

6
@Test

public void run1(){

Func func=new Func();

double result=stationUtils.goldenSearch(-2.00,4.00,func);

System.out.println(result);

}

总结,加入传入的参数比较多,可以将值传入到接口实现类中,那么getFitness这个方法就可以访问这个参数了。

以上这篇java 将方法作为传参多态的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/bufferflies/archive/2017/09/25/7593866.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java 将方法作为传参–多态的实例 https://www.kuaiidc.com/114559.html

相关文章

发表评论
暂无评论