欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-11-19 13:21:33|栏目:JAVA代码|点击:

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

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

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

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

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

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

算法如下图所示:

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

public interface Fitness {
 public double getFitness(double X);
}

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

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接口,也就是将自己目标函数写进去,这里以一元二次函数为例:

 public class Func implements Fitness{
  @Override
  public double getFitness(double X) {
   return X*X- 3 * X + 1;
  }
 }

4.简单调用一下:

 @Test
 public void run1(){
  Func func=new Func();
  double result=stationUtils.goldenSearch(-2.00,4.00,func);
  System.out.println(result);
 }

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

上一篇:springboot手动事务回滚的实现代码

栏    目:JAVA代码

下一篇:Java 异常详解

本文标题:java 将方法作为传参--多态的实例

本文地址:http://www.codeinn.net/misctech/184089.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有