python改错
代码出现这类错误Objective function must return a scalar如何更改
代码如下
import numpy as np
from scipy.optimize import minimize
# 定义目标函数
def f(x):
return np.array([x[0]**2, (x[0]-1)**2])
# 定义约束条件
def constraint1(x):
return x[1] - x[0]
def constraint2(x):
return 2 - x[0] - x[1]
# 初始化初始值
x0 = np.array([0, 0])
# 定义优化问题
cons = ({'type': 'ineq', 'fun': constraint1},
{'type': 'ineq', 'fun': constraint2})
res = minimize(f, x0, method='SLSQP', constraints=cons)
# 打印结果
print(res.x)
print(res.fun)
不知道你这个问题是否已经解决, 如果还没有解决的话:可以使用自己的自定义对象作为函数的返回值。
常见用例是定义了一个接口,用于动态创建对象以响应在编写程序时无法预测的条件。可以使用一个函数来实现用户定义对象,该函数接受一些初始化参数并根据具体输入返回不同的对象。
# 一个绘画程序
# 动态创建不同的形状
class Circle:
def __init__(self, radius):
self.radius = radius
class Square:
def __init__(self, side):
self.side = side
可以使用参数列表 ( *args) 和关键字参数 ( **kwargs ) 动态创建一个形状定义一个函数。
def shape_factory(shape_name, *args, **kwargs):
shapes = {"circle": Circle, "square": Square}
return shapes[shape_name](*args, **kwargs)
此函数创建具体形状的实例并将其返回给调用者。
circle = shape_factory("circle", radius=20)
type(circle)
<class '__main__.Circle'>
circle.radius
20
square = shape_factory("square", side=10)
type(square)
<class '__main__.Square'>
square.side
10