gpt4 book ai didi

python - 是否有任何二次规划函数可以同时具有下限和上限 - Python

转载 作者:行者123 更新时间:2023-11-28 18:00:54 25 4
gpt4 key购买 nike

通常我一直在使用GNU Octave求解二次规划问题。

我解决类似的问题

x = 1/2x'Qx + c'x

受制于

A*x <= b
lb <= x <= ub

lbub 是下限和上限,例如 x 的限制

当我解决时,我的 Octave 代码看起来像这样。一行简单的代码

U = quadprog(Q, c, A, b, [], [], lb, ub);

方括号 [] 是空的,因为我不需要等式约束

Aeq*x = beq,

所以我的问题是:Python 中有没有简单易用的二次求解器来解决问题

x = 1/2x'Qx + c'x

受制于

A*x <= b
lb <= x <= ub

或受制于

b_lb <= A*x <= b_ub
lb <= x <= ub

最佳答案

您可以编写自己的基于scipy.optimize 的求解器,这里是一个关于如何编写自定义 python quadprog() 的小示例:

# python3
import numpy as np
from scipy import optimize

class quadprog(object):

def __init__(self, H, f, A, b, x0, lb, ub):
self.H = H
self.f = f
self.A = A
self.b = b
self.x0 = x0
self.bnds = tuple([(lb, ub) for x in x0])
# call solver
self.result = self.solver()

def objective_function(self, x):
return 0.5*np.dot(np.dot(x.T, self.H), x) + np.dot(self.f.T, x)

def solver(self):
cons = ({'type': 'ineq', 'fun': lambda x: self.b - np.dot(self.A, x)})
optimum = optimize.minimize(self.objective_function,
x0 = self.x0.T,
bounds = self.bnds,
constraints = cons,
tol = 10**-3)
return optimum

以下是如何使用它,使用与 matlab-quadprog 中提供的第一个示例中相同的变量。 :

# init vars
H = np.array([[ 1, -1],
[-1, 2]])

f = np.array([-2, -6]).T

A = np.array([[ 1, 1],
[-1, 2],
[ 2, 1]])

b = np.array([2, 2, 3]).T
x0 = np.array([1, 2])
lb = 0
ub = 2

# call custom quadprog
quadprog = quadprog(H, f, A, b, x0, lb, ub)
print(quadprog.result)

这个简短片段的输出是:

     fun: -8.222222222222083
jac: array([-2.66666675, -4. ])
message: 'Optimization terminated successfully.'
nfev: 8
nit: 2
njev: 2
status: 0
success: True
x: array([0.66666667, 1.33333333])

有关如何使用 scipy.optimize.minimize 的更多信息,请参阅 docs .

关于python - 是否有任何二次规划函数可以同时具有下限和上限 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com