MindOpt Tuner调参器,提升求解速度、性能(二)

简介: MindOpt Tuner是达摩院决策智能实验室基于mindopt优化求解器研发的调参器,超参自动优化工具,它可以帮助运筹优化工程师在使用求解器时自动搜索最佳参数组合,尝试不同的参数组合,评估每组参数的性能,然后基于这些结果来确定最佳参数。这样可以大大减少手动调整参数的时间和精力,并且可以帮助提升求解性能。

Python调用


上一篇中讲解了如何使用命令行来调用和查询结果。里面的接口都有封装为Python接口,我们可以输入如下指令引入文件,也可以再输入help指令来查看对应的Python API说明:

import mtunerpy as mtuner
#help(mtuner)
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k

这里我们可以如下方式来提交任务:

scenario_dict = {
    'solver': 'cbc',
    'problem': ['./model/nl_train_1.nl'],
    'max_tuning_time': 600
}
mtuner.create_task(scenario_dict)
Problem file "nl_train_1.nl" uploaded successfully.
Task #438397484918644736 created succesfully.

这里小编得到任务ID:438394637284024320

类似地,我们还可以提交一组优化问题算例mps_train_oss.txt进行调参。

如下,得到任务ID 438394766997069824

scenario_dict = {
    'solver': 'cbc',
    'problem': ['./model/mps_train_oss.txt'],
    'max_tuning_time': 3600
}
mtuner.create_task(scenario_dict)
Task #438397553394851840 created succesfully.

运行成功后,我们可以通过如下方式获取结果。可以看到和命令行的结果一样,都可以得到比较多的求解效率提升。

import mtunerpy as mtuner
#print("----调参状态和文件---")
#mtuner.task_status(['438394637284024320','438394766997069824'])
print("----nl_train_1.nl调参效果---")
mtuner.fetch_result('438394637284024320','result/performance.txt')
print("----一组3个问题调参效果---")
mtuner.fetch_result('438394766997069824','result/performance.txt', False)
----nl_train_1.nl调参效果---
Tuning finished, the best wallclock_time is 0.09 [** 36.33x improvement **]
----一组3个问题调参效果---
Tuning finished, the best avg_wallclock_time is 3.83 [** 33.32x improvement **]

调参的进阶用法


前面主要讲解调参的基础用法。提交任务的时候,通过选择了求解器后,由MindOpt Tuner来给出调参任务的默认设置来进行调参。比如页面提交,可以不用参数填写的格子,直接使用。


除此之外,我们还可以设置调参的任务。详情我们可以查看用户文档的调参任务配置


这里我们先-h一下查看接口的说明:

!mindopt-tuner create-task -h
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k
MindOpt Tuner v0.9.0 (Build: 20230404)
Usage: mindopt-tuner create-task [-h] --solver {cbc,cplex} --problem <problem> [<problem> ...]
                                 [--parameters <parameters> [<parameters> ...]] [--log-level {info,debug,error}]
                                 [--verbose {0,1,2}] [--tuning-objective {wallclock_time,cpu_time}]
                                 [--max-distinct-para-combos <number>] [--max-tuning-time <seconds>]
                                 [--max-eval-time <seconds>]
Create a new tuning task, and then start it.
Arguments:
  -h, --help                                    Show help information.
  --solver {cbc,cplex}                          (Required) Specify the solver to tune.
  --problem <problem> [<problem> ...]           (Required) Path to the optimization problem file(s), separated by space.
  --parameters <parameters> [<parameters> ...]  Specify the solver's tunable parameters (see documentation), separated
                                                by space.
  --log-level {info,debug,error}                Log detail level.
  --verbose {0,1,2}                             Set verbosity level.
  --tuning-objective {wallclock_time,cpu_time}  Select the tuning objective.
  --max-distinct-para-combos <number>           Tuning will be terminated after the number of distinct parameter
                                                combinations reach this number.
  --max-tuning-time <seconds>                   Tuning will be terminated after surpassing this time (in seconds) 1, 2,
                                                ..., 3600000.
  --max-eval-time <seconds>                     Maximum time allowed for a single evaluation in seconds 1, 2, ...,
                                                144000).

这里我们自定义这些参数。

这里可以举个cbc相关的例子。比如默认参数定义文件内容是test_cbc_params.txt


cuts {off, on, root, ifmove, forceOn}[on] # Switches all cut generators on or off. cat
preprocess {off, on, save, equal, sos, trysos, equalall, strategy, aggregate, forcesos}[sos] # Whether to use integer preprocessing. cat
heuristics [0, 1][1]i # Switches most primal heuristics on or off. boolean
strongBranching [0, 5][5]i # Number of variables to look at in strong branching. int
trustPseudoCosts [-3, 100][10]i # Number of branches before we trust pseudocosts. int

这里是遵循 参数名 取值范围 默认值的格式来,最后面的[10]i指的是整型变量。


特别提醒 :无特殊需求不需要动这个参数,取值错误等都会导致调参任务异常。


这里,我们可以将这个参数、里面选取部分参数来条,比如:我们可以通过如下指令来自定义自己的调参范围,只调2个参数,还可以减少调参时间


!mindopt-tuner create-task --solver cbc --problem './model/nl_train_1.nl' --max-tuning-time 400 --parameters cuts preprocess
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k
Problem file "nl_train_1.nl" uploaded successfully.
Task #438413495201964032 created succesfully.

小编这里得到taskID438413495201964032

求解完后,我们可以通过如下方式获取结果,也可以直接访问页面端作业列表。

image.png

从结果看,缩小调参的范围,也会有提升结果!提速了32倍!

#图中结果提速了12.6倍。

#print("-------查看状态和results文件链接--------")
#!mindopt-tuner task-status --task-id 438413495201964032
print("-------本地的提交结果--------")
! mindopt-tuner fetch-result --task-id 438413495201964032 --file result/performance.txt
-------本地的提交结果--------
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k
Tuning finished, the best wallclock_time is 0.1 [** 32.00x improvement **]
目录
打赏
0
0
0
0
73
分享
相关文章
优化问题之如何选择合适的优化求解器
优化问题之如何选择合适的优化求解器
MindOpt Tuner调参器,提升求解速度、性能(一)
优化求解器往往拥有很多配置参数,例如启发式方法的开关、割平面方法的开关、预处理的配置以及各种误差容忍度等等。MindOpt Tuner会尝试不同的参数组合,评估每组参数的性能,然后基于这些结果来确定最佳参数。这样可以大大减少手动调整参数的时间和精力,并且可以帮助提升求解性能。
MindOpt Tuner调参器,提升求解速度、性能(一)
内测邀请!达摩院 MindOpt Tuner 调参器新功能
最近阿里巴巴达摩院的MindOpt团队开发了一款优化调参器,叫做MindOpt Tuner。它是一种自动优化工具,可帮助运筹优化工程师在使用求解器时自动搜索最佳参数组合。我们非常重视用户反馈和测试,因此希望能够邀请您成为MindOpt Tuner的测试用户之一。我们在 MIPLIB2017 Benchmark Set 上进行了测试。测试结果显示,经过调参后的Cbc求解器的速度可以有显著的提升:使用默认参数需要几十分钟解出的问题,调参后可以在1分钟内解出。
329 0
内测邀请!达摩院 MindOpt Tuner 调参器新功能
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
### MindOpt 优化求解器月刊(2024年3月) - 发布亮点:MAPL建模语言升级至V2.4,支持云上无安装使用和向量化建模语法。 - 新增功能:Linux用户可本地安装`maplpy`,并支持Python与MAPL混编。 - 实例分享:介绍背包问题的组合优化,展示如何在限定容量下最大化收益。 - 用户投稿:探讨机票超售时的最优调派策略,以最小化赔付成本。 - 加入互动:官方钉钉群32451444,更多资源及。 [查看详细内容](https://opt.aliyun.com/)
135 0
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
|
8月前
|
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
265 3
阿里达摩院MindOpt求解器V1.1新增C#接口
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
阿里达摩院MindOpt优化求解器-月刊(2024年4月)
【摘要】2024.04.30,阿里云发布了MindOpt优化求解器的新商品和功能。MindOpt现在已上架,提供超低价零售求解器,支持按需购买,可在阿里云平台上直接购买联网或不联网License。新版本V1.2发布,提升MILP性能,并增加PostScaling参数。此外,MindOpt Studio推出租户定制版,正处于邀测阶段。同时分享了使用MindOpt解决二分类SVM问题的案例。更多内容,可访问相关链接。
196 0
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
智慧楼宇多目标调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了使用MindOpt工具优化智慧楼宇的多目标调度问题,特别是在虚拟电厂场景下的应用。智慧楼宇通过智能化技术综合考虑能耗、舒适度等多目标,实现楼宇设备的有效管理和调度。虚拟电厂作为多能源聚合体,能够参与电力市场,提供调峰、调频等辅助服务。文章介绍了如何使用MindOpt云上建模求解平台及MindOpt APL建模语言对楼宇多目标调度问题进行数学建模和求解,旨在通过优化储能设备的充放电操作来最小化用电成本、碳排放成本和功率变化成本,从而实现经济、环保和电网稳定的综合目标。最终结果显示,在使用储能设备的情况下,相比不使用储能设备的情形,成本节约达到了约48%。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等