用于python线性优化的Lambda目标函数

时间:2016-02-24 12:30:10

标签: python scipy linear-programming

我正在尝试解决我需要优化线性函数的问题,但实际上这必须通过包装函数访问,我可以用原始数据解决这个问题,但由于实现限制,我需要一种方法传递函数作为目标。

例如,

import numpy as np
from scipy.optimize import linprog

def objective(x):
    c = [-1, 4]
    return np.dot(c,x)
c = [-1, 4]
A = [[-3, 1], [1, 2]]
b = [6, 4]
x0_bounds = (None, None)
x1_bounds = (-3, None)
#This Works:
res = linprog(c, A_ub=A, b_ub=b, bounds=(x0_bounds, x1_bounds),
             options={"disp": True})
#This does not
res = linprog(objective, A_ub=A, b_ub=b, bounds=(x0_bounds, x1_bounds),
             options={"disp": True})

我在cvxopt,cvxpy或scipy中看不到任何合适的资源。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你注意到linprog需要一个系数数组c,所以如果你有一个函数,你可以简单地推导出c数组:

import numpy as np

x = np.diag((1,1))
c = np.linalg.solve(x,objective(x))

res = linprog(c, A_ub=A, b_ub=b, bounds=(x0_bounds, x1_bounds),
             options={"disp": True})