帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:黑盒  优化  benchmark    BOX  framework  基准  
Numerical Black-Box Optimization Benchmarking Framework

  • 源代码名称:coco
  • 源代码网址:http://www.github.com/numbbo/coco
  • coco源代码文档
  • coco源代码下载
  • Git URL:
    git://www.github.com/numbbo/coco.git
  • Git Clone代码到本地:
    git clone http://www.github.com/numbbo/coco
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/numbbo/coco
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • numbbo/可可:比较连续优化器

    CircleCI

    这里代码将原始比较持续优化器平台与其他语言进行了比较,并使用其他语言( 调用 C 代码)。 正如 NAME 提到的,代码提供了一个平台,用于基准化和比较连续优化器,也就是非线性。 当前可用的语言为

    • C/C++
    • Java
    • MATLAB/Octave
    • Python

    对链接更多语言的贡献( 在 C++ 中包含一个更好的例子) 非常受欢迎。

    要 获得 更 多 信息 ,

    需求

    • 对于运行实验的机器
    • 一个 C 编译器,如 gcc
    • 安装了 setuptools的python> =2.6
    • 可选:git
    • 对于运行后处理的机器

    对于 16.04 +,可以使用以下命令安装所有要求:

    
    apt-get install build-essential python-dev python-numpy python-matplotlib 
    
    
     python-scipy python-six python-setuptools
    
    
    
    

    Windows 详细信息

    在 Windows 下,可以使用两种可选的编译 toolchains:

    为了在 Windows ( 可选) 下使用 git,我们建议安装 TortoiseGit

    编程语言细节

    在特定语言中运行算法时的附加需求。

    • :,例如 GNU Make ( 如果使用 GNU Make 为 Windows,请确保将 CC 环境变量设置为 gcc,如果你看到错误,则为)。
    • gcc 和任何Java开发工具包( JDK ),这样就可以访问 javacjavah ( 例如 )。 在系统路径中)。
    • :至少 MATLAB,有关详细信息,请参见这里的
    • 使用 MINGW 在 Windows 上使用 python: python 2.7和包含VC9的python 2.7的微软编译器包,这里有可用的 这些是为 Windows 构建 python cocoex MODULE的C 扩展所必需的。 软件包包含 32位 和 64位 编译器以及 Windows SDK头。
    • Linux 上的 python: 必须安装 python-dev 才能编译/安装 cocoex 模块。
    • Octave: Octave 4.0.0或者更高版本。 在 Windows 以外的操作系统上,早期版本可能会工作。 在Linux下,软件包 liboctave-dev 可能是必要的。

    Guaranties ( 无)

    We OSX和 64位 编译器在不同的组合中测试框架,我们无法保证框架在任何操作系统和软件的组合上运行。 如果你遇到一些问题,请查看 已知问题/解决问题( Section ) 部分。 如果你能在问题追踪器上详细记录的话,我们会很高兴的。

    启动

    查看上面的 需求。

    从github下载的COCO框架代码

    • 单击下载ZIP按钮并解压 zip 文件,
    • 或者通过键入 git clone https://github.com/numbbo/coco.git 这样,就可以保持简单的( 但需要安装 git )。 克隆后,git pull 将代码保存在最新版本中。

    官方发布的记录可以在这里找到,这里是 最新版本与上面的链接对应于主分支( )。

    • 在系统 shell 中,向或者 coco-<version> 文件夹( 框架 root ) 添加英镑,文件 do.py 可以在其中找到。 类型,换句话说,英镑执行,一次命令
    
     python do.py run-c
    
    
     python do.py run-java
    
    
     python do.py run-matlab
    
    
     python do.py run-octave
    
    
     python do.py run-python
    
    
    
    

    根据使用哪种语言来运行实验。 run-* 将生成相应的代码并运行示例实验一次。 可以在下面找到构建结果和示例实验代码 code-experiments/build/<language> ( <language>=matlab Octave )。python do.py 列出所有可用的命令。

    • 在实验数据被处理的计算机上,运行
    
     python do.py install-postprocessing
    
    
    
    

    ( 用户本地) 安装后处理。 从现在开始,do.py 已经完成了它的工作,只需要再次用于更新新版本。

    • 文件夹中的 code-experiments/build/YOUR-FAVORITE-LANGUAGE 它的内容到另一个地方。 在 python 中,复制文件 example_experiment.py 已经足够了。 运行示例实验( 它已经被编译)。 详细信息,请参阅相应的和/或者阅读示例实验文件:

    如果示例实验运行,将你最喜欢的算法连接到可可 : 在示例实验文件中替换对随机搜索优化器的调用,方法是调用你的算法( 请参见上方)。 更新输出 result_folder的输出。示例实验文件中的algorithm_namealgorithm_info

    你自己实验的另一个入口点可以是 code-experiments/examples 文件夹。

    • 现在你可以在 bbob 套件(。针对单一目标算法) 或者 bbob-biobjbbob-biobj-ext 套件( 面向多目标算法) 上运行 输出是在指定的数据 result_folder 中自动生成的。 现在,可能有更多的套件可用,见下面。

    6 Postprocess 通过键入结果从结果文件夹中获取数据

    
     python -m cocopp [-o OUTPUT_FOLDERNAME] YOURDATAFOLDER [MORE_DATAFOLDERS]
    
    
    
    

    文件夹参数中的任何子文件夹都将搜索已经记录的数据。 也就是说,不同批次的实验可以在一个"root" YOURDATAFOLDER 文件夹下收集不同的文件夹。 我们还可以通过指定由不同算法生成的多个数据结果文件夹来比较多个算法。 注意,默认情况下,我们提供许多算法数据集。 对于 bbob 测试套件,可以在 http://coco.gforge.inria.fr/doku.php?id=algorithms 找到数据,对于 bbob-biobj 测试套件,可以在 http://coco.gforge.inria.fr/doku.php?id=algorithms-biobj 找到数据。

    默认情况下,将生成一个文件夹 ppdata,包含从post处理,包括 index.html 文件,用作浏览器的结果。 因此,可能会覆盖数据,因此使用 -o OUTPUT_FOLDERNAME 选项更改输出文件夹 NAME 是很有用的。

    可以通过 LaTeX 生成摘要 pdf。 相应的模板可以在 code-postprocessing/latex-templates 基本html输出也可以在后处理的( 文件 templateBBOBarticle.html )的结果文件夹中找到。

    如果需要执行随机独立重启,则一旦算法运行良好,可以在实验脚本中增加预算,并按照 上面 步骤连续执行,直至你满意。

    实验可以为并行化任何单个问题实例的re分配batches批量( 有关示例,请参阅 example_experiment.py )。 每个批处理必须在不同的目标文件夹( 这应该自动发生) 中写入。 每个批次的结果必须保存在各自的文件夹下,如下所示。 然后这些文件夹必须移动/复制到一个单独的文件夹中,成为post处理的输入文件夹。 ( 日志处理在所有子文件夹和subsub中进行搜索。 要从 .info 文件开始。 必须不更改单个子实验的文件夹结构,因为 .info 文件依赖它来查找数据文件。

    如果你发现 Bug 或者其他问题,请在 https://github.com/numbbo/coco/issues 中打开问题跟踪程序,让我们知道问题。

    文件夹描述

    • 根目录 中的do.py 文件是构建整个发行版的工具。 do.py 是一个简洁而简单的替代工具。 它有用于构建一些语言等的开关,类型

      
       python do.py
      
      
      
      

      查看所有可用commandes的列表。

    • 代码实验/生成文件夹对 ./do.py build 命令的输出文件夹进行大扩展。

      • 构建文件夹中的exampleexperiment.??? 文件是用来理解代码( 作为最终用户) 用法的入口点。 它们实际上应该是可执行的( 在编译之后,do.py 和/或者 make 应该处理它),并在( of ) 提供的基准套件上运行随机搜索。
    • 文档和示例目前可以能并不太有意义,即使 code-experiments/documentation/onion.py 描述了( 严重) 设计 Pattern ( 即: 继承( ( 尽管C 中的实现看起来有些不同) ) 是一种比较理想的方法。 节链接和文档提供了一个指针列表。

    • 代码实验/src文件夹是大多数重要/有趣的事情发生的地方。 在目前的文件中,许多文件提供了比较好的文档,这些文件通过doxygen在 http://numbbo.github.io/coco-doc/C/页面中被转换为一个更可以读的网页。 一般情况下:

      • coco.h 是 public 接口,特别是 example_experiment.c 文件中使用
      • coco_internal.h 提供coco_problem_t的类型定义
      • coco_suite.c 是处理整个基准套件( 例如 )的代码。 一组函数,例如。 通过 等等。)
      • coco_generics.c 是一些通用的代码,比如 通过coco_evaluate_function等定义函数调用
      • coco_problem.c 是coco_problem_t类型/对象( 分配等)的实现。
      • 观察者/记录器文件实现数据日志( 围绕可可问题的包装,因此coco问题的所有属性)
      • 大多数其他文件实现更多或者 LESS的内容,比如 实际的基准函数。转换。基准套件等等。
      • 目前,实现了四个基准套件和相应的日志设备:
        • bbob: 标准单一目标BBOB基准套件,带有 24个静音,可以扩展的测试功能
        • bbob-biobj: 一个双目标准基准套件,将 10个选定函数组合在bbob套件中,导致 55个无噪音功能
        • bbob-biobj-ext: bi目标 bbob-biobj 基准套件的扩展版本,从相同的bbob 功能组添加 bbob 功能组合,导致 92个安静的函数组合。
        • toy: 一个简单的,可能是easier-to-understand示例,用于读取和测试
    • 代码实验/工具是一些元工具,主要是 amalgamate.py 将所有的C 代码合并成一个文件

    • 代码实验/测试包含unit-和集成测试,主要用于内部使用

    • 段/视图/视图/视图/视图中的代码后处理代码,可以在数据透视图。艺术 vs 维度图或者简单表格中显示算法数据集。

    • 代码后处理/帮助器脚本包含其他独立的python 脚本,这些脚本不是 cocopp MODULE的一部分,但可能会使用它。

    • 代码后处理/latex模板包含用于在发布服务器中显示算法性能的LaTeX 模板。GECCO会议中的conform pdf。

    • code-preprocessing/archive-update/包含内部代码,用于组合算法的归档,以创建/更新 bbob-biobj 测试套件的for引用值。

    • code-preprocessing/log-reconstruction/包含用于从归档文件重建 bbob-biobj 记录器输出的内部代码( 在更新超成本参考值时需要)

    • 文档应该包含文档的更新版本,见上面。

    • howto包含了一些带有内部howto的文本文件。

    已知问题/故障排除

    Java

    javah 调用失败

    如果在Linux下运行 python do.py run-java 或者 build-java 时看到类似的情况

    
    COPY code-experiments/src/coco.h -> code-experiments/build/java/coco.h
    
    
    WRITE code-experiments/build/java/REVISION
    
    
    WRITE code-experiments/build/java/VERSION
    
    
    RUN javac CocoJNI.java in code-experiments/build/java
    
    
    RUN javah CocoJNI in code-experiments/build/java
    
    
    Traceback (most recent call last):
    
    
     File"do.py", line 590, in <module>
    
    
     main(sys.argv[1:])
    
    
     File"do.py", line 563, in main
    
    
     elif cmd == 'build-java': build_java()
    
    
     File"do.py", line 437, in build_java
    
    
     env = os.environ, universal_newlines = True)
    
    
     File"/..../code-experiments/tools/cocoutils.py", line 34, in check_output
    
    
     raise error
    
    
    subprocess.CalledProcessError: Command '['locate', 'jni.h']' returned non-zero exit status 1
    
    
    
    

    它意味着没有安装 javah,或者在系统路径中找不到它,请参见 ,并可能在这个过程中使用来解决问题。

    Matlab

    到matlab的路径

    如果在运行 python do.py build-matlab 时看到类似的内容

    
    AML ['code-experiments/src/coco_generics.c', 'code-experiments/src/coco_random.c', 'code-experiments/src/coco_suite.c', 'code-experiments/src/coco_suites.c', 'code-experiments/src/coco_observer.c', 'code-experiments/src/coco_runtime_c.c'] -> code-experiments/build/matlab/coco.c
    
    
    COPY code-experiments/src/coco.h -> code-experiments/build/matlab/coco.h
    
    
    COPY code-experiments/src/best_values_hyp.txt -> code-experiments/build/matlab/best_values_hyp.txt
    
    
    WRITE code-experiments/build/matlab/REVISION
    
    
    WRITE code-experiments/build/matlab/VERSION
    
    
    RUN matlab -nodisplay -nosplash -r setup, exit in code-experiments/build/matlab
    
    
    Traceback (most recent call last):
    
    
     File"do.py", line 447, in <module>
    
    
     main(sys.argv[1:])
    
    
     File"do.py", line 429, in main
    
    
     elif cmd == 'build-matlab': build_matlab()
    
    
     File"do.py", line 278, in build_matlab
    
    
     run('code-experiments/build/matlab', ['matlab', '-nodisplay', '-nosplash', '-r', 'setup, exit'])
    
    
     File"/Users/auger/workviasvn/newcoco/numbbo/code-experiments/tools/cocoutils.py", line 68, in run
    
    
     universal_newlines=True)
    
    
     File"//anaconda/lib/python2.7/subprocess.py", line 566, in check_output
    
    
     process = Popen(stdout=PIPE, *popenargs, **kwargs)
    
    
     File"//anaconda/lib/python2.7/subprocess.py", line 710, in __init__
    
    
     errread, errwrite)
    
    
     File"//anaconda/lib/python2.7/subprocess.py", line 1335, in _execute_child
    
    
     raise child_exception
    
    
    OSError: [Errno 2] No such file or directory
    
    
    
    

    可能是因为你的系统不知道 matlab 命令。 要修复这个问题,应该编辑文件 /etc/paths 并向 matlab bin文件添加路径,或者添加路径到你的Windows 路径所在的文件夹中。 例如 etc/paths 应该类似于下面这样

    
    /usr/local/bin
    
    
    /usr/bin
    
    
    /bin
    
    
    /usr/sbin
    
    
    /sbin
    
    
    /Applications/MATLAB_R2012a.app/bin/
    
    
    
    
    消息emoa示例在Mac下不编译

    通过更复杂的短信emoa例子,问题与 hv.cpp的外部 C++ 超微粒度计算有关。

    解决这里问题的方法包括添加到文件 hv.cppparetofront.c

    
    #define char16_t UINT16_T
    
    
    
    

    在这一行之前:

     
    #include"mex.h"
    
    
    
     
    对mex文件的访问拒绝

    如果在 python do.py build-matlab 或者 python do.py run-matlab 过程中发生了一些 Access is denied 错误,就像这样

    
    C:UsersdimoDesktopnumbbo-brockho>python do.py run-matlab
    
    
    Traceback (most recent call last):
    
    
     File"do.py", line 649, in <module>
    
    
     main(sys.argv[1:])
    
    
     File"do.py", line 630, in main
    
    
     elif cmd == 'run-matlab': run_matlab()
    
    
     File"do.py", line 312, in run_matlab
    
    
     os.remove( filename )
    
    
    WindowsError: [Error 5] Access is denied: 'code-experiments/build/matlabcocoEv
    
    
    aluateFunction.mexw32'
    
    
    
    

    原因可能是以前打开的Matlab窗口仍然有一些文件句柄打开。 只需关闭所有的Windows ( 以及所有运行的Matlab进程,如果有),再次运行 do.py 命令。

    Octave

    Linux下的octave-dev

    运行时

    
     python do.py run-octave
    
    
    
    

    或者

    
     python do.py build-octave
    
    
    
    

    看到一些类似的东西

    
     [...]
    
    
     compiling cocoCall.c...error: mkoctfile: please install the Debian package"liboctave-dev" to get the mkoctfile command
    
    
    
    

    然后,毫不奇怪地,安装 liboctave-dev

    
     sudo apt-get install liboctave-dev
    
    
    
    

    应该做这个工作。

    python

    setuptools 未安装

    如果你看到这样的东西

    
    $ python do.py run-python # or build-python
    
    
    [...]
    
    
    PYTHON setup.py install --user in code-experiments/build/python
    
    
    ERROR: return value=1
    
    
    Traceback (most recent call last):
    
    
     File"setup.py", line 8, in <module>
    
    
     import setuptools
    
    
    ImportError: No module named setuptools
    
    
    
    Traceback (most recent call last):
    
    
     File"do.py", line 562, in <module>
    
    
     main(sys.argv[1:])
    
    
     File"do.py", line 539, in main
    
    
     elif cmd == 'build-python': build_python()
    
    
     File"do.py", line 203, in build_python
    
    
     python('code-experiments/build/python', ['setup.py', 'install', '--user'])
    
    
     File"/vol2/twagner/numbbo/code-experiments/tools/cocoutils.py", line 92, in p ython
    
    
     universal_newlines=True)
    
    
     File"/usr/local/lib/python2.7/subprocess.py", line 575, in check_output
    
    
     raise CalledProcessError(retcode, cmd, output=output)
    
    
    subprocess.CalledProcessError: Command '['/usr/local/bin/python', 'setup.py', 'i nstall', '--user']' returned non-zero exit status 1
    
    
    
    

    然后需要安装 setuptools:

    
     pip install setuptools
    
    
    
    

    或者 easy_install setuptools 应该做这个工作。

    在安装时进行的编译失败( 在 Linux

    如果你看到类似这样的内容:

    
    $ python do.py run-python # or build-python
    
    
    [...]
    
    
    cython/interface.c -o build/temp.linux-i686-2.6/cython/interface.o
    
    
    cython/interface.c:4:20: error: Python.h: file not found
    
    
    cython/interface.c:6:6: error: #error Python headers needed to compile C extensions, please install development version of Python.
    
    
    error: command 'gcc' failed with exit status 1
    
    
    
    

    或者

    
    $ python do.py run-python # or build-python
    
    
    [...]
    
    
    cython/interface.c -o build/temp.linux-x86_64-2.7/cython/interface.o
    
    
    cython/interface.c:4:20: fatal error: Python.h: No such file or directory
    
    
    #include"Python.h"
    
    
    ^
    
    
    compilation terminated.
    
    
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    
    
    
    

    在Linux下

    
     sudo apt-get install python-dev
    
    
    
    

    应该做的trick。

    MODULE 更新/安装不传播

    我们已经观察到一个例子,其中 cocoex python MODULE的更新似乎没有任何效果。 在本例中,删除以前安装的所有版本是成功的,参见这里的,了解更多细节。

    后处理

    用于后处理的路径太长

    可能会发生由于算法数据的路径过长而导致后后处理失败的情况。 不幸的是,你在这个例子中的错误并不直接指出问题,但只告诉某个文件无法读取。 请在这样的情况下缩短文件夹名称。

    :pdf中的字体问题

    我们偶尔在( 请参见 issue #1335。) 中观察到一些字体问题,由COCO的后处理产生。 更改为另一个 matplotlib 版本至少暂时解决了这个问题。

    下的 BibTeX

    在Mac操作系统下,bibtex 似乎有点与绝对和 relative 路径有关,这会导致对 python do.py test-postprocessing 后处理的测试。 注意,如果你编译 LaTeX 模板"手工"或者通过 LaTeX IDE,通常没有什么要修复的。 但是为了
    使用 python do.py test-postprocessing,你必须在本地TeX路径中的texmf.cnf 文件中添加一个带有 openout_any = a的行。 键入 kpsewhich texmf.cnf 以查找这里文件的实际位置。

    后无法安装

    如果由于某些原因,你的python 安装已损坏并正在运行 python do.py install-postprocessing 出现错误消息,如

    
    [...]
    
    
     safe = scan_module(egg_dir, base, name, stubs) and safe
    
    
     File"C:UsersdimoAnaconda2libsite-packagessetuptoolscommandbdist_egg.py", line 392, in sca
    
    
    n_module
    
    
     code = marshal.load(f)
    
    
    EOFError: EOF read where object expected
    
    
    [...]
    
    
    
    

    尝试将 zip_safe=False 添加到 code-postprocessing 文件夹中的setup.py.in 文件中。 更详细的细节可以在 issue #1373 中找到。

    算法在数字中出现两次

    早期版本的cocopp 已经将提取的数据写入名为 _extracted_...的文件夹。 如果使用 * 参数调用后处理,这些文件夹将成为参数并显示为( 最可能的是原始算法数据文件夹)。 解决方案:删除 _extracted_... 文件夹和使用最新版本的日志处理 MODULE cocopp ( 自发布 2.1.1以来)。

    详细信息

    • C 代码具有面向对象的实现,其中 coco_problem_t 是最中央的数据结构/对象。 coco.hexample_experiment.ccoco_internal.h 可能是启动以调查代码 ( 但请参见这里的 。)的最佳指针。coco_problem_t 定义了一个基准 function instance (in a given dimension),并通过 coco_evaluate_function 调用。

    • 通过合并/合并所有C 代码到单个C 文件。coco.ccoco.h,完成代码的构建。运行和测试。 ( 通过调用 do.py,请参见上面。 就像这样,在不同的项目中包含/使用代码变得非常简单。

    • Cython 用于在 build/python/interface.pyx 中编译C 到 python 接口。 如果 interface.pyx 没有更改,python MODULE 安装文件 setup.py 使用已经编译的interface.c。 因此,Cython不是最终用户的需求。

    • 一个 12.04机器上的开源自动化服务器 Jenkins,一台 OSX 10.9机器,以及两台 Windows 7机器,我们不断地测试代码。

    引用

    你可以科学的方式引用这项工作

    N。汉森。Auger。O。 :在黑盒中比较连续优化器的平台,例如 ,,2016,。

    
    @ARTICLE{hansen2016cocoplat, 
    
    
     author = {Hansen, N. and Auger, A. and Mersmann, O. and 
    
    
     Tu{v s}ar, T. and Brockhoff, D.},
    
    
     title = {{COCO}: A Platform for Comparing Continuous Optimizers 
    
    
     in a Black-Box Setting},
    
    
     journal = {ArXiv e-prints},
    
    
     volume = {arXiv:1603.08785},
    
    
     year = 2016
    
    
    }
    
    
    
    

    链接和文档

    全面的文档列表。

    ^1: 请参见 #837#1266 两个待定的勘误



    文章标签:  framework  BOX  benchmark  优化  基准  黑盒  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语