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)
1.5MB
30K SLoC
numbbo/coco: 比较连续优化器
[!IMPORTANT]
此仓库包含
coco
框架的源代码。如果您不想 扩展 框架,您可能不需要这个!请参阅新文档,并从您的语言包仓库中(例如 Python 的 PyPI,Rust 的 crates.io 等)使用您选择的绑定。
[!CAUTION]
我们目前正在重构
coco
代码库以使其更易于访问。因此,大部分文档可能已过时或处于变化状态。我们会尽快更新它们。如果您发现某些内容过时或需要更好的描述,请不要犹豫,提出问题或拉取请求!
[BibTeX] 引用为
尼科劳斯·汉森,迪莫·布罗赫霍夫,奥拉夫·梅尔曼,特亚·图萨,德扬·图萨,瓦西姆·艾特·埃尔哈拉,菲利普·R·萨帕尼奥,阿斯玛·阿塔姆纳,康斯坦丁诺斯·瓦雷拉斯,乌穆特·巴图,杜克·曼·阮,菲利普·马茨纳,安妮·奥古尔。比较连续优化器:GitHub上的numbbo/COCO。Zenodo,DOI:10.5281/zenodo.2594848,2019年3月。
此代码提供了一个平台来基准测试和比较连续优化器,即数值优化的非线性求解器。它完全用ANSI C
和Python
编写(重新实现了原始的比较连续优化器平台),其他语言通过调用C
代码来连接。目前可用于连接求解器到基准测试的语言有
C/C++
Java
MATLAB
Octave
Python
Rust
欢迎贡献更多语言的链接(包括更好的C++
示例)。
以下图显示了通用项目结构,其中黑色表示平台提供的代码或数据,红色表示用户代码或平台使用时的图形输出
更多信息
- COCO的GitHub.io文档页面
- 关于基准测试指南和COCO:黑盒设置下比较连续优化器的介绍文章(pdf)或arXiv
- COCO实验设置描述
- BBOB研讨会系列
- 为获取COCO/BBOB新闻,请在此处注册
- 请参阅下方的链接,以了解更多关于COCO背后的想法
入门
运行实验
-
要在Python中运行实验,请遵循(新的)说明这里。
否则,从github下载 COCO框架代码- 通过点击下载ZIP按钮并解压缩
zip
文件, - 或者通过输入
git clone https://github.com/numbbo/coco.git
。这种方法可以轻松保持最新(但需要安装git
)。克隆后,git pull
将代码保持为最新版本。
- 通过点击下载ZIP按钮并解压缩
-
在系统shell中,
cd
到coco
或coco-<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
列出了所有可用的命令。 -
将文件夹
code-experiments/build/YOUR-FAVORITE-LANGUAGE
和其内容复制到另一个位置。在 Python 中,只需要复制文件example_experiment_for_beginners.py
或example_experiment2.py
。运行示例实验(它已经编译过了)。由于细节各不相同,请参阅相应的说明文件和/或示例实验文件。C
的说明文件 read me 和示例实验 example experimentJava
的说明文件 read me 和示例实验 example experimentMatlab/Octave
的说明文件 read me 和示例实验 example experimentPython
的说明文件 read me 和示例实验 example experiment2
如果示例实验可以运行,连接您喜欢的算法到 Coco:在示例实验文件中,将调用随机搜索优化器的调用替换为您算法的调用(见上文)。更新示例实验文件中观察者选项的
result_folder
、algorithm_name
和algorithm_info
。您自己的实验的另一个入口点是
code-experiments/examples
文件夹。 -
现在您可以在
bbob
和bbob-largescale
套件(对于单目标算法)、在bbob-biobj
套件(对于多目标算法)或混合整数套件(分别为bbob-mixint
和bbob-biobj-mixint
)上运行您喜欢的算法。输出将自动生成在指定的数据result_folder
中。目前,可能还有更多套件可用,请参见下文。
后处理数据
-
安装用于 显示 数据的后处理程序(使用 Python)
pip install cocopp
-
通过键入 后处理 本地运行实验的结果文件夹中的数据
python -m cocopp [-o OUTPUT_FOLDERNAME] YOURDATAFOLDER [MORE_DATAFOLDERS]
将搜索文件夹参数中的任何子文件夹以查找日志数据。也就是说,来自不同批次的实验可以收集在单个 "root"
YOURDATAFOLDER
文件夹下的不同文件夹中。我们还可以通过指定由不同算法生成的多个数据结果文件夹来比较多个算法。 -
我们还提供许多存档算法数据集。例如
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
)。 -
为了充分利用后处理模块的功能,建议在Python或IPython shell或Jupyter notebook或JupyterLab中使用该模块,其中
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.h
、example_experiment.c
和coco_internal.h
可能是开始调查代码的最好起点(但也可以参见这里)。coco_problem_t
定义了一个基准函数实例(在给定维度中),并通过coco_evaluate_function
调用。 -
通过将所有C代码合并/融合到一个单独的C文件
coco.c
和coco.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年。[pdf,arXiv]
@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
}
关于研讨会和数据的相关链接
- 广泛使用NumBBO/Coco框架的《BBOB研讨会系列》的跟踪信息可在此处找到。
- 许多算法的先前实验数据可在以下位置获得:
- https://numbbo.github.io/data-archive/bbob/,用于
bbob
测试套件 - https://numbbo.github.io/data-archive/bbob-noisy/,用于
bbob-noisy
测试套件 - https://numbbo.github.io/data-archive/bbob-biobj/,用于
bbob-biobj
测试套件,以及 - https://numbbo.github.io/data-archive/bbob-largescale/,用于
bbob-largescale
测试套件。
- https://numbbo.github.io/data-archive/bbob/,用于
- 在BBOB研讨会举办的每一年,后处理数据均可在https://numbbo.github.io/ppdata-archive找到。
- 通过此表格注册,以了解BBOB研讨会系列和NumBBO/Coco软件的发布信息。
- 通过以下绿色“克隆或下载”按钮下载此存储库
- ,或者
- 通过在命令行中输入
git clone https://github.com/numbbo/coco.git
或 - 通过在浏览器中访问https://github.com/numbbo/coco/archive/master.zip
完整的文档列表
-
一般介绍:在COCO:黑盒设置中比较连续优化器的平台(pdf)或arXiv中
-
测试平台
bbob
:在https://numbbo.github.io/gforge/downloads/download16.00/bbobdocfunctions.pdf中bbob-biobj
:在http://numbbo.github.io/coco-doc/bbob-biobj/functions/中bbob-biobj-ext
:在http://numbbo.github.io/coco-doc/bbob-biobj/functions/中bbob-noisy
(仅在旧代码库中):在https://hal.inria.fr/inria-00369466/document/中bbob-largescale
:在https://arxiv.org/pdf/1903.06396.pdf中bbob-mixint
:在https://hal.inria.fr/hal-02067932/document中bbob-biobj-mixint
:在https://numbbo.github.io/gforge/preliminary-bbob-mixint-documentation/bbob-mixint-doc.pdf中bbob-constrained
(进行中):在http://numbbo.github.io/coco-doc/bbob-constrained中
-
多目标测试平台的性能评估:在http://numbbo.github.io/coco-doc/bbob-biobj/perf-assessment/中
-
APIs
C
实验代码:在http://numbbo.github.io/coco-doc/C中- Python实验代码(模块
cocoex
):在https://numbbo.github.io/coco-doc/apidocs/cocoex中 - Python的简短实验代码示例
- Python的
example_experiment2.py
:在https://numbbo.github.io/coco-doc/apidocs/example中 - 后处理代码(模块
cocopp
):https://numbbo.github.io/coco-doc/apidocs/cocopp
-
有些过时的文档
-
一些结果示例。
依赖关系
~0–2MB
~40K SLoC