我询问了 ChatGPT,但没有帮助。 基本上我想对 X 的变换向量实现约束,比方说 T(X)。 我该怎么做? 这是我的代码:
def TransformFunction(X):
return Ta(X)
def LowerBound(X):
return Tb(X) * 0.05
def UpperBound(X):
return Tb(X) * 0.3
其中Ta(X)和Tb(X)是向量x的不同变换,它是优化的输出。 当我尝试这样做时:
Constraint = NonlinearConstraint(
fun = TransformFunction
, lb = LowerBound
, ub = UpperBound
)
我收到错误
float() argument must be a string or a real number, not 'function'
ChatGPT 告诉我这应该可行。 基本上我需要上限和下限能够随着解决方案的变化而变化。有什么解决办法吗?
根据 NonlinearConstraint 文档,上限和下限必须是静态值。不支持使用函数的上限和下限。
作为替代方案,请考虑划分功能。
例如,您现有的代码正在尝试执行此操作:
Tb(X) * 0.05 >= Ta(X) >= Tb(X) * 0.03
如果将每个元素除以 Tb(X),则会得到:
0.05 >= Ta(X) / Tb(X) >= 0.03
(注意:这假设 Tb(X) 为正。如果 Tb(X) 为负,则需要交换边界。如果 Tb(X) 可以根据 X 为负或正,则需要一些其他方法。)