约束优化工具#

pygmo.compare_fc(f1, f2, nec, tol)#

在单目标、约束情况下比较两个适应度向量。

使用以下严格排序:

  • \(f_1 \prec f_2\) 如果 \(f_1\) 是可行的且 \(f_2\) 不可行。

  • \(f_1 \prec f_2\) 如果 \(f_1\)\(f_2\) 都不可行,但 \(f_1\) 违反的约束比 \(f_2\) 少,或者如果它们违反的约束数量相同,则 \(f_1\) 的总体约束违反的 \(L_2\) 范数较小。

  • \(f_1 \prec f_2\) 如果两个适应度向量都是可行的,并且\(f_1\)中的目标值小于\(f_2\)中的目标值

注意

适应度向量被假定为恰好包含一个目标,nec 个等式约束和其余(如果有的话)不等式约束。

Parameters
  • f1 (类似数组的对象) – 第一个适应度向量

  • f2 (类似数组的对象) – 第二个适应度向量

  • nec (int) – 适应度向量中的等式约束数量

  • tol (数组类对象) – 约束中需要考虑的容差

Raises
  • OverflowError – 如果 nec 为负数或大于实现定义的值

  • ValueError – 如果 f1f2 的大小不相等 \(n\),如果 f1 的大小至少不为1, 如果 nec 大于 \(n-1\)(约束过多)或者如果 tol 的大小不为 \(n - 1\)

  • TypeError – 如果 f1, f2tol 无法转换为浮点数向量

Returns

True 如果 f1f2 更好,False 否则。

Return type

bool

示例

>>> import pygmo as pg
>>> pg.compare_fc(f1 = [1,1,1], f2 = [1,2.1,-1.2], nec = 1, tol = [0]*2)
False

pygmo.sort_population_con(input_f, nec, tol)#

对种群进行排序(此处假设为一个包含适应度向量的二维数组),适用于单目标、有约束的情况。

使用以下严格排序(与pygmo.compare_fc()中使用的相同):

  • \(f_1 \prec f_2\) 如果 \(f_1\) 是可行的且 \(f_2\) 不可行。

  • \(f_1 \prec f_2\) 如果 \(f_1\)\(f_2\) 都不可行,但 \(f_1\) 违反的约束比 \(f_2\) 少,或者如果它们违反的约束数量相同,且 \(f_1\) 的总体约束违反的 \(L_2\) 范数较小。

  • \(f_1 \prec f_2\) 如果两个适应度向量都是可行的,并且\(f_1\)中的目标值小于\(f_2\)中的目标值

注意

适应度向量被假定为恰好包含一个目标,nec 个等式约束和其余(如果有的话)不等式约束。

Parameters
  • input_f (二维数组类对象) – 适应度向量

  • nec (int) – 适应度向量中的等式约束数量

  • tol (数组类对象) – 约束中需要考虑的容差

Raises
  • OverflowError – 如果 nec 为负数或大于实现定义的值

  • ValueError – 如果输入的适应度向量不具有相同的大小 \(n >=1\),或者如果 nec 大于 \(n-1\)(约束过多) 或者如果 tol 的大小不等于 \(n-1\)

  • TypeError – 如果 input_f 无法转换为浮点数向量的向量,或者 tol 无法转换为浮点数向量。

Returns

排序后的适应度向量的索引。

Return type

list 一维 NumPy 整数数组

示例

>>> import pygmo as pg
>>> idxs = pg.sort_population_con(input_f = [[1.2,0.1,-1],[0.2,1.1,1.1],[2,-0.5,-2]], nec = 1, tol = [1e-8]*2)
>>> print(idxs)
[0 2 1]