pyswarm库是基于python的粒子群优化库,可以采用粒子群优化的方法对优化问题进行求解。

一.简单示例

为了说明如何最好地利用pyswarm,我们将从一个完整的示例开始,随后将逐步解释:

from pyswarm import psodef banana(x):x1 = x[0]x2 = x[1]return x1**4 - 2*x2*x1**2 + x2**2 + x1**2 - 2*x1 + 5def con(x):x1 = x[0]x2 = x[1]return [-(x1 + 0.25)**2 + 0.75*x2]lb = [-3, -1]
ub = [2, 6]xopt, fopt = pso(banana, lb, ub, f_ieqcons=con)# Optimum should be around x=[0.5, 0.76] with banana(x)=4.5 and con(x)=0

1.首先我们定义要最小化的目标函数,它应该定义为myfunction(x, *args, **kwargs)。换句话说,它的第一个参数是一个一维数组类对象,代表优化问题的决策变量,后面跟着任何其他(可选)参数和(同样是可选)关键字参数。函数应该返回最小化的单个标量值。在这个例子中,banana函数,就是我们的目标函数。

def banana(x):x1 = x[0]x2 = x[1]return x1**4 - 2*x2*x1**2 + x2**2 + x1**2 - 2*x1 + 5

2.当优化问题中包括约束条件时,可以选择添加约束条件函数。示例中con函数即代表约束条件函数,该函数的调用语法与目标函数相同,但返回一个值数组(即使其中只有一个值)。

def con(x):x1 = x[0]x2 = x[1]return [-(x1 + 0.25)**2 + 0.75*x2]

3.我们不是指定算法的起点,而是定义优化器允许搜索的输入变量的限制。lb和ub别代表下限和上限:

lb = [-3, -1]
ub = [2, 6]

4.设置好之后,我们就可以用如下的语句来调用优化器:

xopt, fopt = pso(banana, lb, ub, f_ieqcons=con)

使用f_ieqcons=con是为了告诉优化器有一个返回数组对象的约束函数。
优化完成后,pso会返回两个对象:最优决策变量值xopt和最优函数值fopt。

二.pso函数介绍

通过上述示例,我们对pyswarm库的使用有了一个简单的了解,下面我们再具体看看pso函数的完整形式:

pso(func, lb, ub, ieqcons=[], f_ieqcons=None, args=(), kwargs={},swarmsize=100, omega=0.5, phip=0.5, phig=0.5, maxiter=100, minstep=1e-8,minfunc=1e-8, debug=False)

在介绍时,我们参照标准粒子群算法中的速度更新公式:

1.ieqcons
类型为list,是长度为n的函数列表,符合约束条件的决策变量x必须使ieqcons[j] (x,*args)>=0.0。
2.f_ieqcons
类型为function,该函数返回一个1-D数组,符合约束条件的决策变量必须使该数组中的每个元素都大于或等于0.0。如果指定了f_iqcons,则忽略iqcons()(默认值:None)。
3.args
类型为tuple,用于向目标函数和约束函数传递额外参数。
4.kwargs
类型为dict,用于向目标函数和约束传递额外关键字参数。
5.swarmsize
类型为int,用于设置粒子的个数,默认为100。
6.omega
类型为scalar,用于设置粒子群算法中的惯性权重,惯性权重的大小表示了对粒子当前速度继承的多少,也就是上图速度更新公式中的ω。
7.phip
类型为scalar,用于调节粒子朝p_best(当前粒子的历史最优位置)方向飞行的权重,也就是上图速度更新公式中的c1。
8.phip
类型为scalar,用于调节粒子朝g_best(粒子群的历史最优位置)方向飞行的权重,也就是上图速度更新公式中的c2。
9.maxiter
类型为int,用于设置粒子群算法的最大迭代次数,默认为100。
10.minstep
类型为scalar,用于设置粒子移动位置的最小步长,默认为1e-8。
11.minfunc
类型为scalar,用于设置目标函数的最小改变值,默认为1e-8。
12.debug
类型为bool,用于设置是否显示每一步的迭代过程,默认为false。

三.工程实例

实例中有如何添加多个自定义约束的方法。

import numpy as np
from pyswarm import pso# Define the objective (to be minimize)
def weight(x, *args):H, d, t = xB, rho, E, P = argsreturn rho*2*np.pi*d*t*np.sqrt((B/2)**2 + H**2)# Setup the constraint functions
def yield_stress(x, *args):H, d, t = xB, rho, E, P = argsreturn (P*np.sqrt((B/2)**2 + H**2))/(2*t*np.pi*d*H)def buckling_stress(x, *args):H, d, t = xB, rho, E, P = argsreturn (np.pi**2*E*(d**2 + t**2))/(8*((B/2)**2 + H**2))def deflection(x, *args):H, d, t = xB, rho, E, P = argsreturn (P*np.sqrt((B/2)**2 + H**2)**3)/(2*t*np.pi*d*H**2*E)def constraints(x, *args):strs = yield_stress(x, *args)buck = buckling_stress(x, *args)defl = deflection(x, *args)return [100 - strs, buck - strs, 0.25 - defl]# Define the other parameters
B = 60  # inches
rho = 0.3  # lb/in^3
E = 30000  # kpsi (1000-psi)
P = 66  # kip (1000-lbs, force)
args = (B, rho, E, P)# Define the lower and upper bounds for H, d, t, respectively
lb = [10, 1, 0.01]
ub = [30, 3, 0.25]xopt, fopt = pso(weight, lb, ub, f_ieqcons=constraints, args=args)# The optimal input values are approximately
#     xopt = [29, 2.4, 0.06]
# with function values approximately
#     weight          = 12 lbs
#     yield stress    = 100 kpsi (binding constraint)
#     buckling stress = 150 kpsi
#     deflection      = 0.2 in

约束条件也可以写成如下形式:

# Setup the constraint functions
def yield_stress(x, *args):H, d, t = xB, rho, E, P = argsstrs = (P*np.sqrt((B/2)**2 + H**2))/(2*t*np.pi*d*H)return 100 - strsdef buckling_stress(x, *args):H, d, t = xB, rho, E, P = argsbuck = (np.pi**2*E*(d**2 + t**2))/(8*((B/2)**2 + H**2))strs = yield_stress(x, *args)return buck - strsdef deflection(x, *args):H, d, t = xB, rho, E, P = argsdefl = (P*np.sqrt((B/2)**2 + H**2)**3)/(2*t*np.pi*d*H**2*E)return 0.25 - defl...cons = [yield_stress, buckling_stress, deflection]...xopt, fopt = pso(weight, lb, ub, ieqcons=cons, args=args)

基于pyswarm库实现粒子群优化算法求解带约束的优化问题相关推荐

  1. 优化算法求解复杂约束问题策略(以粒子群算法为例讲解求解复杂约束问题的多种策略)

    优化算法求解复杂约束问题策略(以粒子群算法为例讲解求解复杂约束问题的多种策略)python实现     整个代码文字讲解共17页 提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 策略1:在位置更 ...

  2. 【路径规划】基于头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题附matlab代码

    1 内容介绍 本文主要研究广州番禺配送中心的车辆路径规划问题,首先针对之前车辆运行中的先送货后取货模式,产生车辆运行路线的迂回,以及车辆在回程中的空载,路径规划不合理,送货时间长的问题,采用集成的观点 ...

  3. 【运筹优化】SCSO沙丘猫群优化算法求解无约束多元函数最值(Java代码实现)

    文章目录 前言 优化目标 求解结果 搜索过程可视化 java算法代码 可视化代码 前言 本文以求解二元函数最小值为例,如果需要求解多元函数,只需要修改以下变量即可: varNum:变量维度数 ub和l ...

  4. 【运筹优化】SOA海鸥优化算法求解无约束多元函数最值(Java代码实现)

    文章目录 前言 优化目标 求解结果 搜索过程可视化 Java算法代码 可视化代码 前言 本文以求解二元函数最小值为例,如果需要求解多元函数,只需要修改以下变量即可: varNum:变量维度数 ub和l ...

  5. 【运筹优化】SSA樽海鞘优化算法求解无约束多元函数最值(Java代码实现)

    文章目录 前言 优化目标 求解结果 搜索过程可视化 Java算法代码 可视化代码 前言 本文以求解二元函数最小值为例,如果需要求解多元函数,只需要修改以下变量即可: varNum:变量维度数 ub和l ...

  6. 【运筹优化】SMO蜘蛛猴优化算法求解无约束多元函数最值(Java代码实现)

    文章目录 前言 优化目标 优化结果 迭代过程可视化 Java代码 可视化代码 优化流程(图太大了,所以放最后...) 前言 本文以求解二元函数最小值为例,如果需要求解多元函数,只需要修改以下变量即可: ...

  7. 基于多元宇宙优化算法的无线传感器网络覆盖优化

    文章目录 一.理论基础 1.节点覆盖模型 2.多元宇宙优化算法(MVO) 3.MVO算法伪代码 二.仿真实验与分析 三.参考文献 一.理论基础 1.节点覆盖模型 本文采取0/1覆盖模型,具体描述请参考 ...

  8. 【优化求解】基于自适应模拟退火粒子群优化算法求解单目标优化问题matlab代码

    1 简介 针对PSO算法在求解问题的优化问题中易陷入局部收敛且收敛速度较慢等缺陷,引入一种初始化改进策略,并将模拟退火算法与PSO算法相结合,提出了一种全新的算法.该算法将寻优过程分为两个阶段:为了提 ...

  9. 基于多目标算法的冷热电联供型综合能源系统运行优化 综合能源 冷热电三联供 粒子群算法 多目标优化 多目标粒子群 冷热电联供 综合能源系统 运行优化

    多目标粒子群 冷热电联供 综合能源系统 运行优化 关键词:综合能源 冷热电三联供 粒子群算法 多目标优化 参考文档:<基于多目标算法的冷热电联供型综合能源系统运行优化> 仿真平台:MATL ...

  10. 参考文档:《基于多目标算法的冷热电联供型综合能源系统运行优化》 多目标粒子群 冷热电联供 综合能源系统 运行优化

    多目标粒子群 冷热电联供 综合能源系统 运行优化 关键词:综合能源 冷热电三联供 粒子群算法 多目标优化 参考文档:<基于多目标算法的冷热电联供型综合能源系统运行优化> 仿真平台:MATL ...

最新文章

  1. 【Qt】Qt程序查看动态链接库(windows)
  2. Redis requires a monkey patched socket library to work with gevent
  3. 将SVG 图引入到HTML页面
  4. python中类的方法里面变量前加self与不加self的区别
  5. k8s学习笔记-调度之Affinity
  6. 基于CefSharp构建基于Chromium的应用程序
  7. mysql定时增量备份_Mysql日常自动备份和增量备份脚本
  8. php session页面传值,PHP session在页面间传递的问题
  9. 动态规划——小A点菜(洛谷 P1164)
  10. 关于lidroid xUtils 开源项目
  11. 2014——我们都任性过
  12. hasCode in Java
  13. struts2框架概述
  14. hive sql 怎么实现循环_shell中循环调用hive sql 脚本的方法
  15. jogbuild-common.xml:17: Cannot find /home/tsit/tio-software/jogamp/gluegen/make/gluegen-cpptasks.xml
  16. EXCEL批量删除行
  17. 减少手机页面跳转的方法(转)
  18. 英语影视台词---无敌破坏王2大脑互联网(2)(我完全被震惊了)
  19. 找准边界,吃定安全 | 高性能硬件防御问题难解?硬件加速引擎闪亮登场
  20. ORB-SLAM——a Versatile and Accurate Monocular SLAM System)

热门文章

  1. 机器学习原理与实践(Python版)
  2. HTML5如何把圆分成六等分,CSS八等分圆的实现示例_CSS教程_CSS
  3. Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
  4. cm11 android l,【鹰眼出品】安卓4.4.4 CM11已刷,流畅度爆表!《转》
  5. 复盘2020:那些崛起的公司
  6. 用Excel数据透视表的单字段透视功能统计各销售人员的销售总金额
  7. DCMM 与其他模型有何不同
  8. fences卸载_【设置方法】win10系统卸载fences的学习
  9. Vue验证座机号的同时验证手机号
  10. 常用MATLAB工具箱下载地址