新手一步步学习黑盒优化算法,借助达摩院MindOpt的RABBO榜单【系列1/3】

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 这次达摩院MindOpt优化求解器团队出的「开发者福利」黑盒优化RABBO V1.0看起来挺有意思的,什么室黑盒优化呢?怎么借助这个榜单学习这个技术呢?

1 黑盒优化的概念

什么是黑盒优化?「黑盒优化问题」泛指目标函数难以从数学上解析表达,缺少可直接利用的梯度信息,仅可利用目标函数输入和对应输出函数值进行最优解搜索的优化问题。

太抽象,不懂,根据达摩院MindOpt的教程,它“通过获取不同控制参数(输入变量)对应的系统表现,来推断和搜寻优化解"、“可用于强化学习策略搜索、工业冶炼方案设计、计算资源额度预算优化等”。

云栖大会上王孟昌博士有讲解: https://yunqi.aliyun.com/2021/agenda/session170 在这个直播回放大约20分钟的时候,截图如下:
image.png
其中的黑盒优化的架构就像下面的图这样,我们假设我们要求解的问题不好描述,就把这个问题做成一个仿真系统,这个系统可以根据输入的变量值(“候选解”)来给出对应的评价(“观测值”),然后黑盒优化算法,就是接上这个仿真系统,通过不断地去提供候选解和得到观测值,来搜索可能的最优表现的候选解。
image.png

2 黑盒优化benchmark:RABBO

这次达摩院MindOpt优化求解器团队出的「开发者福利」RABBO V1.0看起来挺有意思的,题目集包含4种问题:
image.png

从这儿可以看到他们的网页介绍:https://tianchi.aliyun.com/specials/promotion/BlackBox
image.png

2.1 瞄一眼长长的文档

点击“查看文档”,会进入个长长的文档,供了解细节。提交评测实际是进的同一个页面,上面有一排tab不要错过,有“排行榜”和“提交结果”。太长,瞄一眼文档结构就行。
image.png

2.2 看git项目

image.png
点击首页的“下载数据”按钮,和数据列表的“guide.html.zip”文件,都会引导到阿里云家的git(code.aliyun.com),用阿里云的账号登录,第一次用需要根据指引把自己的账号设置好,账号折腾好后,在https://code.aliyun.com/mindopt001/RABBO 可以看到文件截图如下图。
image.png
点击“3.27MB”的图标,可以看到文件如下图:
image.png

2.3 下载它

然后根据自己的喜好下载它。考虑到官方好像在不停更新的样子,我们fork这个项目,在页面上点击“派生”,等待系统完成
image.png
image.png
这个页面会转很久很久,好像有bug的样纸。 点击左侧导航栏的“项目”就可以看到项目已经有了,地址是
https://code.aliyun.com/你的Username/RABBO,比如我的名字是wuyoy520。可以进项目设置将“可见等级”改成Private。
image.png
然后clone克隆到本地自己喜欢的文件夹内。

git clone git@code.aliyun.com:你的Username/RABBO.git

clone完了后,根据git指导来安装它,"Note: RABBO supports Python3.6 or newer." 由于我的python3是分开的指令所以我是这样做的:

cd RABBO
pip3 install -r requirements.txt
python3 setup.py install
pip3 install -e .

运行看结果的主程序示例程序在这儿:

python3 examples/experiment_example.py

image.png
最后的运行结果好像是不OK的,没解出来:
image.png

2.3.1 偷懒的换git账号方法

这里分享一个我切换git账号的偷懒方法:建立一个空的empty项目,然后里面会有Git全局设置参数,复制这两句到终端命令行运行。
image.png

3 参考文档,学习RABBO

3.1 RABBO V1.0 问题集

4个问题分别对应文件夹中的不同文件。在目录 blackbox_starter_kit -> problems文件夹下面。
image.png
只有4个文件夹,是因为里面的2 金属冶炼配比优化并没有开放直接下载,参与公开测评,也就是评分的分数里会有它。

3.2 步骤1,实现一个自己的算法,嗯,姑且先copy一个

前面说运行看结果的主程序示例程序examples/experiment_example.py,内容是:
image.png

直接不改的运行结果好像是不OK的,没解出来:
image.png

我们要改的文件在blackbox_starter_kit/algorithms/submission/submission_algorithm.py
image.png

里面有一些指导,我们先copy一份示例算法过来,示例算法在blackbox_starter_kit/algoriths/文件夹下的cmaes/cma_algorithm.pyrandom_search/random_search_algorithm.py
将cma的算法代码“有技巧”地拷贝至submission/submission_algorithm.py,不要动函数名,其他的copy进去。然后将examples/experiment_example.py中的算法改成选手算法:
image.png
运行,可以看到有类似的输出了,后续就在这个submission_algorithm.py改造自己的算法就行。

3.3 步骤2,额,上1步运行过了,改算法后面再研究,先跳过

3.4 步骤3,打包算法提交测评

文档写的很轻松的几句话,但是前面需要安装docker,点击进入标的链接,根据这个页面的内容来安装、开通容器镜像服务,打镜像,和推仓库。
image.png
首先,先安装docker;
然后,从https://www.aliyun.com/product/acr容器镜像服务ACR的产品页,开通进入“管理控制台”,如下图,创建个人版(免费)实例。根据文档指引,在页面上操作,创建一个私有的命名空间,然后再创建一个本地镜像仓库。
image.png

然后,回到rabbo的目录,运行sh build.sh来打包仓库:

cd RABBO
sh build.sh

由于我电脑多个Python版本,因此要进build.sh把python改成python3
image.png
然后我家的龟速网络就要漫长地等待了。。。
image.png
镜像打结束后,注意,最后一行显示:
naming to docker.io/library/mind-blackbox-bench:20211218,
复制mind-blackbox-bench:20211218,后面要这个ImageId。

然后,推镜像到仓库。从推镜像的指令在仓库里面复制更方便:
image.png
image.png
第一次推不晓得啥米原因它卡住了,然后取消了后重新推又很快就上去了。这时候刷新镜像版本就能看到多了个镜像啦。
image.png

最后,提交评测。提交结果的tab页。镜像的地址从奖项的基本信息里面拷贝公网的地址,并在后面加上刚刚提交的版本,如:0.1
image.png

提交了后,等待一会后,出现结果。
image.png
注意,如果前面一个没结束的时候重复提交,上一个任务会被停掉,之前提交的任务会获得一个“task terminated”的已经失败提示。
点击模型的超链接,会弹出日志先是各个分数。排行榜不是实时更新的,需要等待。
image.png
至此,整个流程走通了。

4 其他文

后面我会发如何去读官方参考算法代码,和如何研发自己的算法。
先立个flag:
1.《学习一下官方提供的两个参考算法和开源算法》
2.《改编一个自己的黑盒优化算法》

image.png

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
3天前
|
机器学习/深度学习 算法
深度学习中的优化算法:从梯度下降到Adam
本文深入探讨了深度学习中的核心——优化算法,重点分析了梯度下降及其多种变体。通过比较梯度下降、动量方法、AdaGrad、RMSProp以及Adam等算法,揭示了它们如何更高效地找到损失函数的最小值。此外,文章还讨论了不同优化算法在实际模型训练中的表现和选择依据,为深度学习实践提供了宝贵的指导。
15 7
|
13天前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
89 1
|
28天前
|
算法
基于GA-PSO遗传粒子群混合优化算法的CVRP问题求解matlab仿真
本文介绍了一种基于GA-PSO混合优化算法求解带容量限制的车辆路径问题(CVRP)的方法。在MATLAB2022a环境下运行,通过遗传算法的全局搜索与粒子群算法的局部优化能力互补,高效寻找最优解。程序采用自然数编码策略,通过选择、交叉、变异操作及粒子速度和位置更新,不断迭代直至满足终止条件,旨在最小化总行驶距离的同时满足客户需求和车辆载重限制。
|
7天前
|
算法 Python
群智能算法:灰狼优化算法(GWO)的详细解读
在优化问题中,寻找最优解是核心目标。灰狼优化算法(GWO)受到自然界灰狼狩猎行为和社会等级结构的启发,通过模拟Alpha(头狼)、Beta(助手狼)、Delta(支配狼)和Omega(普通狼)的角色,高效搜索最优解。本文详细解析GWO的原理与步骤,并提供Python代码实现,帮助读者理解并应用这一算法。
|
7天前
|
算法 Python
群智能算法:【WOA】鲸鱼优化算法详细解读
本文详细解读了鲸鱼优化算法(WOA),这是一种受鲸鱼捕食行为启发的新兴群体智能优化算法,具有强大的全局搜索能力和快速收敛速度。文章分为五个部分,分别介绍了引言、算法原理、主要步骤、特点及Python代码实现。通过模拟鲸鱼的捕食行为,该算法能够在复杂的优化问题中找到全局最优解。
|
29天前
|
算法 语音技术
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
|
1月前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
1月前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
1月前
|
算法
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。