w410985524 2019-10-15 09:17 采纳率: 0%
浏览 1619

求助:python 中 带约束的多变量最优化求解 的语法问题

尝试用 scipy.optimize.minize 求解有约束的最优化问题,但在构建目标函数的时候遇到麻烦。

场景:一系列散点(xi, yi),每个散点有一个范围约束,相邻的两个散点构成向量vi,要求出散点坐标值使得向量模的总和 ∑||vi|| 的值最小

问题:如何构建符合scipy语法的目标函数?对于数量不定的散点,如何用循环一类的方法描述目标函数?同样对于约束,能否用循环一类的方法写出约束?,是否存在其他方法完成这一目标?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 22:53
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Python中,我们可以使用scipy.optimize.minimize来解决带有约束的非线性优化问题。但是,在构建目标函数时,我们需要确保它满足所有约束条件。以下是一个例子:

    import numpy as np
    from scipy import optimize
    
    # 假设我们有两个变量x1和x2,它们都有一个范围限制
    def objective_function(x):
        # 计算向量vi的平方和
        return sum([vi**2 for vi in x])
    
    # 假设我们的约束是x1 >= 0且x2 >= 0
    def constraint_function(x):
        # 计算向量vi的平方和
        return [vi[0]**2 + vi[1]**2 for vi in x]
    
    # 定义我们的目标函数和约束函数
    bounds = [(0, None), (0, None)]  # 每个变量的最大值为None表示没有上限
    cons = ({'type': 'ineq', 'fun': constraint_function})  # 约束条件
    
    # 使用scipy.optimize.minimize来求解
    result = optimize.minimize(objective_function, np.array([0, 0]), bounds=bounds, constraints=cons)
    
    print(result.x)  # 输出结果
    

    在这个例子中,我们首先定义了目标函数objective_function,然后定义了约束函数constraint_function。接下来,我们定义了一个bounds列表,其中包含两个元素,分别对应于x1和x2的上下界。最后,我们定义了一个constraints字典,其中包含了两个项,分别是目标函数和约束函数。

    注意:这个例子中的约束条件是基于向量的长度之和的最小化,而不是基于向量的模的最小化。如果你的问题是关于向量的模的最小化,你需要修改你的目标函数和约束函数以适应这一点。

    评论

报告相同问题?