跳到主要内容

GOpt 使用帮助文档

1. 产品简介

​ GOpt(Global Optimizer)智能进化计算平台是由雪浪云与国内计算智能领域内硕果累累的安徽大学张兴义教授课题组共同打造的明珠产品,其由领域主流平台 PlatEMO 原班人马参与打造,继承了其拓展性强、易于使用等优点,同时GOpt在产业界应用方面有着强大的算力支持以及提供云服务等更大优势。GOpt 以雪浪OS为基座,集成领域内百余种最先进的元启发式算法,构建统一的算法评价体系;实现一站式的优化模板复用与快速扩展及适配;采用完全自主可控的计算架构与超强算力,助力关键技术国产化替代。

​ GOpt 平台建立了产学研三界一体的全方位产品、生态、应用布局。在智能制造领域,提供了适用范围广、优化性能强的元启发式算法,解决关键场景中的核心业务决策的问题;在人才培养领域,提供了可视化交互界面与强大的算法学习、测试功能,提升了代码的复用性,降低了算法的测试代价;在科学研究领域,提供了学术界最前沿的算法库及完善的拓展功能,实现研究人员对于科研工具与实验平台的多元需求。

​ 本平台是一个用于求解复杂优化问题的工具,它的输入是一个优化问题,输出是在该优化问题上得到的最优解。一个优化问题满足以下定义: 其中 表示该问题的一个 决策向量,它由 D 个 决策变量 组成,其中每个决策变量可能被限制为实数、整数或二进制数等。Ω 表示该问题的 搜索空间,它由 下界上界构成,即任意决策变量始终满足

表示该解的 M 个 `目标函数` 值,表示该解的 K 个 `约束违反` 值。

为了定义一个优化问题,用户至少需要输入以下内容:

  • 决策变量的数目 D 和目标函数的数目 M;

  • 决策变量的编码方式(实数、二进制数或序列);

  • 决策变量的下界和上界

  • 至少一个目标函数

为了更精准地定义问题,用户还能输入以下内容:

  • 多个目标函数

  • 多个约束函数

  • 解的初始化函数;

  • 无效解的修复函数;

  • 各函数计算中使用到的数据集(一个全局常量)。

以上函数均指的是代码函数而非数学函数,即它需要有符合规定的输入和输出,但不需要有显式的数学表达式。此外,用户还能定义与优化算法相关的内容,通过选择合适的算法和参数设置以提升优化效果。

2. 首页导航

用户可通过 https://xlos.xuelangyun.com/进行登录,如未注册账号可在页面提示下进行注册,登陆后可以进入如下界面

导入 : 导入项目压缩包,项目分享的一种方式

创建项目: 创建一个新的项目

创建文件夹: 创建一个新的项目文件夹

回收站: 可查看近期删除的项目

搜索: 可关键词搜索项目

单击项目名称: 可查看项目预览图、项目 ID、创建时间、修改时间等信息

双击项目名称: 可进入 GOpt 项目搭建页面

右击项目名称: 可进行重命名、复制、删除、移动、导入、导出、分享等操作

3.GOpt基础知识介绍

3.1 GOpt模板搭建流程

GOpt 模板是一个完整的项目工程,以(前、后面板)组件的形式,描述数据生命线逻辑,其中包含组件处理逻辑和数据流通关系,各组件之间以实线连接,能够实现某一场景需求。

流程:创建项目——后面板/前面板组件编排——节点参数调节——项目信息配置——业务逻辑连线——部署运行——项目/节点调试——部署运行

3.2 GOpt模板调试

算盘模板调试包含项目调试和节点调试

项目调试

执行日志——可查看模板中各节点的运行日志,点击单个节点日志可查看详细日志信息

实时数据——可查看模板中各节点的实时数据,包含节点 ID、节点名称、组件 ID、时间、端口 ID、端口名称、内容等信息

运行分析——可查看模板中各节点的运行情况

节点调试

执行日志——查看节点日志进行调试

配置——部署运行后进行高级配置

组件参数调试——节点属性、运行调优、输入桩、输出桩、数据接收方式等

3.3 组件参数介绍

组件参数包括节点属性、运行调优、输入桩、输出桩、数据接收方式等通用参数,其它参数因组件差异略有增减。

  • 节点属性:配置节点的图标、颜色、大小等信息
  • 运行调优:启动容器数、每个容器 CPU 核数、每个容器内存数
  • 输入桩:上一个节点的数据由输入桩输入,节点输入桩可增加个数,输入桩信息包含端口名称、输入类型、具体类型、是否显示、自动接收同类型数据
  • 输出桩:节点数据由输出桩输出到下一节点,节点输出桩可增加个数,输出桩信息包含端口名称、输出类型、具体类型、是否显示
  • 数据接收方式:同步接收和异步接收,新建节点默认为异步接收
  • 当组件有多个输入时,异步接收——单个输入到达即触发计算,同步接收——所有输入到达才触发计算。

3.4 拓展工具列表

详见雪浪算盘帮助文档—组件手册篇

3.5 我的组件

包含分享给我的组件和我的组件,分别显示被分享的组件和自主创建的组件列表

3.6 画布节点列表

展示项目中使用的所有组件节点列表,单击节点名称可在画布区高亮显示,便于查找

4. 使用方法

进入项目后首先进入的是问题的选择界面,在该界面可以选择内置的测试问题进行测试,通过图二中 A 区域对测试问题进行筛选,同时用户也可以生成自定义问题。

4.1 求解内置问题

1) 从左侧内置问题的列表中选定一个内置问题,通过拖拽的方式将其拖入后面板(图二 B 区域)中,然后选中该测试问题(图三以 ZDT1 为例),右侧(图三 A 区域)会出现该测试问题的一些可设置参数,如决策变量维度等,部分测试问题可以设置其目标数。

2) 选定问题后,从最左侧工具栏(图四 A 区域)按钮进入算法筛选界面,同样是通过左侧的标签按钮来筛选对应属性的算法,在筛选算法时请务必保证第一步中选择的问题与选择的算法标签一致,选定某个算法后,可以通过拖拽的方式将选定的算法拖入后面板中,然后点击选中算法组件,并配置算法相应的参数(图四 B 区域),每一个算法都有自己的默认参数,可以无需设置。

3) 将测试问题与算法的参数配置完成后,将算法组件左上角的输入接口与测试问题组件右边的输出接口相连(如图五 A 区域所示),并点击页面中右上角的运行按钮(图五 B 区域),即可运行程序。当测试问题与算法的标签不匹配时连线上将会出现提示;

4) 项目运行成果后再次选中算法组件,将会看到如下图所示界面,右边算法组件的拓展部分作为运行效果的展示,可以通过点击下图中红色框内的拓展按钮(图六 A 区域)将该效果展示在另外一个页面中打开,以达到更好的观看效果。

5) 点击开始(图六 B 区域)即可在 ZDT1 上运行 NSGA2 算法

4.2 求解自定义问题

1) 在问题列表选择自定义问题组件(图七 A 区域)并将其拖入后面板中

2) 在算法筛选界面中选择需要定义问题类型匹配的算法拖入到后面板中,并将算法组件与自定义问题组件的输入输出相连。

3) 运行该项目,在项目运行成果后,选中自定义问题组件,自定义问题组件的界面将会在界面右侧(图九 A 区域)显示,建议点击拓展按钮到另一个界面进行问题的定义。

4) 对于一个自定义问题,至少需要指定决策变量长度、决策变量上下界、目标值函数才能构建一个最基本的用户自定义问题。在该组件的左下角,给出了把八种基本自定义问题的模板,以供用户参考。

5) 对于自定义问题,用户可以根据需要通过新增或者删除按钮来调整问题的目标数、约束数等内容,值得注意的是,在定义目标时,定义函数的内容需要满足 python 科学运算的语法,并且该目标函数是基于一个行向量(即一个长度为 D 的矩阵)进行运算。在完成自定义问题后,用户可以通过点击自定义问题组件详情界面右下角的验证按钮来进行问题的验证,若问题定义正确则会显示验证成功,此时可以转到项目界面,点击算法组件来运行算法。

6) 转到算法组件的详情页后,点击开始后算法即可求解自定义问题,结果展示如下图所示。

5.详细说明

5.1 标签

​ GOpt 的内置算法以及问题都带有标签,所有的标签列举如下:

​ 每个算法可能含有多个标签集合,这些集合的笛卡尔积构成该算法可求解的所有的问题类型。例如当标签集合为 < 单目标 >< 实数 >< 约束/无 > 时,表示该算法可求解带或不带约束的单目标连续优化问题;若标签集合为 < 单目标 >< 实数 >,表示该算法只能求解无约束问题;若标签集合为 < 单目标 >< 实数 >< 约束 >,表示该算法只能求解有约束问题;若标签集合为 < 单目标 >< 实数/二进制 >,表示该算法可以求解连续或二进制优化问题。每个算法和测试问题都需要被添加至少一个标签,否则它将不会在图形界面的列表中出现。

5.2 内置问题组件

目标数:设置问题的目标函数个数。不同问题函数表达式不同,设置目标数,可以产生对应数量的目标函数,至少需要定义一个目标函数。

决策变量长度:定义待优化的决策向量的格式,其中决策变量的长度 D 需要用户设置或者使用内置问题的默认值。

其他参数:内置问题中包含某些内置问题有特定参数,用户可以自行根据提示设置其内容,也可使用默认值。

5.3 算法组件

模式:用户通过下拉框设置算法的模式。其中学术模式,用户可以使用各种内置问题组、使用自定义问题组件自行设置问题或者使用 web input 组件通过输入自定义问题的各个参数进而求解自定义问题。

种群大小:求解该问题的算法的种群大小,即初始解的数量。

最大评价次数:求解该问题可使用的最大评价次数,算法中每求解一次目标值,评价次数加 1,用户可设置最大评价次数,当算法达到最大评价次数,算法终止。

其他参数:内置算法中某些算法有特定的参数,这些参数对算法的结果有一定的影响,用户可以根据提示自行设置其内容,也可使用默认值。

5.4 自定义问题组件

对于一个自定义问题,自定义组件提供了八种类型的自定义问题模板以供用户使用。 用户根据需求可以选择不同类型去定义问题,也可以导入问题。

A)若用户使用组件内各模块进行问题定义,具体过程可详见 4.2 节。

​ 用户首先在区域 A 中设置决策变量长度和编码类型;其次在区域 B 中给定决策变量的上下界;对于一个复杂问题,用户可在区域 C 中编辑或上传数据集,格式为 CSV/TXT 固定格式读取矩阵数据;用户在区域 D、E、F、G 中确定各类函数。

在定义好问题后,可以点击验证按钮,自定义问题组件会自动验证该问题是否合法。另外用户也可将定义好的问题按 json 类型导出。

​ 下面是对各模块含义的详细介绍:

决策变量:定义待优化的决策向量

的格式,包括变量的数目 D 以及变量的编码方式。

决策上下界:决策变量的取值范围,即搜索空间,定义所有决策向量的上下界范围,其中上、下界均为 1×D 的向量。当一个决策变量越界时,它将被自动设为相应的边界值。当决策变量为二进制或序列编码时,该设置无效。

数据集:定义所有函数计算中使用到的复杂数据,它可以是一个任意类型的变量、或是一个仅包含矩阵数据的文本文件。数据集将作为所有函数的第二个输入参数传入,并在函数中任意使用。数据集可以被省略,此时所有函数仅有一个输入参数。

种群初始化函数:定义一个种群初始化函数,用于产生多个不同的初始解。该函数的输入为产生的决策向量的数目 N(一个正整数),输出为产生的初始决策向量的集合 (一个 N*D 矩阵)。通常,优化算法在开始时会调用该函数。该函数可以被省略,此时优化算法将根据变量的类型随机地产生初始决策向量。

无效解修复函数:定义一个修复函数,用于修复非法的解。该函数的输入为一个决策向量 x(一个 1×D 向量),输出为修复后的决策向量 (一个 1×D 向量)。通常,优化算法在产生解之后会调用该函数。该函数可以被省略,此时将不会进行修复操作。

目标函数:定义一或多个目标函数,用于计算解的目标值。每个目标函数的输入为一个决策向量 x(一个 1×D 向量),输出为解在该函数上的目标值 (一个标量)。通常,优化算法在产生解之后会调用该函数。至少需要定义一个目标函数。所有目标函数均为最小化目标。

约束函数:定义零或多个约束函数,用于计算解的约束值。每个约束函数的输入为一个决策向量 x(一个 1×D 向量),输出为解在该函数上的约束违反值 (一个标量)。通常,优化算法在产生解之后会调用该函数。该函数可以被省略。当且仅当约束违反值小于等于零时,该约束条件被视为满足。

​ B)若用户导入问题文件,文件需为 json 类型,点击自定义问题组件下方的导入按钮,选择问题文件即可。提供一个实例:

{
"name":"custom_problem",
"encoding":"real",
"n_var":30,
"lower":"0",
"upper":"1",
"variables":{
"g":"1 + 9 * mean(x[1:])",
"h":"1 - sqrt(x[0] / g)"
},
"initFcn":[

],
"decFcn":[

],
"objFcn":[
"x[0]",
"g * h"
],
"conFcn":[

]
}

​ Json 文件中各变量介绍如下表所示:

encoding: 表示问题的编码方式,它的值可以是 real(实数或整数变量)、binary(二进制变量)或 permutation(序列变量)。算法针对不同的编码方式会使用不同的算子来产生子代。

objFcn: 表示问题的目标函数列表,列表中每一个字符串代表着一个目标函数的计算式,其中由 x 代表决策变量,该计算式需要满足 python 数学运算的语法,该列表的长度至少需要为 1。

conFcn: 表示问题的约束列表,列表中每一个字符串代表着一个约束函数的计算式,该计算式需要满足 python 数学运算的语法,当且仅当约束违反值小于等于零时,约束被满足,如有多个约束,以逗号分隔。

lower: 表示决策变量的下界,它仅在 encoding 的值为 real 时生效,可以缺省,默认为负无穷大。

upper: 表示决策变量的上界,它仅在 encoding 的值为 real 时生效,可以缺省,默认为无穷大。

initFcn: 表示种群初始化函数,它代表着种群的初始化方式,可以缺省,默认在决策变量的范围内随机初始化。

decFcn: 表示无效解修复函数,它代表遇到无效解(决策变量越界)时对解进行修复的方式,该函数会在计算目标函数前被调用,可以缺省,默认对越界值赋以较近的上界或下界。

variables: 表示中间变量,它是一个列表,其中的值应该以 key-value 的形式出现,当目标值函数过于复杂或者在其他计算式中有着公共的部分,可以写做中间变量,value 对应中间变量的字符串,key 可以在其余计算式中进行引用。

5.5 自定义问题组件求解实际问题实例

​ 以一个车辆性能优化问题 DDMOP1 问题为例,该问题是一个轿车驾驶室设计,具有 11 个决策变量和 9 个目标,具体细节参考论文。它是一个超多目标的实际问题,多个目标之间的优化难以平衡,如何使这些目标尽可能的达到最优是难点所在。决策变量包括车身的尺寸和固有频率的界限,例如 B 柱内部的厚度、车身侧面内部的厚度、门梁的厚度和护栏高度。 同时,这九个指标表征了汽车驾驶室的性能,如汽车的重量、燃油经济性、加速时间、不同速度下的道路噪声和汽车的宽敞程度。所谓的决策变量在该问题中就是车身的尺寸和固有频率的界限等,决策变量长度是这些信息的数量,上下界是这些信息的范围,如车身尺寸等等;该问题的 目标是针对汽车驾驶室的性能,如汽车的重量、燃油经济性、加速时间、不同速 度下的道路噪声和汽车的宽敞程度等,其中每个目标函数对应一个目标。

​ 其中 11 个决策变量包括 7 个决策变量和 4 个随机参数

​ 括号中的数量表示每个变量的范围。待优化目标的数学表达式表述如下:

​ 对于此类复杂实际问题,用户明确优化目标和各个决策变量后,需要根据优化目标确定目标函数。

​ 下面是如何使用自定义问题组件求解该车辆性能优化问题。初始具体操作流程可见章节 4.2 图九部分。因为车辆性能优化问题 DDMOP1 是一个超多目标问题,用户可在自定义问题组件下方的 8 个基本类型中选择“超多目标问题”。对于 DDMOP1,事先知道其 11 个决策变量的长度、范围,即车身的尺寸和固有频率的界限等,用户可在章节 5.4 图十三中区域 A 和 B 中决策变量和决策上下界一栏中将之输入。 如图所示:

​ 该实际问题未用到其他数据,数据集一栏可省略。

​ 对于该问题种群初始化函数及无效解修复函数可使用算法内置函数。这里说的种群初始化函数指的是随机生成一组数据的方法;无效解修复函数是指对于上 述所限定的决策变量范围,若产生的数据不符合该范围时,使用哪些函数去修复数据。

​ 目标函数这一栏用户需要将上述车辆性能优化问题 DDMOP1 的 9 个函数表达式通过 python 语句编译并输入至章节 5.4 图自定义问题组件区域 F 中。

​ 每个目标函数输入内容如下:

f1(x) = 1.98 + 4.9 * x[0] + 6.67 * x[1]+ 6.98 * x[2]+ 4.01 * x[3]+ 1.78 * x[4]+ 0.00001 * x[4]+ 2.73 * x[1];

f2(x) = 1.16 - 0.3717 * x[1] * x[3] - 0.00931 * x[1] * x[9] - 0.484 *x[2] * x[8] + 0.01343 * x[5] * x[9]

f3(x) = 0.261 - 0.0159 * x[0] * x[1] - 0.188 * x[0] * x[7] - 0.019 * x[1] * x[6] + 0.0144 * x[2] * x[4] + 0.87570 * x[4] * x[9] + 0.08045 * x[5] * x[8] + 0.00139 * x[7] * x[10] + 0.00001575 * x[9] * x[10]

f4(x) = 0.214 + 0.00817 * x[4] - 0.131 * x[0] * x[7] - 0.0704 * x[0] * x[8] + 0.03099 * x[1] * x[5] - 0.018 * x[1] * x[6] + 0.0208 * x[2] * x[7] + 0.121 * x[2] * x[8] - 0.00364 * x[4] * x[5] + 0.0007715 * x[4] * x[9] - 0.0005354 * x[5] * x[9] + 0.00121 * x[7] * x[10] + 0.00184 * x[8] * x[9] - 0.018 * x[1] ** 2

f5(x) = 0.74 - 0.61 * x[1] - 0.163 * x[2] * x[7] + 0.001232 * x[2] * x[9] - 0.166 * x[6] * x[8] + 0.227 * x[1] ** 2

f6(x) = 109.2 - 9.9 * x[1] + 6.768 * x[2] + 0.1792 * x[9] - 9.256 * x[0] * x[1] - 12.9 * x[0] * x[7] - 11 * x[1] * x[7] + 0.1107 * x[2] * x[9] + 0.0207 * x[4] * x[9] + 6.63 * x[5] * x[8] - 17.75 * x[6] *x[7] + 22 * x[7] * x[8] + 0.32 * x[8] * x[9]

f7(x) = 4.72 - 0.5 * x[3] - 0.19 * x[1] * x[2] - 0.0122 * x[3] * x[9] + 0.009325 * x[5] * x[9] + 0.000191 * x[10] ** 2

f8(x) = 10.58 - 0.674 * x[0] * x[1] - 1.95 * x[1] * x[7] + 0.02054 * x[2] * x[9] - 0.0198 * x[3] * x[9] + 0.028 * x[5] * x[9]

f9(x) = 16.45 - 0.489 * x[2] * x[6] - 0.843 * x[4] * x[5] + 0.0432 * x[8] * x[9]

​ 将其输入至章节 5.4 图决策变量长度及范围输入区域 F 中后如图目标函数:

​ 其中 9 个目标函数分别对应该问题所需要优化的 9 个目标。该实际问题约束在目标函数构建时已将其转化成目标,故约束条件函数这一栏可省略。

​ 最后用户需要对该类问题赋予问题特点,以方便 GOpt 推荐合适算法。如车辆性能优化问题 DDMOP1 属于超多目标实数编码问题,GOpt 可以 推荐一些合适算法,具体操作为章节 4.2 图八所示。勾选了超多目标和实数编码后,GOpt 推荐的算法如图十六,用 户可选取其中任意一算法去求解该问题,也可以尝试多个算法以发现更好的优化结果。

​ 如选取算法 NSGA3,具体操作为章节 4.2 所示,将该算法组件拉至前面板与自定义问题组件相连,根据 NSGA23 算法组件参数提示,输入 NSGA3 的一些算法参数如图十六,点击运行,再在 GOpt 平台编译结束后,点击 NSGA3 算法组件中的开始按钮,此时用户在自定义问题组件中定义的实际问题的各个信息以 Json 类型传至算法组件,算法组件接收到自定义问题组件的信息后,算法开始运行,并将优化过程中数据信息实时显示,让用户更 直观的看见优化过程,如图:

​ 对于该车辆性能优化问题,章节 5.5 开头部分论文中对于该问题提供了真实最优解,如图:

​ 对比 GOpt 推荐算法 NSGA3 结果,可以看出 GOpt 可以很好的得到一组接近真实最优解的解。