支持gpu的混合整数并行高效全局优化

mipego的Python项目详细描述



<;p align="center">;lt;img width=60%src="https://github.com/wangronin/mip-ego/blob/master/media/textlogo.png">;

amp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
![python](https://img.shields.io/pypi/pyversions/mipego.svg)
![python](https://img.shields.io/pypi/status/mipego.svg)
![依赖项](https://img.shields.io/badge/dependencies up%20 to%20 date brightgreen.svg)
[![github问题](https://img.shields.io/github/issues/wangronin/mip-ego.svg)](https://github.com/wangronin/mip-ego/issues)
![欢迎投稿](https://img.shields.io/badge/contributions welcome orange.svg)
[![许可证](https://img.shields.io/badge/license mit blue.svg)(https://opensource.org/licenses/mit)

\overview

**mip ego**(混合整数,并行高效全局优化)*是一个优化包,可用于优化混合整数优化问题。混合整数问题是将某些决策变量约束为整数值或分类值的问题。
在经典的混合整数问题之后,算法选择或算法参数优化也可以被看作是一个复杂的混合整数问题。

mip ego不像标准的ego*那样使用高斯过程回归,而是使用随机林,因为随机林在默认情况下可以处理混合整数数据。
mip ego中的p表示并行,因为此实现还有一个附加功能,即它可以并行评估多个解决方案,当评估需要很长时间并且有多台计算机可用时,这非常方便。

昂贵的(及时的)模拟。有四个仿真许可证,因此可以同时运行四个仿真。有了mip ego,这四个许可证都可以充分利用,加快优化过程。利用一种新的填充准则,即基于矩生成函数的准则,可以选择多个点作为候选解。有关此标准的详细信息,请参阅以下文章:
Wang,Hao,et al.*基于矩生成函数的贝叶斯优化新获取函数。*in:Systems,Man,and Cybernetics(SMC),2017年IEEE国际会议。IEEE,2017。p.507-512.



有关更多详细信息,请参见示例2。


下面是描述大多数功能的两个示例。

搜索空间类
从mipego导入mipego
从mipego.surrogate导入randomforest
从mipego.search space导入continuousspace,nominalspace,ordinalspace

"黑盒"目标函数
def obj_func(x):
x_r,x_i,x_d=np.array([x['c_0',x['c_1']]),x['i',x['n']
如果x_d='ok':
tmp=0
否则:
tmp=1
返回np.sum(x_r**2.)+abs(x_i-10)/123。+tmp*2.



首先我们需要定义搜索空间
搜索空间由两个连续变量
一个序数(整数)变量
和一个分类变量组成。
c=连续空间([-5,5],'c')*2
这里我们使用相同的上下界同时定义了两个变量。
一个带有标签c 0,另一个标签为c_1
i=ordinalspace([-100,100],'i')一个整数变量,标签为i
n=nominalspace(['ok','a','b','c','d','e'],"n")


最小化=真,问题是最小化问题。
最大评估值=500,我们评估最大500次
最大评估值=500,我们有最大500次迭代
infll='ei',期望改进作为标准
n_init_u sample=10,我们从10个初始样本开始
n_point=1,我们评估每个迭代1次
n_job=1,用1个过程(job)。
优化器='mies',我们使用mies内部优化器。
verbose=false,random嫒seed=none)




stop_dict=opt.run()
```




\文件](https://github.com/wangronin/bayesianoptimization/blob/master/all-cnn.py)来自根存储库目录。
在目标文件中,神经网络结构是在mnist数据集上定义和评估的。
下面的代码演示了如何使用4个GPU异步地为此目的设置优化器。

`` python
导入os
导入numpy作为np
导入子流程,sys
从子流程导入stdout,检查输出

导入我们的包,mipego中的代理模型和搜索空间类从mipego导入mipego。代理从mipego导入randomforest
。search space导入continuousspace、nominalspace、ordinalspace

让我们定义目标函数,
这基本上是调用文件(所有cnn.py)并处理其输出。
类obj_func(object):
def_u init_u(self,program):
self.program=program

def_u call_u(self,cfg,GPU掼no):
打印("使用GPU调用程序"+str(GPU掼no))
cmd=['python3',self.program,'--cfg',str(cfg),str(GPU掼no)]
输出值=
尝试:
我们使用超时来取消很长的计算。
out=str(check_output(cmd,stderr=stdout,timeout=40000))
outs=outs.split("\\n")


outputVal=0
对于范围内的i(len(outs)-1,1,-1):
如果重新匹配("^\d+"?\D+?$outs[-i])不是无:
打印(outs[-i])
outputVal=-1*浮点(outs[-i])
如果np.isNaN(outputVal):
outputVal=0默认为0。
除子进程外。称为进程的错误为e:
异常处理
traceback.print_exc()
打印(e.output)
除了:
打印("意外错误:")
traceback.print_exc()
outputVal=0
返回outputVal




=obj_func('./all cnn.py')
最后一层的激活功能。
激活功能conv=["elu","relu","tanh","sigmoid","selu"]

ers=ordinalspace([10600],'filters')*7
内核大小=ordinalspace([1,6],'k')*7
跨步数=ordinalspace([1,5],'s')*3
堆栈大小=ordinalspace([1,5],'stack')*3
激活=nominalspace(激活乐趣转换,"激活")
激活密集=nominalspace(激活有趣,"激活密集")

=continuousspace([1e-5,.9],'dropout')*4
lr嫒rate=continuousspace([1e-4,1.0e-0],'lr')嫒学习率
l2嫒regulazer=continuousspace([1e-5,1e-2],'l2')嫒l2嫒regulazer

search嫒space=stack嫒size*steps*filters*kernel嫒size*activation*activation嫒dense*退出*lr_rate*l2_regulazer*step*global_pooling

我们将使用系统的前4个GPU。
可用的GPU=[0,1,2,3]


=mipego(搜索空间,目标,模型,
最小化=真,最大值=无,最大值=500,
inflil='mgfi',n_init_sample=10,
n_point=4,n_job=4,
4 gpu,一次评估一个点。
等待iter=3,优化器='mies',
冗余=false,随机种子=none,
可用的GPU=可用的GPU)




stop_dict=opt.run()
```




\contribution
如果您有兴趣帮助,请查看我们的[贡献](https://github.com/wangronin/bayesianoptimization/blob/master/contribution.md)指南!

试用版功能
-异步GPU执行
-支持重新启动/恢复的中间文件。



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

推荐PyPI第三方库


热门话题
java无法启动应用程序:JNLP错误   java根据用户输入在PreparedStatement中使用setTime()或setNull()   java EJB与同步   java以object为键通过hashmap进行搜索   java中的模10^9+7   针对包含其他对象的对象的java OOP最佳实践   如何将字符串作为HTML代码从Java文件读取到JSP页面?   java我的POM怎么了?“解析表达式..检测到递归表达式循环”   用于Hbase的Mapreduce的java NoSuchMethodError   JAVAlang.SecurityException:权限拒绝:启动意图{act=安卓.Intent.action.MAIN cat=[安卓.Intent.category.LAUNCHER]   数组初始化谜语Java   通过arraylist搜索时的java句柄关联