首页 > 解决方案 > 你能写一个函数来在 Python 中创建更多函数吗?

问题描述

我正在编写一个使用 scipy 优化包的可重复脚本。作为其中的一部分,您需要创建约束函数。我想创建一个可重复的脚本,允许我根据可变数量的输入创建正确数量的约束函数。

例如:

def constraintx1(x):
    return (x2c2*(x[1]**2))+(x1c2*x[1]) + maxresponsec2
def constraintx2(x):
    return (x2c3*(x[2]**2))+(x1c3*x[2]) + maxresponsec3
def constraintx3(x):
    return (x2c4*(x[3]**2))+(x1c4*x[3]) + maxresponsec4

constraints = [{'type':'ineq', 'fun':constraintx1},
               {'type':'ineq', 'fun':constraintx2},
               {'type':'ineq', 'fun':constraintx3}]

所有 x2c2、x1c2 和 maxresponsec2 都来自之前定义为曲线表的输入表。

这些是我的一些约束函数,用于 3 个输入变量。但是,对于另一个项目,我可能需要对 12 个变量重复此操作,并且我希望创建一个循环,该循环将基于计数器生成正确数量的约束函数。我一直在环顾四周,但还没有找到任何东西。我希望有一些类似的东西:

numberofvariables = len(someinput)
constraints = []
for g in range(0,numberofvariables):
    def constraintg (x):
        return curvestable.iloc[g,1]*(x[0]**2))+(curvestable.iloc[g,2]*x[0]) + curvestable.iloc[g,4]
    constraints = constraints.append([{'type':'ineq', 'fun':constraintg}])
    next

我还需要指出我是编码方面的极端业余爱好者,所以不确定这是否可能。

标签: python

解决方案


您应该检查 pythonclosure函数。

def constraint_func_maker(x2c2, x1c2, maxresp):
    def constraint_func(x):
        return (x2c2 * (x[1] ** 2)) + (x1c2 * x[1]) + maxresp
    return constraint_func

推荐阅读