EBSILON®Professional Online Documentation
计算 / 优化
本主题中
    优化
    本主题中

    优化


    在简单的情况下,可以通过改变参数或通过 EbsScript 来手动进行优化。在更复杂的情况下,特别是有多个影响变量时,建议使用 EbsOptimize 模块。

    EbsOptimize 提供两种类型的优化算法:

    1. 遗传算法
    2. 非线性下降算法

    EbsOptimize 通过菜单命令"计算"-->"优化"来调用激活。该命令只有在相应的标志被许可时才可用。然后出现优化器对话框:

     

    无论选择哪种优化算法,EBSILONProfessional 的基本优化原理可以描述如下:在 EBSILON 模型中选择几个规格值作为自由参数。在优化计算过程中,为每个自由参数指定一个参数可能承担的值范围。此外,还指定一个要优化的目标量,可以是一个简单的结果值,也可以是一个更复杂的数学表达式。

     

    要优化的规范值/目标表达式:

    点击窗口中的优化目标。在组合框中,可以选择一个简单的结果值作为优化目标,也可以输入一个更复杂的数学表达式(用 EbsScript 语法),根据右边的设置(组合框),将其最小化或最大化。在所示的例子中,目标是最小化热耗率。

     

    变化参数:

    变化参数(影响变量)可以在点击"点击插入"按钮后选择,也可以输入任何表达式(用 EbsScript 语法)。在每一种情况下,都要为所选的变化参数输入可能的检验值范围。

    变化参数可以通过上下文菜单进行编辑。

     

    限制-表达式:

    此外,可以为边界条件输入约束条件(用 EbsScript 语法)("点击插入")。在单次计算运行后,将检查是否符合这些边界条件。导致违反边界条件的参数集被丢弃。
    使用这些边界条件只是为了指定对计算的限值。为了避免不必要的计算,规范值中的限制应该在变化参数的值范围内。

     

    按钮"开始":

    执行优化计算。点击"开始"按钮,启动优化计算。根据参数的选择,计算可能需要更长的时间。优化计算的当前进度会在日志控制台显示。

     

    执行:

    在一个优化计算中,通常要执行多个 EBSILON 模拟。另外,也可以在单个 EBSILON 计算中执行具有指定 ID 的 EbsScript 来代替模拟。例如,在一次模拟后出现了可用于第二次模拟的中间结果时,这可能很有用处。请注意:如果执行 EbsScript 而不是模拟,优化器期望从 EbsScript 得到一个返回值,用来评估执行是否成功。用户可以在 EbsScript 中通过调用 exit(return value) 命令来设置这个返回值。返回值为 0 被解释为成功,任何其他数字被解释为错误。

     

    遗传算法

    优化是基于进化(遗传)算法,种群规模保持不变(稳定状态)。这被集成在 EBSILONProfessional 的计算内核中。由于这种优化方法是概率性的,每次优化运行都会产生不同的结果。然而,这对于运行优化中的众多任务来说并不是一种限制。决定性的是,这些差异从精度的角度来看是很小的数量级。

    一个值集(个体)包括从各自的数值范围内分配给自由参数的数值。另一方面,一个种群由若干个值集组成。在一个步骤中,值集相互结合(交叉);此外,值集的单个值可以很容易地被改变(变异)。选择程序确保最佳的值集占上风。

     

    根据遗传算法,可以为优化顺序设置以下参数:

    种群(人口)规模(通常为 15)

    简单地说,种群大小决定了一个优化的范围。一个种群是任意生成的。例如,随机选择 20 个输出数据集,从中也随机确定其继承者。数据集通过变异的方式被轻微改变。

    可用的变量数量越多,种群就越大。

    交叉的概率(通常为 0.6)

    交叉通常只在有一个以上的变量的情况下才有意义,其考虑到几个变量的相互影响。

    突变的概率(通常为 0.5)

    单个值对的变化以高斯分布为基础。随着代数的增加,这种情况会有所减弱。

    每一代要替换的种群(人口)部分(通常为 0.75)

    这个参数决定了下一代采用最佳结果所占的比例(%)。

    终止标准

    优化可以进行到指定的计算代数,也可以进行直到结果在指定的收敛范围内与前一代相吻合。

     

    非线性下降法

    第二类算法是非线性下降法。其程序以及参数化与遗传算法不同。由于非线性下降法的确定性,对于相同的输入值,这种方法总是产生相同的结果,这与遗传算法不同。

    起始值

    在下降法中,在要改变的参数范围内总是需要一个起始值。从这个初始值开始,根据相应的算法一步一步地寻找最优。因此,参数的起始值必须位于相应指定的有效范围内。

    初始增量

    在寻找最佳状态时,每一步都要根据要改变的参数形成目标函数的各自偏导。由于这些导数只能用数字计算,至少在每个参数的起点处需要有增量值(计算偏导时的参数变化)。用户可以手动指定这个初始增量,或者依赖于默认值。默认值的设置取决于各个参数的指定有效范围。在之后的步骤中,优化器会根据目标函数的特性,对上述增量进行自动调整/细化。

    终止标准

    当超过最大步数或者低于数字公差时,对最优的搜索将被终止。在评估过程中,目标函数在当前和前一个优化步骤之间的变化要根据指定的数字公差进行检查。

    搜索方向算法

    在参数范围内的下一步优化计算发生在哪个方向(或哪个参数值改变多少)的问题上,可以使用各种算法。其中最简单和最稳健的方法是应用最陡峭的梯度下降法
    用这种方法,步骤总是朝着目标函数变化最大的方向进行。尽管有很多优点,但这种方法的收敛率最低。此外,可以应用共轭梯度法两种准牛顿法Davidon-Fletcher-Powell(DFP) 或 Broyden-Fletcher-Goldfarb-Shanno(BFGS)。这些方法有更好的收敛行为。然而,它们是为优化任务而开发的,其中要改变的参数在范围内没有限制(无约束优化)。因此,当一个或多个参数在优化计算过程中达到有效范围的极限时,这些高级算法就会有困难。相反,最陡峭的梯度下降法在达到极限时情况下表现得不敏感。因此,即使选择高级方法(共轭梯度、DFP、BFGS),最陡梯度方法也总是作为备份使用(以防高级算法在优化步骤中失败)。如果发生如上情况,用户会在日志控制台中得到警告。

     

    在一个模型中优化器的多个参数集

    与图表或 EbsScript 类似,优化器在一个 EBSILON 模型(*.ebs 文件)中也可以有多个参数集。要保存现有的参数集或加载已保存的参数集,可在优化器对话框中点击菜单项"参数"。优化器参数集可以在优化器资源管理器中指定名称、描述和 ID。当优化器对话框菜单项"参数"的子项被调用时,优化器资源管理器就会启动。

     

     

    从 EbsScript 中调用 EbsOptimize 优化器

    EbsOptimize 也可以从 EbsScript 中激活。

    只根据遗传算法来触发优化计算。这里使用的是 EbsOptimize 对话框中的最新设置。不可以从 EbsScript 中修改设置。

    此外,有两个函数:"optimizeGA( {id:Integer}{, maxTimeInSeconds:Integer = 0} )" 和 "optimizeND( {id:Integer}{, maxTimeInSeconds:Integer = 0} )"。与 "optimizeEasy"不同,这些函数针对指定的 ID(参数 1)触发各自的优化算法(GA代表遗传算法,ND代表非线性下降法)。作为可选项,优化计算的运行时间可以通过函数的参数 2 来限制。