如何为优化求解器设定基准?

news/2024/12/5 13:33:03/文章来源:https://www.cnblogs.com/testing-/p/18579668

比较求解器的最佳方法是什么?应该测量什么,如何测量?我应该关心硬件吗?让我们一探究竟!

简介

速度是数学优化求解器最重要的因素。基准测试需要三样东西:可靠的硬件、有代表性的测试数据、强大的测试设置。

将模型整理为文件夹中的 .mps 或 .lp 文件,并使用带有多个随机种子的 CLI 求解每个模型。如果方法得当,基准测试将改善优化项目的整体测试和部署。

让我们来谈谈性能

模型的性能取决于三个方面:

  • 硬件
  • 测试数据
  • 代码/测试设置

硬件

从 1991 年到 2015 年,机器的性能估计提高了 130 万倍。除此之外,我们还拥有多线程、总线速度改进、片上系统 (SOC),所有这些都让您的代码运行得更快。

现在的 10 秒 = 1991 年的 5 个月

这意味着:代码在哪里运行很重要!不同的机器会产生截然不同的运行时间,尤其是在云中:

  • 一般经验法则 一般原则:接近生产(BCPT),即在您希望以后在生产中运行的硬件上进行基准测试。
  • 请记住:在云计算中,您不知道您的模型运行在哪些实际硬件上,因此需要格外小心。这意味着要在一天中的不同时间进行多次运行,最好是在不同的可用性区域和地区。
  • 尽可能接近裸机:抽象层(虚拟机、Docker、Kubernetes 等)越多,引入的噪音就越大。

如何在基准测试中作弊:测试数据

基准测试的第一条规则是:测试集决定测试结果

测试集是做基准测试最 “有用 ”的部分。如果方法得当,您将有一个非常好的起点来跟踪应用程序的性能。哇哦!

这在实践中意味着什么?

  • 尽可能多的不同实例(至少大于 5 个,最好大于 15 个)
  • 尽可能多的不同实例,就像在现实生活中看到的那样:从小到大,涵盖代码中所有不同的设置组合
  • 但如果我只有一个或两个问题怎么办?那么你可以(a)努力工作以获得更多,或者(b)清楚地认识到这会带来巨大的统计偏差。如果求解器的启发式恰好在这一个实例中非常有效,那么它可能会骗过你。

代码/测试设置

实际测试什么?大体上有两种选择:

  • [首选] 纯求解:向求解器提供 .mps 或 .lp 文件,求解器求解,然后测量输出。
  • 代码求解:运行一些代码,建立并运行模型,然后测量输出结果。

主要区别在于,在方案 1 中,输出结果(无论是时间还是最优性差距)完全由求解过程产生,而在方案 2 中,我们在求解过程本身的基础上又增加了一层。

这意味着你需要确保你拥有相同的版本、数据库连接和延迟等。

参考资料

  • 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
  • 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
  • python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
  • Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html

完成任务:实际基准测试

如果您的基准测试只涉及单个模型的求解,那么基准测试的最佳工作流程如下:

  • 将所有模型文件放在一个文件夹中
  • 使用命令行界面,用 3-5 个不同的随机种子运行该文件夹中的每个文件和所有要测试的求解器
  • 保存日志文件并提取有关运行时间的信息。

著名的 Mittelmann 基准就是一个很好的例子,您可以在其中看到所有日志等信息。

使用多个随机种子(最少 3 个,最好 5 个)运行所有基准非常重要。这样就可以平均掉伪随机数生成器的噪声。如果您想了解有关此主题的详细内容,请留言评论。

但如果我的设置不那么简单呢?

我见过不少无法轻松完成基准测试的情况。一个常见的例子是,你必须连续解决多个优化问题,而一个问题的输出是另一个问题的输入。

在这种情况下,您需要编写代码来完成基准测试。此外,这类基准测试明确不包括模型构建时间。如果模型构建时间较长(> 20%),那么这也应该是基准的一部分。
我应该调整求解器吗?

我应该调整求解器吗?

所有求解器都有可以调整的参数:公差、算法选择或在不同部分花费的时间等。这对求解时间的影响有时很小,有时却很大(从无解到找到解)。这就引出了一个问题:

  • 如何调整?我将就此单独撰写一篇博文,敬请关注:)
  • 我应该比较已调整还是未调整的求解器?

实际的答案是,你应该做你有时间做的事。当你拥有丰富的经验时,你就能很快判断出是否有明显的问题需要解决,但即便如此,调整也是非常耗时的。

有些解题者会主动提出为你调试,我总是会接受他们的提议,哪怕只是想看看有什么可能。假设求解器 A 帮你调整了模型,并告诉你原始单纯形是进行根松弛的方法。然后你就可以在求解器 B 中使用这些信息,看看是否也会产生不同的结果。

有些参数无法在求解器之间转换。不过,即使这样也很有价值,因为这可能会成为该求解器的竞争优势。

结论

制定基准很难。但它背后蕴含着科学和技术。因此,只要你有良好的测试数据,尽可能保持硬件设置的整洁,并用足够多的随机种子测试代码的正确部分,你就能得到可靠的答案。

我认为这很有趣!这就像去赛车场,但你可以和赛车一起玩。然后坐下来,看看谁最适合你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846474.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读数据保护:工作负载的可恢复性03构建自己的框架

构建自己的架构1. 构建自己的框架 1.1. 数据保护工作会影响本组织的各个方面1.1.1. 听取各种人员的意见并征得他们的同意,其中有技术人员,也有非技术人员1.1.2. 建立各种评审委员会(review board)1.2. 文档模板1.2.1. 目标阐述1.2.1.1. 尽可能简洁地阐述这份文档的目标,篇幅…

【甲方安全】工业行业:专家必备测试工具与安全资源概览

工业控制系统(ICS)工具 本文介绍了工业控制系统(ICS)安全专家常用的测试工具和安全资源。它涵盖了多种工具,包括网络安全评估、网络拓扑绘制、协议测试、仿真和分析工具,如CSET、GRASSMARLIN、ModbusPenetrationTestingFramework等。此外,文章还列举了多种安全发行套件和…

Conpot:一个开源的工控系统蜜罐

Conpot 是一个 ICS 蜜罐,目的是收集有关针对工业控制系统的对手动机和方法的情报。 使用 Docker 快速安装 安装Docker docker pull honeynet/conpot docker run -it -p 80:80 -p 102:102 -p 502:502 -p 161:161/udp --network=bridge honeynet/conpot:latest /bin/sh conpot -…

【甲方安全】工业行业+如何建设安全防护体系

一、工业控制系统安全现状1.1 工业控制系统概念1.2 工业控制网络发展历程1.3 从国家政策看工业安全重要性1.4 从微软系统蓝屏事件看工控风险1.5 从震网时间看黑客攻击路径 1.6 从2022年工业行业安全攻击态势看风险1.7 工控安全可能面对的挑战二、工业控制系统指南解读三、工控…

【攻防技术系列】反弹Shell

一、Linux -> Windows1.1 反向连接1.1.1 nc反连1.1.2 PowerShell反连1.1.3 利用编程语言反连1.2 正向连接二、Windows -> Linux2.1 反向连接2.1.1 nc反连2.1.2 Bash-i连接2.1.3 Perl反连2.2 正向连接总结免责声明: 请勿使用本文中提到的技术进行非法测试或行为。使用本文…

来玩游戏吗?能在线陪玩的那种。

在游戏世界的广阔天地里,选择一款优质的游戏盒子 APP 如同手握一把金钥匙,能够轻松解锁无限的游戏乐趣。今天为大家推荐一款全新的游戏盒子。这款精选的游戏盒子将带你走进精彩纷呈的游戏世界,体验前所未有的游戏魅力! 17 互娱 app 17 互娱游戏盒子是最新款游戏盒子。拥有超…

机器学习:神经网络构建(下)

在上一篇文章《机器学习:神经网络构建(上)》中讨论了线性层、激活函数以及损失函数层的构建方式,本节中将进一步讨论网络构建方式,并完整的搭建一个简单的分类器网络。简介 在上一篇文章《机器学习:神经网络构建(上)》中讨论了线性层、激活函数以及损失函数层的构建方式…

HCIP-18 MPLS LDP原理与配置

MPLS体系有多种标签分配协议,LDP标签分配协议是这些协议中使用较广的一种。 LDP是LSR之间协商标签含义的过程。LDP协议使用发现、会话、通告、通知四类报文进行会话的建立和标签的分发。 LDP通过标签发布方式、标签分配控制方式和标签保持方式来决定标签的发布和管理。华为数通…

centos7安装docker-ce

下载docker-ce repo curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo安装依赖 yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7.5/x86_64/stable/Packages/containerd.io-1.4.8-3.1.el7.x86_64.rpm安装…

虚拟机苹果系统IM群发,苹果iMessage群发软件,iMessage协议版自动群发完美实现

一、PC电脑版苹果系统(Mac OS)上实现imessage群发总结为以下几种方式: /*MacOS苹果系统,正常情况下,只能安装到苹果公司自己出品的Mac电脑,俗称白苹果,不能安装到各种组装机或者其他品牌的品牌机上,黑苹果的的原理,就是通过一些 “破解补丁” 工具欺骗macOS系统,让苹果系统…

docker-配置镜像服务

镜像加速器配置 默认情况下,Docker是从Dcoker Hub上下载镜像资源,但由于该站点在国外,因此下载速度很慢,可以通过配置国内镜像加速器来解决,本文以阿里云镜像加速器为例,讲解在CentOs7系统下如何给Docker配置阿里云镜像加速器。 Docker Hub官网:https://hub.docker.com …

天梯赛练习集 L2-049 鱼与熊掌 查找

好简单,一开始随便二分一下,没想到也能过,算了时间复杂度1e10 思路:存储每个人拥有物品,查询每一个人是否两个物品都有. #include<bits/stdc++.h> using namespace std; vector<set<int>>vc; int main() {int n,m,x,y,cot;cin>>n>>m;for(int…