启发式优化的Python包

MVMO的Python项目详细描述


均值-方差映射优化算法

MVMO是一个Python包,用于对凸性和/或线性可能不完全已知的约束和无约束优化问题执行启发式优化。该算法基于群优化原理,利用优化过程中最优解的均值和方差不断更新。注:由于这是一个启发式算法,它不提供最优解,而是近似最优解。然而,与传统的优化求解器相比,这是在非常快的时间内完成的。在

安装

MVMO可以从PyPI安装,方法是:

pip install MVMO

MVMO要求numpy和熊猫工作。在

使用

初始化

MVMO优化器可以使用参数iterationsnum_variation,和population\u size调用。这定义了MVMO的关键参数。在

定义目标函数

默认情况下,MVMO将目标函数优化为最小值。为了最大化,需要修改目标函数。用户可根据需要定义目标函数。示例中显示了这一点。MVMO包提供了Wikipedia中的以下测试函数基准测试:

  1. 罗森布鲁克
  2. 马提亚斯
  3. 展位
  4. 他妈的
  5. Easom公司

约束定义

约束可以是不平等或平等。约束作为dictionary对象传递,关键字为ineqeq或{},以表示指定的约束是不等式、等式还是函数定义。不等式和等式约束以str格式指定,并且必须遵循约定:

^{pr2}$

复杂的约束也可以定义为python函数。后面将展示如何使用MVMO包进行约束优化的示例。它使用所有三个约束定义。在

二进制和整数变量

MVMO还提供了在优化决策中定义二进制和整数变量的能力。这可以通过在optimize函数中使用binaryinteger关键字来指定变量的索引。这将在后面的示例中显示。在

优化

可以在optimizer上调用optimize()方法来执行优化。它在优化完成后返回一个resdictionanry对象。其中包括:

  1. objective:提供最佳目标函数值,以及它是从何处获得的。在
  2. x:优化决策向量
  3. convergence:提供优化过程中目标函数值的列表。这可以用来绘制收敛图。在
  4. register:pandas数据帧,大小为population_size,其中包含保存最好的目标函数值和X向量。在
  5. metrics:提供用于优化的存储解决方案的内部平均值和方差。在
  6. scaling_factors“提供迭代过程中使用的缩放因子列表。在

收敛图可以用MVMO.plot(res['convergence'])绘制。在

以下示例显示了约束Rosenbrock函数的最小化:

fromMVMOimportMVMOfromMVMOimporttest_functionsfunction=test_functions.rosenoptimizer=MVMO(iterations=5000,num_mutation=1,population_size=10)deffunc_constr(X):returnTrueifX[0]**2+X[1]**2<1elseFalsebds=[(0,1.5),(1,3.5)]constr={'ineq':"(X[0] - 1)**3 - X[1] + 1",'eq':"X[0]+X[1]-2",'func':func_constr}res=optimizer.optimize(obj_fun=function,bounds=bds,constraints=constr,binary=[0],integer=[1])print(res['x')MVMO.plot(res['convergence'])

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从Dropwizard中的Minio检索文件时,GET请求中的超时是如何处理的?   带Hibernate的java Jackson用于序列化以避免枚举   Raspberry Pi上的java Jave分段错误   java在屏幕旋转时不保存当前片段和数据   java War文件未在Heroku上正确部署   如何使用Java处理Selenium webdriver中的促销广告或cookie   java处理“用法:PApplet[options]<classname>[sketch args]”   java文本文件错误扫描程序   运行第一个JavaFX模块化程序时出现java异常   java将fileoutputstream转换为字符串   如何调试gstreamerjava?   java Spring RestTemplate ResponseBody类是什么样的   如何将JSON数组转换为Java列表。我在用斯文森   javascript在显示div按钮后进入新页面