QPSO Algorithm

article/2025/9/17 19:30:00

QPSO Algorithm

C#语言.NetFramwork4.6.1平台实现(需了解QPSO算法原理,可参考清华大学孙俊教授编写的教材《量子行为粒子群优化原理及其应用》)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Quantum_Behavioral_Particle_Swarm_Algorithm
{public struct Particle  //定义粒子的结构体{public double[] x;//粒子当前位置public double[] pbest;//粒子的个体最好位置public double bestfitness;//粒子个体最好位置适应值public double fitness;//粒子的当前最好位置适应值}public class QPSO_Test{//全局变量定义readonly int popsize = 20;//群体规模readonly static int dimension = 30;//问题维数readonly static int runno = 50;//运行次数readonly int Maxiter = 2000;//最大迭代次数double irange_l = 15;//位置初始化下界double irange_r = 30;//位置初始化上界double xmin = -100;//搜索上界double xmax = 100;//搜索下界double[] gbest = new double[dimension];//全局最优解double gbestfitness=0;//全局最优值Random rand = new Random();//随机数产生器public static double[] data = new double[runno];//存储每次运行后的结果public static double[] gdata = new double[runno];//种群迭代结果存储/// <summary>/// 标准测试函数Sphere函数定义/// </summary>/// <param name="x">可行解</param>/// <returns>函数值</returns>double Fsphere(double[] x){int i;double value;value = 0;for (i = 0; i < dimension; i++){value += Math.Pow(x[i], 2);}return value;}/// <summary>/// 标准测试函数Rosenbrock函数的定义/// </summary>/// <param name="x">可行解</param>/// <returns>函数值</returns>double Frosenbrock(double[] x){int i;double value;value = 0;for (i = 0; i < dimension-1; i++){value += 100 * Math.Pow((x[i + 1] - x[i] * x[i]), 2) + Math.Pow((x[i] - 1), 2);}return value;}/// <summary>/// 程序初始化定义/// </summary>/// <param name="population">粒子群种群</param>void Initiate(Particle[] population){int i, j;for (i = 0; i < population.Length; i++){population[i].x = new double[dimension];population[i].pbest = new double[dimension];for (j = 0; j < dimension; j++){//粒子当前位置的初始化population[i].x[j] = rand.NextDouble() * (irange_r - irange_l) + irange_l;//粒子当前最好位置的初始化population[i].pbest[j] = population[i].x[j];}//粒子当前位置的适应值population[i].fitness = Frosenbrock(population[i].x);//粒子个体最好位置的适应值population[i].bestfitness = population[i].fitness;}}/// <summary>/// 更新粒子群全局最好位置/// </summary>/// <param name="population">粒子群</param>/// <returns>最好解索引下标</returns>int Globalbest(Particle[] population){int i, flag;double s = 0;s = population[0].fitness;flag = 0;for (i = 1; i < population.Length; i++){if (population[i].fitness < s){s = population[i].fitness;flag = i;}}return flag;}/// <summary>/// 主程序/// </summary>public void RunAlgorithm(){Particle[] swarm = new Particle[popsize];//定义粒子群//其他变量int i, k, t, g, run;//run:运行次数循环下标    k:维数循环下标  t:迭代次数循环下标  i:种群循环下标  g:最好位置粒子下标 double a, tmp, fi1, fi2, u, v, z, b, p;//a:收缩-扩张系数值 tmp:临时局部变量   p:吸引势量子  fi1、fi2、u、z:随机数  b:特征长度  v:随机对数double[] mbest = new double[dimension];//每维平均位置double[] gbest = new double[dimension];//全局最好粒子//循环迭代寻优for (run = 0; run < runno; run++){Initiate(swarm);//初始化群体//求全局最好位置粒子下标g = Globalbest(swarm);for (k = 0; k < dimension; k++){gbest[k] = swarm[g].pbest[k];}gbestfitness = swarm[g].bestfitness;//初始化最优值的变量//算法迭代开始int j = 0;for (t = 0; t < Maxiter; t++){//计算mbestfor (k = 0; k < dimension; k++){tmp = 0;for (i = 0; i < popsize; i++){tmp += swarm[i].pbest[k];}mbest[k] = 1.0 * tmp / popsize;}//收缩-扩张系数值的计算a = (1.0 - 0.5) * (Maxiter - t) / Maxiter + 0.5;//群体更新for (i = 0; i < popsize; i++){for (k = 0; k < dimension; k++){fi1 = rand.NextDouble();fi2 = rand.NextDouble();p = 1.0 * (fi1 * swarm[i].pbest[k] + fi2 * gbest[k]) / (fi1 + fi2);u = rand.NextDouble();b = a * Math.Abs(mbest[k] - swarm[i].x[k]);v = Math.Log(1.0 / u);z = rand.NextDouble();//更新粒子位置if (z < 0.5)swarm[i].x[k] = p + b * v;elseswarm[i].x[k] = p - b * v;//粒子位置限制在搜索范围内if (swarm[i].x[k] < xmin)swarm[i].x[k] = xmin;if (swarm[i].x[k] > xmax)swarm[i].x[k] = xmax;}swarm[i].fitness = Frosenbrock(swarm[i].x);//粒子当前位置适应值if (swarm[i].fitness < swarm[i].bestfitness)//更新粒子个体最好位置{for (k = 0; k < dimension; k++){swarm[i].pbest[k] = swarm[i].x[k];}swarm[i].bestfitness = swarm[i].fitness;}if (swarm[i].bestfitness < gbestfitness)//更新粒子全局最好位置{for (k = 0; k < dimension; k++){gbest[k] = swarm[i].pbest[k];}gbestfitness = swarm[i].bestfitness;}}if ((t+1) % 40 == 0){gdata[j++] = gbestfitness;}}data[run] = gbestfitness;}}/// <summary>/// 算法运行结果/// </summary>/// <returns>最优值</returns>public double[] Value(){return data;}/// <summary>/// 种群迭代结果/// </summary>/// <returns>迭代值</returns>public double[] GValue(){return gdata;}}
}

运行结果图

运用Chart控件可将方法Value()与方法GValue()中的结果输出,运行过程及结果如下图所示。
算法运行正常
算法迭代过程


http://chatgpt.dhexx.cn/article/IbjpbxAm.shtml

相关文章

微信小程序使用ECharts的示例详解

目录 安装 ECharts 组件使用 ECharts 组件图表延迟加载 echarts-for-weixin 是 ECharts 官方维护的一个开源项目&#xff0c;提供了一个微信小程序组件&#xff08;Component&#xff09;&#xff0c;我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。 echarts-fo…

微信小程序案例---本地生活

文章目录 首页效果以及实现步骤接口地址新建项目并梳理项目结构配置导航栏效果配置 tabBar 效果实现轮播图效果实现九宫格效果实现图片布局 本地生活&#xff08;列表页面&#xff09;演示页面效果以及主要功能列表页面的 API 接口页面导航并传参获取并渲染列表数据上拉触底时加…

微信小程序--操作示例2

微信小程序--商城首页 我们首先有一个商城的接口 调用商城中首页所需要的一些数据 例如&#xff1a; onLoad: function () {var that this;//请求服务器时间戳wx.request({url: http://www.tp.com/index.php?mApi&cBase&agetServerTime, //请求地址success: fu…

微信小程序官方示例

微信小程序官方示例 下载微信客户端版本号&#xff1a;6.3.27 及以上&#xff0c;只有小程序绑定的开发者有权限扫码体验。下载源码 版本20161010

什么是云开发?小程序实例超详细演示~

学习视频&#xff1a; 八分钟读懂云开发_哔哩哔哩_bilibili小姐姐带你30分钟创建并上线小程序项目【云开发实战】_哔哩哔哩_bilibili 参考资料&#xff1a; 微信开放文档 (qq.com)云开发_百度百科 (baidu.com) 推荐阅读&#xff1a; 云原生推动全云开发与实践 - 知乎 (zhihu.co…

微信小程序入门教程+案例demo

微信小程序入门教程案例demo 尊重原创&#xff0c;转载请注明出处&#xff1a;原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态&#xff0c;——微信小程序开发也就那么回事。你只需要一点点css&#xff08;真的只要一点点&#xff09;的基础就可以了。 认清…

微信小程序开发 | API应用案例(下)

API应用案例&#xff08;下&#xff09; 6.1【案例5】模拟时钟6.1.1 案例分析6.1.2 前导知识6.1.3 钟表页面布局6.1.4 钟表页面绘制 6.2【案例6】罗盘动画6.2.1 案例分析6.2.2 前导知识6.2.3 设计罗盘页面布局6.2.4 手指触摸旋转罗盘6.2.5 单击按钮操作罗盘 6.3【案例7】文件上…

使用微信小程序开发弹出框应用实例详解

1 2 3 4 5 view class"container" class"zn-uploadimg"> <button type"primary"bindtap"showok">消息提示框</button> <button type"primary"bindtap"modalcnt">模态弹窗</button&g…

小程序代码示例整理

以下是分享了一部分小程序的代码示例&#xff0c;希望能够帮助到你们&#xff0c;抓紧收藏吧 微信小程序知乎日报 https://github.com/myronliu347/wechat-app-zhihudaily 微信小程序购物车案例 https://github.com/SeptemberMaples/wechat-weapp-demo 微信小程序–聊天室…

微信小程序开发实例

一、注册小程序账号 1.进入微信公众平台&#xff08;https://mp.weixin.qq.com/&#xff09;&#xff0c;注册小程序账号&#xff0c;根据提示填写对应的信息即可。2.注册成功后进入首页&#xff0c;在 小程序发布流程->小程序开发与管理->配置服务器中&#xff0c;点击…

微信小程序之登录界面示例

注&#xff1a;这里使用的是原生微信小程序 微信小程序之登录界面示例 使用wxss和wxml index.wxml文件中代码 <view class"v1"><!-- v2父容器 子view使用绝对布局 --><view class"v2"><view class"dltext">登录<…

一个微信小程序开发示例

一个微信小程序开发示例&#xff08;豆瓣电影&#xff09; 新版本&#xff08;不包含工作流&#xff09;请移步至&#xff1a;https://github.com/zce/weapp-douban当前仓库会暂缓更新&#xff0c;主要留下来给大家答疑需要基础教程的朋友们稍等一阵吧&#xff0c;目前有计划重…

微信小程序实例系列

实战 【微信小程序】---- redux 在原生微信小程序的使用实例【微信小程序】---- weapp-redux的使用文档【微信小程序】---- Promise.then(success, fail)执行顺序的问题【微信小程序】---- 监听页面停止滚动【微信小程序】---- CustomBar 公用组件封装微信小程序----开发rui-s…

微信小程序作品实例

目录 简介 作品详情 作品代码 一、主页界面 1、WXML文件: 2、WXSS文件: 3、JS文件 4、JSON文件: 5、补充 二、购物车界面 1、WXML文件 3、JS文件 4、JSON文件 三、分类界面和个人中心界面 简介 这是我在学习完微信小程序后&#xff0c;写的一个小案例&#xff0c;是…

微信小程序开发之——微信小程序示例

一 概述 除了WeUI组件库&#xff0c;官方进行了扩展&#xff0c;包含组件库、扩展能力、接口和云开发示例 项目地址在线预览码预览界面miniprogram-demo 二 如何使用小程序示例 2.1 小程序示例——tabs 官方示例下的tabs位置 miniprogram-demo-master\miniprogram\page\we…

微信小程序相关操作示例

微信小程序相关操作示例 wxml-写页面for指令绑定事件数据绑定获取当前用户相关信息的方式跳转展示用户信息表单提交键盘输入的控制 js-写方法初始数据&#xff08;字典&#xff09;&#xff1a;方法函数&#xff1a;存储图片到云开发平台存储访问服务器的request方式获取当前用…

小程序-demo:小程序示例

ylbtech-小程序-demo&#xff1a;小程序示例 1.返回顶部 0、 1、app.js const openIdUrl require(./config).openIdUrlApp({onLaunch: function () {console.log(App Launch)},onShow: function () {console.log(App Show)},onHide: function () {console.log(App Hide)},glo…

Toast与Snackbar的那点事

背景 Toast是Android平台上的常用技术。从用户角度来看&#xff0c;Toast是用户与App交互最基本的提示控件&#xff1b;从开发者角度来看&#xff0c;Toast是开发过程中常用的调试手段之一。此外&#xff0c;Toast语法也非常简单&#xff0c;仅需一行代码。基于简单易用的优点…

Flutter之SnackBar原理详解

初次学习SnackBar控件&#xff0c;第一反应就是这货怎么感觉跟Android的Toast一样&#xff01;使用起来确实简单&#xff0c;但是其内部原理扒拉出来到时能学到一点东西&#xff0c;下面就细细的剖析这个组件。 Snackbar的作用就是在屏幕的底部展示一个简短的消息,与此同时&am…

Android Material Design 系列之 Snackbar 使用详解

前言 本文是 Material Design 系列第二篇&#xff1a;SnackBar 的提出实际上介于 Toast 和 Dialog 的中间产物&#xff0c;SnackBar 提供有关操作的轻量级反馈&#xff0c;它们在移动设备的屏幕底部显示一条简短消息。SnackBar 出现在屏幕上所有其他元素的上方&#xff0c;一次…