粒子群算法求解多元函数最值问题

一、简介

多元函数极值&最值问题通常使用导数/偏导数进行推导,这里尝试使用启发式算法进行求解近似最优解。选用粒子群算法进行求解,粒子群算法模仿鸟群觅食行为,核心思想是通过向距离食物最近的鸟集聚,不断更新速度和位置以达到最优解,即表现不好的个体通过向表现好的个体学习使得自身往好的方向转变,这里存在一个前提:所有鸟知道距离食物的远近,距离食物最近包含两部分:当前最近和历史最近。标准粒子群算法适合求解函数极值问题,在TSP、背包问题上多用混合型粒子群算法。算法详细介绍可参考【粒子群算法研究】。

二、粒子群算法求解

多元函数:y = (x1x_1x1​+x2x_2x2​)/(x12x_1^2x12​+x22x_2^2x22​+1)

粒子群编程求解

import pylab as mpl
import random import
matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 添加这条可以让图形显示中文def fitness(x):"""计算适应值:y = (x1+x2)/(x1**2+x2**2+1)"""x1 = x[0]x2 = x[1]y = (x1+x2)/(x1**2+x2**2+1)return ydef update(x, p, g, w, c1, c2, v_low, v_high, vi, d, x_low, x_up):'''更新速度和位置'''# 更新速度vi = w * vi + c1 * random.uniform(0, 1) * (p-x) + c2 * random.uniform(0, 1) * (g-x)for j in range(d):if vi[j] >v_high:vi[j] = v_highelif vi[j] < v_low:vi[j] = v_low# 更新位置x = x +vifor j in range(d):if x[j] > x_up[j]:x[j] = x_up[j]elif x[j] < x_low[j]:x[j] = x_low[j]return xif __name__ == '__main__':# 参数birdNum = 20  # 粒子数量w = 0.2  # 惯性因子c1 = 0.4  # 自我认知因子c2 = 0.4  # 社会认知因子# pBest, pLine = 0, []  # 当前最优值、当前最优解,(自我认知部分)# gBest, gLine = 0, []  # 全局最优值、全局最优解,(社会认知部分)v_low = -2 #速度约束v_high =2iterMax = 100  # 迭代次数iterI = 1  # 当前迭代次数bestfit = -100000  # 记录每代最优值#y = (x1+x2)/(x1**2+x2**2+1)d = 2 #函数变量个数x_low = [-10, -10]#变量范围x_up = [10, 10]#随机生成初始解xs = np.array([np.array([random.uniform(x_low[0],x_up[0]),random.uniform(x_low[1],x_up[1])])for i in range(birdNum)])v = np.array([random.uniform(v_low,v_high) for i in range(birdNum)])fits = np.array([fitness(x) for x in xs])fit = max(fits)x = xs[np.argmax(fits)]gBest = pBest = fit # 全局最优值、当前最优值gSolve = pSolve = x  # 全局最优解、当前最优解bestfit = []bestfit.append(gBest)while iterI <= iterMax:  # 迭代开始for i in range(birdNum):xs[i] = update(xs[i], pSolve, gSolve, w, c1, c2, v_low, v_high, v[i], d, x_low, x_up)fits[i] = fitness(xs[i])pBest, pSolve = max(fits), xs[np.argmax(fits)]if max(fits) >= gBest:gBest, gSolve = max(fits), xs[np.argmax(fits)]bestfit.append(gBest)print(iterI, gBest)  # 打印当前代数和最佳适应度值print(gSolve, pSolve)iterI += 1  # 迭代计数加一#迭代图plt.plot(range(1,len(bestfit)+1), bestfit)plt.xlabel("迭代次数")plt.ylabel("最优值")plt.show()

结果
yyy=0.7068,x1=0.8701,x2=0.8287x_1=0.8701,x_2=0.8287x1​=0.8701,x2​=0.8287

粒子群算法求解多元函数最值问题相关推荐

  1. 粒子群算法求解旅行商问题

    算法原理 旅行商问题是一个经典的NP问题,假设有N个城市,需要确定一个访问顺序,使得每个城市都访问一面,最后回到起点城市,且保证行走的总距离最短.        假设随机生成10个城市坐标,城市之间的 ...

  2. 粒子群算法求解带约束优化问题 源码实现

    算法原理 之前求解的无约束的问题. 粒子群算法求解无约束优化问题 源码实现 算法原理如下 今天讲解下求解约束优化的问题.该问题常用的方法是罚函数法.即如果一个解x不满足约束条件,就对适应度值设置一个惩 ...

  3. 粒子群算法求解四维病态方程

    粒子群算法求解四维病态方程 问题 求解 问题 min⁡f(x)=∑i=13[100(xi+1−xi2)2+(xi−1)2]xi∈[−30,30](i=1,2,3,4)\begin{aligned} \ ...

  4. 【微电网优化】基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题【含Matlab源码 2283期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题[含Matlab源码 2283期] 点击上面蓝色字体,直接付 ...

  5. 粒子群算法java_基于粒子群算法求解求解TSP问题(JAVA)

    一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

  6. 粒子群算法求解无时间窗口VRP问题

    """ 利用粒子群算法求解VRP问题:无时间窗口的路径优化问题 """ import math import random import n ...

  7. 粒子群算法求解物流配送路线问题(python)

    粒子群算法求解物流配送路线问题(python) 1.查找论文文献 找一篇物流配送路径优化+粒子群算法求解的论文 参考文献:基于混沌粒子群算法的物流配送路径优化 2.了解粒子群算法的原理 讲解通俗易懂, ...

  8. 粒子群算法求解旅行商问题TSP (JAVA实现)

    粒子群算法求解旅行商问题TSP 写在开头: 最近师妹的结课作业问我,关于使用粒子群求解TSP问题的思路.我想了想,自己去年的作业用的是遗传算法,貌似有些关联,索性给看了看代码.重新学习了一遍粒子群算法 ...

  9. 【优化求解】基于粒子群算法求解多目标优化问题matlab源码

    [优化求解]基于粒子群算法求解多目标优化问题matlab源码 1 算法介绍 1.1 关于速度和位置 粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快 ...

最新文章

  1. S-T平面图中利用最短路求最小割(BZOJ 1001)
  2. 数据统计之日增用户统计
  3. win2012服务器硬盘分区,Windows Server 2008/2012更改磁盘分区大小教程
  4. 表单必填_forms. 表单(中)
  5. tableau必知必会之通过 Tableau 计算挖掘数据真相
  6. 4.1.2 OS之文件逻辑结构(顺序文件、索引文件、索引顺序文件、多级索引顺序文件)关于数据库的索引如聚簇索引可以看一下索引文件例题的解析,感觉还是可以收获到东西的
  7. NGINX1.19安装手册
  8. [LeetCode]235.Lowest Common Ancestor of a Binary Search Tree
  9. 用循环输出以下数列:斐波那契数列(要输出20个数字)_Python学习之“为女朋友解释hash是个什么东西”
  10. 继淘宝特价版之后 闲鱼已向微信提交小程序申请
  11. 1054. 求平均值
  12. RegSetValueEx 计算WCHAR字符长度 wcslen
  13. 2008-8-26~2008-9-4 出差报告
  14. 我的第一个app:电信宽带密码一键获取客户端
  15. OSChina 周六乱弹 ——我的闺蜜是总统
  16. 【教程:利用Axure快速原型工具制作电影信息网站】——小白也会,傻瓜式做法,简易快速!!!可应对(毕业)课程设计喔!!
  17. springboot+vue实现excel导入-------去重
  18. 一道九宫格算法面试题
  19. linux刻录光盘空间不足,Linux下的光盘刻录技巧
  20. 计算机组成原理笔记|03存储系统

热门文章

  1. PPI的多模态融合预测
  2. Matlab论文插图绘制模板第28期—柱状图(带误差棒errorbar)
  3. python爬取公众号阅读量_公众号提升阅读量!免费推荐几个互阅推广平台.
  4. 怎么转换视频格式?腾讯视频qlv格式转换mp4方法
  5. 主引导记录(MBR)分析
  6. 将多个EXCEL表中部分固定单元格的内容整理提取到一张工作表中
  7. java sequencer_java sequencer播放列表
  8. 报表开发工具 Stimulsoft Reports V2022.3.5系列发布!
  9. 康蒂尼药业再次冲刺港股:9个月营收4.4亿 龙磐创投是股东
  10. 电机分类-电机在高空作业平台中的应用