差分进化算法
来源:互联网 发布:微信域名检测原理 编辑:程序博客网 时间:2024/06/08 12:19
差分进化算法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Windows.Forms;namespace DifferentialEvolution{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // min{(x0+10x1)^2+5(x2-x3)^2+(x1-2x2)^4+10(x0-10x3)^4} int NP = 100;//种群数 int D = 4;//解向量维数 int T = 50;//进化代数 int L = -10;//变量下限 int U = 10;//变量上限 double F = 0.5;//缩放因子 //double Cr = 0.5;//杂交概率 double Cr; double Cr_max = 0.9; double Cr_min = 0.5; int counter = 0; Random rd = new Random(); Tools ts = new Tools(); //随机生成初代种群 List<double[]> X = new List<double[]>(NP); List<double[]> temp_X = new List<double[]>(NP); int temp_NP = 0; do { double[] x = new double[D]; for (int i = 0; i < D; i++) { x[i] = L + rd.NextDouble()*(U - L); } if (!X.Contains(x)) { X.Add(x); temp_NP++; } } while (temp_NP < NP); //初代种群中最优个体 double[] best = new double[D]; Array.Copy(X[0],best,D);//这里best变化对X[0] ts.BestSolve(ref best, X);//------------------------------------------------------ string bestsovle = null; foreach (double num in best) { bestsovle += num + " "; } MessageBox.Show("初代最优个体" + bestsovle);//------------------------------------------------------ do { //对每个个体进行变异杂交操作 temp_X.Clear();//清空临时集合 Cr = Cr_min + (Cr_max - Cr_min)*counter/T;//随counter增加而增大 for (int i = 0; i < NP; i++) { double[] x = new double[D]; //x = X[i];直接指向X[i]的地址,对x操作,X[i]也没变化,初代种群被破坏 double[] temp_x = X[i];//从集合中依次取出每个个体 Array.Copy(temp_x, x, D); //随机选取三个个体 int[] randomIndex = new int[3]; randomIndex = ts.RandomChoose(3, NP, i); double[] x1 = X[randomIndex[0]]; double[] x2 = X[randomIndex[1]]; double[] x3 = X[randomIndex[2]]; #region //变异算子 double[] V = new double[D]; //-----DE/current-to-best/1----- for (int j = 0; j < D; j++) { V[j] = x[j] + F*(best[j] - x[j]) + F*(x1[j] - x2[j]); } //-----DE/best/1----- //for (int j = 0; j < D; j++) //{ // V[j] = best[j] + F * (x2[j] - x3[j]); //} //-----DE/rand/1----- //for (int i = 0; i < D; i++) //{ // V[i] = x1[i] + F * (x2[i] - x3[i]); //} //修补算子 for (int j = 0; j < D; j++) { if (V[j] < L) { V[j] = L; } else if (V[j] > U) { V[j] = U; } } //杂交算子 //保证个体进化,先随机替换一位 int temp_index = rd.Next(D); x[temp_index] = V[temp_index]; for (int j = 0; j < D; j++) { double temp = rd.NextDouble(); if (temp >= Cr) { x[j] = V[j]; } } #endregion temp_X.Add(x); } //产生新种群 X.Clear(); ts.Copy(temp_X, X); //新种群中的最优个体 ts.BestSolve(ref best, X); bestsovle = null; foreach (double num in best) { bestsovle += num + " "; } MessageBox.Show(counter + 1 + "代最优个体\n" + bestsovle); counter++; } while (counter < T); string s = null; for (int i = 0; i < best.Length; i++) { s += best[i] + " "; } MessageBox.Show(s); } }}
阅读全文
0 0
- 差分进化算法
- 差分进化算法
- 差分进化算法
- 差分进化算法
- 差分进化算法
- 差分进化算法DE
- 差分进化算法DE
- 智能算法之微分进化算法(差分进化算法)
- 差分进化算法(Differential Evolution)
- 差分进化算法(Differential Evolution)
- 差分进化算法(Differential Evolution)
- 优化算法——差分进化算法(DE)
- 遗传算法与差分进化算法总结比较
- 优化算法——差分进化算法(DE)
- 【DE算法】差分进化算法原理及python代码
- 差分进化算法(Differential Evolution) JAVA代码样例
- 带约束条件的差分进化算法(python实现)
- 差分进化g05测试代码
- 三行代码,让你的桌面图标再也不会被打乱
- [游戏数据表]泰拉瑞亚Terraria 全物品合成表
- PostgreSQL 性能优化方法
- SSH免密登录问题
- mac快捷键
- 差分进化算法
- 说说maven快照配置问题
- 2017-12-18作业 \t\n的运用
- C&C++图形图像处理开源库
- 阿里云服务器允许远程访问
- linux系统下数据库只有读的权限解决办法
- c语言操作符
- SCNN-用于时序动作定位的多阶段3D卷积网络
- Nngix反向代理