蛙跳优化器-精简版
lpfgopt-lite的Python项目详细描述
Leap Frog优化器包-精简版
- 作者:马克·雷德
- 电子邮件:redddogjr@gmail.com">redddogjr@gmail.com
- github:https://github.com/flytereddflagg
- 网址:http://www.r3eda.com/" rel="nofollow">http://www.r3eda.com/
关于:
此包基于 跨越式优化 算法 出版的 R.Russell Rhinehart博士
以下出版物介绍了这项技术,可在网站上找到:
莱茵哈特,R.R.,M.Su和U.Manimegalai Sridhar, "跨越与天气跨越:一种新的优化方法", 《计算机与化学工程》,第40卷,2012年5月11日,第67-81页。
Manimegalai Sridhar,U.,A.Govindarajan和R.R.Rhinehart, "在跨越式优化中改进玩家初始化", 计算机与化学工程,第60卷,2014,426-429。
莱茵哈特,R.R., "随机过程优化的收敛准则", 《计算机与化学工程》,第68卷,2014年9月4日,第1-6页。
这是该软件包的精简版本,只需最少的工具。它是用纯python编写的,以实现兼容性 对于alpha版本,直到发布完整版本。
安装
您可以通过pip或使用源代码中的setup.py脚本安装lite版本。说明如下。
系统安装要求:
- python=3.6
numpy
scipy
- 鼻子
通过PIP
lpfgopt可以使用以下命令与pip一起安装:
$ pip install lpfgopt-lite # You may need root privileges or the --user tag
如果您希望使用pip在本地安装,可以执行以下操作:
下载"lite"分支并解压缩存档或使用git克隆它。
打开"setup.py"所在的主目录并运行以下命令:
$ pip install .
通过setup.py
下载"lite"分支并解压缩存档或使用git克隆它。
打开"setup.py"所在的主目录并运行以下命令:
$ python setup.py install # You may need root priviliges or use the --user tag
下载"lite"分支并解压缩存档或使用git克隆它。
打开"setup.py"所在的主目录并运行以下命令:
$ python setup.py install # You may need root priviliges or use the --user tag
软件应正确安装。您可以通过执行以下命令来验证安装:
$python>>>importlpfgopt>>>lpfgopt.__version__'X.X.X'>>>lpfgopt.minimize(lambdax:x[0]**2+10,[[-10,10]])['x'][<approximately0.0>]>>>
如果以上命令产生输出恭喜!您已成功安装该软件包!
用法
使用lpfgopt.minimize
函数来解决表单中的优化问题:
minimize f(x)
subject to:
g(x) <= 0
bound[0][0] <= x[0] <= bound[0][1]
bound[1][0] <= x[0] <= bound[1][1]
...
bound[n][0] <= x[0] <= bound[n][1]
where n is the number of decsision variables and bound
is a n X 2 list of lists or 2d numpy array with shape (n,2)
lpfgopt.minimize
文档
lpfgopt.minimize(乐趣,界限,参数=,点数=20,fconstraint=none,离散=[],maxit=10000,tol=1e-5,seedval=none,pointset=none,callback=none)
一般使用包装器函数与LeapFrog优化器类接口。包含运行跨越式优化所需的数据和方法。接受约束、离散变量并允许各种选项。
参数:
- 乐趣:可调用目标函数
- 界限:类数组,形状(n,2)决策变量上下限
- 参数:iterable要传递的其他参数 进入函数
- 点:int点集大小
- fconstraint:callable表单g(x)<;=0的约束函数
- 离散:与数组类似的索引列表 离散变量。这些变量 将被限制为整数值 通过截断任意随机数LY生成 数字(即四舍五入到 最接近的整数绝对值)
- maxit:int最大迭代次数
- 公差:浮点值收敛公差
- 种子值:int随机种子
- 点集:数组状,形状(m,n)起点集
- 回调:可调用每次迭代后要调用的函数
返回:
解决方案:dict包含优化结果的字典。 下面列出了解决方案的成员。
x:列表 解向量或 产生最低的决策变量 目标函数值
成功:布尔 优化器是否成功退出。
状态:int 优化器的终止状态。其价值 取决于基础解算器。参照 有关详细信息的消息。
消息:字符串 终止原因的说明。
乐趣:浮动 "x"处的目标函数值
NFEV:int 目标的功能评估次数 函数
单位:int 执行的迭代次数
最大值:浮点值 期间计算的最大约束冲突 优化
最佳:列表 人口中最低的 点集中的目标值具有 [f(x),x[0],x[1],…,x[n-1]
最差:列表 人口中 点集中的目标值具有 [f(x),x[0],x[1],…,x[n-1]
最终错误:浮点 终止时的优化收敛值
点集:列表,形状(m,n)终止时的整个点集状态 表格:
[ [f(x[0]), x[0][0], x[0][1], ..., x[0][n-1]], [f(x[1]), x[1][0], x[1][1], ..., x[1][n-1]], ..., [f(x[m-1]), x[m-1][0], x[m-1][1], ..., x[m-1][n-1]] ]
其中n是决策变量的个数,m 是搜索总体中的点数。
示例用法
下面是一个简单的优化,其中找到了以下方程的最小值:
- $f(x)=x^2+y^2$
- 服从:$g(x)=-x^2-y+10\le 0$或g(x)=-x^2-y+10<;=0
# test_lpfgopt.pyfromlpfgoptimportminimizeimportmatplotlib.pyplotasplt# set up the objective funciton, # constraint fuction and boundsf=lambdax:sum([i**2foriinx])g=lambdax:-x[0]**2+10-x[1]bounds=[[-5,5]foriinrange(2)]# run the optimizationsol=minimize(f,bounds,fconstraint=g)['x']print(f"Solution is: {sol}")# plot the results on a contour plotgg=lambdax:-x**2+10# for plotting purposesplt.figure(figsize=(8,8))x,y=np.linspace(-5,5,1000),np.linspace(-5,5,1000)X,Y=np.meshgrid(x,y)Z=f([X,Y])plt.contourf(X,Y,Z)plt.plot(x,gg(x),"r",label="constraint")plt.plot(*sol,'x',markersize=14,markeredgewidth=4,color="lime",label="optimum")plt.ylim(-5,5)plt.xlim(-5,5)plt.legend()plt.show()
此代码将产生以下输出:
Solution is: [-3.0958051486911997, 0.4159905027317925]
以及与下图类似的绘图: