3.9。约束一种¶

参数界面 部分已经涵盖了参数的方式 通过定义合适的方式可以被限制为下限和上限 range. 除此之外,还有先进的不等式约束 can be introduced through the rich comparison operators <, <=, >, >= 在任何两个参数之间, 这允许有效地减少优化问题的相关搜索空间。 任何涉及a的比较 Parameter 将自动理解为约束:

>>> params = LennardJonesParameters()
>>> constraints = [params[1] < 0.5*params[0], 2 < params[1]+5]
>>> o = 优化(jobcol, dataset, params, optimizer, constraints=constraints)
>>> o.optimize()

可以传递定义的约束列表 优化 through the respective argument. 整个优化,所有新的候选解决方案 将根据提供的任何定义检查并在任何一个时丢弃 约束是违反的。

定义约束时应考虑以下内容:
  • 包括不属于的参数的约束 active 子集将自动忽略
  • Numerical operators such as +, -, *, / are possible within a definition: p[0] >= p[1]+2
  • 多个数字运算符 不是 可能的, 例如: p[0] >= 2*p[1]+2, 2*p[0] >= p[1]+2
  • Operators that compare to constant scalars p[0] > 2 can be defined, but are discouraged: use the Parameter.range归属代替
  • == operator is not interpreted as a constraint (它检查两个参数是否相同)。
  • 该参数不能用作分母: 2/p[0] >= p[2]