当前位置: 首页 > news >正文

如何使用java编写差分进化算法

差分进化算法属于一种进化算法,以全局最优性、收敛速度快等特点,得到很多学者的关注,并将其扩展到参数优化、数值优化、工程优化、路径优化、机器学习等一系列研究中。

而差分进化算法的原理即过程又是什么呢?

一、什么是差分进化算法

差分进化算法的原理属于内部寻优机制,通过不断缩小搜索区域进而达到最优区域范围,使其种群不断靠近最优区域的\delta邻域。如下图所示:

 通过上图,可知种群个体不断在搜索区域搜寻,随着搜寻次数的增加,搜索区域面积在逐渐减少。最后,种群个体都朝着最优区域前进,落在邻域内,这样一个过程就完成了差分进化算法的内部进化机制。

至于差分进化算法的原理,这里就不再过多阐述。接下来将阐述如何运用java的面向对象思维,编写程序!

二、差分进化算法需要实现的方法部分

对于差分进化算法,需要经过初始化种群、保存初始种群下的当前最优值、变异、交叉、选择、保存全局最优值,因此可以将其看作面向对象的方法,其中种群中的种群数、个体、变异因子、交叉因子看作是面向对象的属性

所以,将种群数、个体、变异因子、交叉因子编写成成员变量如下:

	//初始化参数--以公共变量为主--所有方法都可以访问public int Np=10;  		//种群数量public int D=2;  		//个体维度---维数越高收敛度就会下降----多维函数建立public  double F=0.5;		 //变异因子public  double Cr=0.95;     // 交叉概率 ---在这里取1收敛速度快,为什么?public  double xmax=1;	 //基向量的最大值 ----根据函数的自变量建立每个区间的初始值(改进)public  double xmin=-1;    //基向量的最小值

将当前最优值、变异、交叉、选择、保存全局最优值看作成面向对象方法

// 初始化种群public void Init(){Random r=new Random();double d1 = r.nextDouble();for (int i=0;i<Np;i++)for(int j=0;j<D;j++)X[i][j]=xmin+(xmax-xmin)*d1;this.setX(X);}//保存当前最优值public void save_best(){X=this.getX();best=X[0];for(int i=1;i<Np;i++){if(cal_fitness(best)<cal_fitness(X[i]))best=X[i];}this.setBest(best);}//变异操作public void variated(){X=this.getX();Random r=new Random();for(int i=0;i<Np;i++){int r0=0,r1=0,r2=0;for(int j=0;j<D;j++){if(r2==i||r1==i||r0==i||r0==r1||r0==r2||r1==r2)  //做基变量的的互异问题r0=r.nextInt(Np);r1=r.nextInt(Np);r2=r.nextInt(Np);V[i][j]=X[r0][j]+(X[r1][j]-X[r2][j])*F;  //变异//防止越界;检查是否越界if(V[i][j]<xmin)     V[i][j]=xmin;if(V[i][j]>xmax)V[i][j]=xmax;}}this.setV(V);}//交叉操作public void cross(){X=this.getX();V=this.getV();Random r=new Random();for(int i=0;i<Np;i++){for(int j=0;j<D;j++){int jrand=r.nextInt(D);if(r.nextDouble()<Cr || j==jrand)U[i][j]=V[i][j];elseU[i][j]=X[i][j];}}this.setU(U);}// 选择操作public void select(){X=this.getX();U=this.getU();for(int i=0;i<Np;i++){if(cal_fitness(U[i])<cal_fitness(X[i]))X[i]=U[i];elseX[i]=X[i];}this.setX(X);}//全局最优值保存public void gobal_solve(){best=this.getBest();X=this.getX();for(int i=0;i<Np;i++){if(cal_fitness(X[i])<cal_fitness(best))best=X[i];}this.setBest(best);best_fitness=cal_fitness(best);System.out.println("最优解:"+best[0]+", "+best[1]);System.out.println("最优值:"+best_fitness);System.out.println("----------------------------");}

而其中不同的方法,需要进行相互调用,而创建的void方法需要对其返回值需要保存到提前开创的存储空间:

//创建储存种群的矩阵private double X[][]=new double[Np][D];  //存放初始个体以及子代个体private double V[][]=new double[Np][D];  // 存放变异个体private double U[][]=new double[Np][D];  //存放交叉个体private double best_fitness;private double best[]=new double[D];      // 保存最优个体/*复制个体及种群---其中的X,V,U,best_fitness,best属于私有的属性,不能独自获取,需要创建一个公有访问方法*/public double[][] getX(){return X;}public void setX(double[][] X){for(int i=0;i<Np;i++)for(int j=0;j<D;j++)this.X[i][j]=X[i][j];}public double[][] getV(){return V;	}public void setV(double[][] V){for(int i=0;i<Np;i++)for(int j=0;j<D;j++)this.V[i][j]=V[i][j];}public double[][] getU(){return U;}public void setU(double[][] U){for(int i=0;i<Np;i++)for(int j=0;j<D;j++)this.U[i][j]=U[i][j];}

然后开创好空间、创建方法、设置成员变量之后,创建函数:

	// 创建测试函数public double cal_fitness(double x[]){double y;y=x[0]*x[0]+x[1]*x[1]-2;return y;		}

函数可以根据自己的需求进行修改!

之后,创建主方法,调用各子方法,运行差分进化算法的整个过程:

	public static void main(String[] args){// 创建对象Tradition_DE g=new Tradition_DE();int iter=0;g.Init();while (iter<1000){//g.DE();g.variated();g.cross();g.select();g.gobal_solve();iter++;}}

三、运行结果

最优解:0.0, 0.0
最优值:-2.0
----------------------------
最优解:0.0, 0.0
最优值:-2.0
----------------------------

点击下方蓝色字体链接,获取源代码:

java编写传统差分进化算法

相关文章:

如何使用java编写差分进化算法

差分进化算法属于一种进化算法&#xff0c;以全局最优性、收敛速度快等特点&#xff0c;得到很多学者的关注&#xff0c;并将其扩展到参数优化、数值优化、工程优化、路径优化、机器学习等一系列研究中。 而差分进化算法的原理即过程又是什么呢&#xff1f; 一、什么是差分进…...

Enterprise:如何在 Elastic 企业搜索引擎中添加对更多语言的支持

作者&#xff1a;Ioana-Alina Tagirta Elastic App Search 中的引擎&#xff08;engines&#xff09;使你能够索引文档并提供开箱即用的可调搜索功能。 默认情况下&#xff0c;引擎支持预定义的语言列表。 如果你的语言不在该列表中&#xff0c;此博客将说明如何添加对其他语言…...

SqlServer数据库中文乱码问题解决方法

这个问题在网上找了很多资料都没找到真正解决问题的办法&#xff0c;最终去了官网&#xff0c;终于找到问题的答案了&#xff0c;整理出来做个记录。 问题描述&#xff1a; 项目中遇到一个问题&#xff0c;sqlserver中的数据是ok的&#xff0c;结果保存到mysql中是乱码&#…...

跨域的五种最常见解决方案

在开发Web应用程序时&#xff0c;一个常见的问题是如何处理跨域请求。跨域请求是指来自不同源的请求&#xff0c;这些请求可能会受到浏览器的限制而不能被正常处理。在这篇文章中&#xff0c;我们将探讨跨域请求的常见解决方案&#xff0c;并了解每种解决方案的优缺点。 一、J…...

作为一个C++新手,我感兴趣的C++开源项目

2023年4月30日&#xff0c;周日晚上。 昨天完成了一个C项目后&#xff0c;想再开始一个C项目&#xff0c;但不知道做什么&#xff0c;于是决定看看有什么好的C开源项目。 今晚在网上逛了一圈后&#xff0c;发现了好多有趣的C开源项目。 参考文章&#xff1a; GitHub Top 10 …...

杭州云降价只是敲锣

1. 陈年旧事 大约是2015年&#xff0c;某友商宣布存储免费&#xff0c;当时我们公司如临大敌&#xff0c;我也被拽过去开会。后来我们才发现……对方的套路是&#xff1a; 文件存储原始收费是一毛钱。文档存储免费的条件是&#xff0c;需要客户当月有一次下载文件的行为才能免费…...

RabbitMQ笔记

一、MQ与RabbitMQ概述 1. MQ简述 MQ&#xff08;Message Queue&#xff09;消息队列&#xff0c;是基础数据结构中 “先进先出” 的一种数据结构&#xff0c;也是在消息的传输过程中保存消息的容器&#xff08;中间件&#xff09;&#xff0c;多用于分布式系统之间进行通信。 …...

【Latex】如何在表格中使用footnote

Latex table cell中是不支持\footnote的。 如果你在table中用\footnote&#xff0c;那么要么这个脚注根本不显示出来&#xff0c;要么就会出现计数出错等问题。总之非常麻烦。 解决策略 笔者在搜集大量资料后&#xff0c;也并没有找到一种“完美的”解决方案。我们只能用一些…...

设计师常用的素材网站有哪个推荐

即时设计资源社区聚集了许多优秀的创作者&#xff0c;分享了大量的优质资源。 目前&#xff0c;社区资源数量已达到10000&#xff0c;包含图标、插画、原型、设计作品等多个素材类别。这些优秀的设计作品降低了设计师思维的成本&#xff0c;成为设计师的宝藏材料网站。 即时设…...

jmeter常用的命令行参数有哪些?常用的jmeter命令行如何编写

目录&#xff1a;导读 引言 一、JMete执行方式 二、JMete非GUI运行优点 三、jmeter非GUI运行参数 四、jmeter非GUI运行命令 4.1非GUI基本命令格式&#xff1a; 4.2非GUI并生成html报告基本命令格式 结语 引言 你是否在使用JMeter进行负载测试时感到手忙脚乱&#xff1…...

APP渗透—查脱壳、反编译、重打包签名

APP渗透—查脱壳、反编译、重打包签名 1. 前言1.1. 其它 2. 安装工具2.1. 下载jadx工具2.1.1. 下载链接2.1.2. 执行文件 2.2. 下载apktool工具2.2.1. 下载链接2.2.2. 测试 2.3. 下载dex2jar工具2.3.1. 下载链接 3. 查壳脱壳3.1. 查壳3.1.1. 探探查壳3.1.2. 棋牌查壳 3.2. 脱壳3…...

【贪婪技术】

目录 知识框架No.1 贪婪技术一、问题引入二、基本思想三、问题实例&#xff1a;连续背包问题 No.2 最小生成树问题一、基本思想二、Prim算法1、主要思想和步骤2、算法效率 三、Kruskal算法1、主要思想和步骤 No.3 Dijkstra算法一、主要思想二、问题实例&#xff1a; No.4 哈夫曼…...

谈「效」风生 | 如何找到现有研发体系的「内耗问题」?

#第3期&#xff1a;如何找到现有研发体系的「内耗问题」&#xff1f;# 在上一期《谈到提升效能&#xff0c;我们应该如何下手&#xff1f;》我们聊到开始做研发效能的四个要点&#xff1a;评估现有流程、引入自动化工具、建立度量指标、持续改进。本期就围绕「评估现有研发体系…...

Linux第四章

文章目录 前言一、快捷键小技巧二、软件安装三、systemctl控制软件启动关闭四、软链接五、日期和时区六、ip地址和主机名七、配置linux固定ip地址八、网络请求和下载九、端口十、进程管理十一、主机状态监控十二、环境变量十三、linux文件的上传和下载十四、压缩和解压总结 前言…...

HCIA-RS实验-路由配置-静态路由缺省路由

在计算机网络中&#xff0c;路由器是实现数据包转发的重要设备。它通过查找路由表中的路由信息&#xff0c;将数据包从源地址转发到目标地址。而静态路由和缺省路由则是路由表中的两种重要信息&#xff0c;下面我们来详细了解一下它们的概念、特点和应用。 目录 简述 一、静态…...

Unity API详解——Quaternion类

Quaternion类又称四元数&#xff0c;由x、y、z和w这4个分量组成&#xff0c;属于struct类型。在Unity中&#xff0c;用Quaternion来存储和表示对象的旋转角度。Quaternion的变换比较复杂&#xff0c;对于GameObject一般的旋转及移动&#xff0c;可以用Transform中的相关方法实现…...

8个免费的PNG素材网站推荐

很多设计小白都不知道什么是PNG。事实上&#xff0c;PNG是一种支持透明度的图像格式。当你想在设计中将图像与背景或文本混合时&#xff0c;它就会派上用场。 如果你没有时间为你正在处理的设计创建透明的PNG图像&#xff0c;你也可以使用我收集的PNG素材网站&#xff0c;以便…...

ChatGPT技术原理 第二章:自然语言处理基础

目录 2.1 语言模型 2.3 词嵌入 2.4 注意力机制 2.5 生成式模型 2.1 语言模型...

国民技术N32G430开发笔记(8)- 内部Flash的读写操作

N32G430 内部Flash的读写操作 1、主存储区最大为 64KB&#xff0c;也称作主闪存存储器&#xff0c;包含 32 个 Page&#xff0c;用于用户程序的存放和运行&#xff0c;以及数 据存储。 每一页的大小为2K字节 2、IAP 升级我们将64K的flash分区如下&#xff1a; Boot 0x800000…...

JVM 基本知识

目录 前言 一、JVM 内存区域划分 1.1 程序计数器 1.2 栈 1.3 堆 1.4 方法区 二、 JVM 类加载机制 2.1 类加载需要经过的几个步骤 2.1.1 Loading - 加载 2.1.2 Linking - 连接 2.1.3 initialization&#xff08;初始化&#xff09; 小结 经典面试题 三、JVM 垃圾…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...