在前段时研究智能算法时,发现如果使用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这个方法就可以访问这个参数了。
以上这篇java 将方法作为传参--多态的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# java
# 方法多态
# java方法重载和参数类型自动提升方式
# Java中方法重写与重载的区别
# Java支持方法重载的原因
# Java基础学习之方法的重载知识总结
# java基础之方法和方法的重载详解
# Java开启新线程并传参方法代码实现
# Java 方法的重载与参数传递详解
# 创建一个
# 给大家
# 为例
# 就可以
# 只需
# 希望能
# 只有一个
# 中了
# 所示
# 要将
# 这篇
# 比较多
# 只提供
# 小编
# 大家多多
# 面向对象
# 如下图
# 类中
# 研究对象
# 换一种
相关文章:
高性价比服务器租赁——企业级配置与24小时运维服务
如何通过西部建站助手安装IIS服务器?
网站制作话术技巧,网站推广做的好怎么话术?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何通过老薛主机一键快速建站?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
建站之星代理如何获取技术支持?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
定制建站策划方案_专业建站与网站建设方案一站式指南
C++时间戳转换成日期时间的步骤和示例代码
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
简单实现Android文件上传
表情包在线制作网站免费,表情包怎么弄?
建站之星好吗?新手能否轻松上手建站?
c++ stringstream用法详解_c++字符串与数字转换利器
宁波自助建站系统如何快速打造专业企业网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何在企业微信快速生成手机电脑官网?
C#如何使用XPathNavigator高效查询XML
如何在建站宝盒中设置产品搜索功能?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
建站之星后台管理:高效配置与模板优化提升用户体验
家庭服务器如何搭建个人网站?
如何在IIS7上新建站点并设置安全权限?
如何快速重置建站主机并恢复默认配置?
网站企业制作流程,用什么语言做企业网站比较好?
如何在阿里云虚拟服务器快速搭建网站?
建站主机服务器选购指南:轻量应用与VPS配置解析
如何零基础开发自助建站系统?完整教程解析
如何做静态网页,sublimetext3.0制作静态网页?
如何选择PHP开源工具快速搭建网站?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
制作公司内部网站有哪些,内网如何建网站?
学校建站服务器如何选型才能满足性能需求?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
高防服务器租用指南:配置选择与快速部署攻略
如何在服务器上三步完成建站并提升流量?
b2c电商网站制作流程,b2c水平综合的电商平台?
定制建站如何定义?其核心优势是什么?
如何用免费手机建站系统零基础打造专业网站?
建站主机功能解析:服务器选择与快速搭建指南
内网网站制作软件,内网的网站如何发布到外网?
如何快速生成专业多端适配建站电话?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。