约束优化工具#
- 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 – 如果 f1 和 f2 的大小不相等 \(n\),如果 f1 的大小至少不为1, 如果 nec 大于 \(n-1\)(约束过多)或者如果 tol 的大小不为 \(n - 1\)
TypeError – 如果 f1, f2 或 tol 无法转换为浮点数向量
- Returns
True如果 f1 比 f2 更好,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]