5 个版本 (有重大更新)

0.6.0 2023 年 5 月 30 日
0.4.0 2022 年 6 月 2 日
0.3.0 2021 年 12 月 28 日
0.2.0 2021 年 12 月 27 日
0.1.0 2021 年 12 月 23 日

#590 in 科学


2 个工具包中使用 (通过 coco-rs)

MIT/Apache

1.5MB
30K SLoC

C 29K SLoC // 0.1% comments Rust 61 SLoC

numbbo/coco: 比较连续优化器

[!IMPORTANT]

此仓库包含 coco 框架的源代码。如果您不想 扩展 框架,您可能不需要这个!请参阅新文档,并从您的语言包仓库中(例如 Python 的 PyPI,Rust 的 crates.io 等)使用您选择的绑定。

[!CAUTION]

我们目前正在重构 coco 代码库以使其更易于访问。因此,大部分文档可能已过时或处于变化状态。我们会尽快更新它们。如果您发现某些内容过时或需要更好的描述,请不要犹豫,提出问题或拉取请求!

DOI [BibTeX] 引用为

尼科劳斯·汉森,迪莫·布罗赫霍夫,奥拉夫·梅尔曼,特亚·图萨,德扬·图萨,瓦西姆·艾特·埃尔哈拉,菲利普·R·萨帕尼奥,阿斯玛·阿塔姆纳,康斯坦丁诺斯·瓦雷拉斯,乌穆特·巴图,杜克·曼·阮,菲利普·马茨纳,安妮·奥古尔。比较连续优化器:GitHub上的numbbo/COCO。Zenodo,DOI:10.5281/zenodo.2594848,2019年3月。


此代码提供了一个平台来基准测试和比较连续优化器,即数值优化的非线性求解器。它完全用ANSI CPython编写(重新实现了原始的比较连续优化器平台),其他语言通过调用C代码来连接。目前可用于连接求解器到基准测试的语言有

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

欢迎贡献更多语言的链接(包括更好的C++示例)。

以下图显示了通用项目结构,其中黑色表示平台提供的代码或数据,红色表示用户代码或平台使用时的图形输出

General COCO Structure

更多信息

  • COCO的GitHub.io文档页面
  • 关于基准测试指南和COCO:黑盒设置下比较连续优化器的介绍文章(pdf)或arXiv
  • COCO实验设置描述
  • BBOB研讨会系列
  • 为获取COCO/BBOB新闻,请在此处注册
  • 请参阅下方的链接,以了解更多关于COCO背后的想法

入门

运行实验

  1. 要在Python中运行实验,请遵循(新的)说明这里
    否则,从github下载 COCO框架代码

    • 通过点击下载ZIP按钮并解压缩zip文件,
    • 或者通过输入git clone https://github.com/numbbo/coco.git。这种方法可以轻松保持最新(但需要安装git)。克隆后,git pull将代码保持为最新版本。

    官方发布记录可以在这里找到。最新版本对应于上述链接的master分支

  2. 在系统shell中,cd cocococo-<version> 文件夹(框架根),其中可以找到文件 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> (对于 Octave,<language>=matlab) 下找到。python do.py 列出了所有可用的命令。

  3. 将文件夹 code-experiments/build/YOUR-FAVORITE-LANGUAGE 和其内容复制到另一个位置。在 Python 中,只需要复制文件 example_experiment_for_beginners.pyexample_experiment2.py。运行示例实验(它已经编译过了)。由于细节各不相同,请参阅相应的说明文件和/或示例实验文件。

    如果示例实验可以运行,连接您喜欢的算法到 Coco:在示例实验文件中,将调用随机搜索优化器的调用替换为您算法的调用(见上文)。更新示例实验文件中观察者选项的 result_folderalgorithm_namealgorithm_info

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

  4. 现在您可以在 bbobbbob-largescale 套件(对于单目标算法)、在 bbob-biobj 套件(对于多目标算法)或混合整数套件(分别为 bbob-mixintbbob-biobj-mixint)上运行您喜欢的算法。输出将自动生成在指定的数据 result_folder 中。目前,可能还有更多套件可用,请参见下文。

后处理数据

  1. 安装用于 显示 数据的后处理程序(使用 Python)

        pip install cocopp
    
  2. 通过键入 后处理 本地运行实验的结果文件夹中的数据

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

    将搜索文件夹参数中的任何子文件夹以查找日志数据。也就是说,来自不同批次的实验可以收集在单个 "root" YOURDATAFOLDER 文件夹下的不同文件夹中。我们还可以通过指定由不同算法生成的多个数据结果文件夹来比较多个算法。

  3. 我们还提供许多存档算法数据集。例如

      python -m cocopp 'bbob/2009/BFGS_ros' 'bbob/2010/IPOP-ACTCMA'
    

    处理引用的存档BFGS数据集和一个IPOP-CMA数据集。给定的子串必须在存档中具有唯一的匹配项,或者以!*结尾,或者必须是一个包含*但不以!*结尾的正则表达式。否则,将列出所有匹配项,但此调用不会处理任何匹配项。有关如何获取和显示特定存档数据的更多信息,请参阅help(cocopp)help(cocopp.archives)COCODataArchive类。

    可以在coco-algorithms找到bbob测试套件的数据描述,以及在coco-algorithms-biobj找到bbob-biobj测试套件的数据描述。对于其他测试套件,请参阅COCO数据存档

    本地和存档数据可以像这样自由混合

      python -m cocopp YOURDATAFOLDER 'bbob/2010/IPOP-ACT'
    

    它处理来自YOURDATAFOLDER的数据和存档IPOP-ACT数据集进行比较。

    输出文件夹,默认为ppdata,包含所有后处理的输出。index.html文件是使用浏览器探索结果的入口点。来自与之前处理相同文件夹名的数据可能会被覆盖。如果不希望这样,可以选择不同的输出文件夹名,使用-o OUTPUT_FOLDERNAME选项。

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

  4. 为了充分利用后处理模块的功能,建议在PythonIPython shell或Jupyter notebookJupyterLab中使用该模块,其中

    import cocopp
    help(cocopp)
    

    提供文档入口指针

如果您发现错误或其他问题,请通过在我们的问题跟踪器中打开一个问题来让我们知道https://github.com/numbbo/coco/issues

已知问题/故障排除

后处理

后处理路径太长

可能会发生这样的情况,由于算法数据路径过长而导致后处理失败。遗憾的是,在这种情况下您得到的错误没有直接指出问题,只是表明某个文件无法读取。在这种情况下,请尝试缩短文件夹名称。

PDF中的字体问题

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

在Mac下使用BibTeX

在Mac操作系统下,bibtex似乎与绝对路径和相对路径有点混乱,这导致通过python do.py test-postprocessing进行后处理的测试出现了一些问题。请注意,如果您“手动”或通过您的LaTeX IDE编译LaTeX模板,通常不需要修复任何东西。但是,为了使python do.py test-postprocessing工作,您需要在本地TeX路径下的texmf.cnf文件中添加一行openout_any = a。输入kpsewhich texmf.cnf以找出该文件的实际位置。
python do.py test-postprocessing工作,您将需要在本地TeX路径下的texmf.cnf文件中添加一行openout_any = a。输入kpsewhich texmf.cnf以找出该文件的实际位置。

算法在图中出现了两次

较早版本的cocopp将提取的数据写入名为_extracted_...的文件夹。如果使用*参数调用后处理,这些文件夹将变为参数并显示(很可能是除了原始算法数据文件夹之外的显示)。解决方案:删除_extracted_...文件夹并且使用后处理模块cocopp的最新版本(自2.1.1版本以来)。

实现细节

  • C代码采用面向对象实现,其中coco_problem_t是最核心的数据结构/对象。coco.hexample_experiment.ccoco_internal.h可能是开始调查代码的最好起点(但也可以参见这里)。coco_problem_t定义了一个基准函数实例(在给定维度中),并通过coco_evaluate_function调用。

  • 通过将所有C代码合并/融合到一个单独的C文件coco.ccoco.h中来实现代码的构建、运行和测试。(通过调用上述的do.py)。这样,将代码包含/使用在不同项目中变得非常简单。

  • build/python/interface.pyx中,使用Cython将C编译成Python接口。Python模块安装文件setup.py使用编译后的interface.c,如果interface.pyx没有更改。因此,Cython不是最终用户的要求。

引用

您可以在科学环境中引用这项工作:

N. Hansen, A. Auger, R. Ros, O. Mersmann, T. Tušar, D. Brockhoff. COCO:一个用于在黑盒设置中比较连续优化器的平台,《优化方法与软件》,36(1),第114-144页,2021年。[pdfarXiv]

@ARTICLE{hansen2021coco,
author = {Hansen, N. and Auger, A. and Ros, R. 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 = {Optimization Methods and Software},
doi = {https://doi.org/10.1080/10556788.2020.1808977},
pages = {114--144},
issue = {1},
volume = {36},
year = 2021
}

完整的文档列表

依赖关系

~0–2MB
~40K SLoC