差分优化算法

您所在的位置:网站首页 边界条件处理方法有哪几种 差分优化算法

差分优化算法

2024-01-25 16:44| 来源: 网络整理| 查看: 265

🍎道阻且长,行则将至。🍓

目录 一、DE1.步骤2.特点 二、DE Optimiza1.函数最小值问题2.差分进化算法求解2.Java 实现与结果绘图

一、DE

差分进化算法是一种基于群体智能的优化算法,由Storn和Price于1995年提出,最早用来解决切比雪夫多项式问题。它采用实数编码方式,通过变异、交叉和选择等操作,使种群逐渐向全局最优解收敛。 在这里插入图片描述

1.步骤

差分进化算法的主要步骤如下:

初始化参数:设定种群规模 NP,变异因子 F,交叉概率 CR,个体维度 D,决策空间上下界 Xu 和Xl,终止条件等。初始化种群:在决策空间内随机生成NP个D维的个体作为初始种群X。种群变异:对每个个体X(i),随机选择三个不同的个体X(r1),X(r2),X(r3),并计算变异向量 V ( i ) = X ( r 1 ) + F ∗ ( X ( r 2 ) − X ( r 3 ) ) V(i) = X(r_1) + F * (X(r_2) - X(r_3)) V(i)=X(r1​)+F∗(X(r2​)−X(r3​))。种群交叉:对每个个体X(i)和变异向量V(i),按照交叉概率 CR 进行交叉操作,生成向量 U(i)。交叉操作的方法有多种,一种常用的方法是二项式交叉,即对每个维度 j,如果 rand(j) // 待优化的函数 return Math.sin(x * x + y * y) / (x * x + y * y + 1); } static int popSize = 100; // 种群大小 static double F = 0.5, CR = 0.1; // 差分进化算法参数0.5 static int maxGen = 100; // 最大迭代次数 static double eps = 1e-8; // 终止条件 static double[][] pop = new double[popSize][2]; // 种群 static double[] fit = new double[popSize]; // 种群适应度 static double[] best = new double[2]; // 最优解 static double bestFit; // 最优解的适应度 public static void main(String[] args) { // 初始化种群 for (int i = 0; i // 计算种群适应度 for (int i = 0; i if (fit[i] double[] trial = new double[2]; // 差分操作 int r1, r2, r3; do { r1 = (int) (Math.random() * popSize); } while (r1 == i); do { r2 = (int) (Math.random() * popSize); } while (r2 == i || r2 == r1); do { r3 = (int) (Math.random() * popSize); } while (r3 == i || r3 == r1 || r3 == r2); for (int j = 0; j if (Math.random() trial[j] = pop[i][j]; } } // 选择操作 double trialFit = f(trial[0], trial[1]); if (trialFit StdDraw.clear(); StdDraw.setXscale(a, b); StdDraw.setYscale(c, d); StdDraw.setPenRadius(0.001); StdDraw.setPenColor(StdDraw.BLACK); StdDraw.line(a, 0, b, 0);//x StdDraw.line(b-0.1, 0.1, b, 0); StdDraw.line(b-0.1, -0.1, b, 0); StdDraw.line(0, a, 0, b);//y StdDraw.line(0.1, b-0.1, 0, b); StdDraw.line(-0.1, b-0.1, 0, b); StdDraw.square(0, 0, 1); StdDraw.square(0, 0, 2); StdDraw.square(0, 0, 3); StdDraw.square(0, 0, 4); StdDraw.setPenRadius(0.01); StdDraw.setPenColor(StdDraw.RED); StdDraw.point(best[0], best[1]); StdDraw.setPenRadius(0.005); StdDraw.setPenColor(StdDraw.BLUE); for (int i = 0; i // break; } } } }

在这里插入图片描述

在这里插入图片描述

☕物有本末,事有终始,知所先后。🍭

🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3