Scipy线性规划有理数

时间:2015-10-15 17:02:54

标签: python scipy linear-programming

scipy.optimize.linprog似乎是C / Fortran库的包装器,无论输入类型如何,它总是使用浮点数。

from scipy import optimize as opt
from fractions import Fraction
import numpy as np

lp = opt.linprog

def frac(arr):
    "convert array or number to rational form"
    if isinstance(arr, int) or isinstance(arr, float):
        return Fraction(arr)
    else:
        return list(map(frac, arr))

A_ub = frac([
    [ 1, 2, 3 ],
    [ 4, 5, 6]
])

A_ub = np.array(A_ub, dtype=object)

b_ub = frac( [ 1, 2 ] )
b_ub = np.array(b_ub, dtype=object)

c = frac( [ -1, -2, -3 ])
c = np.array(c, dtype=object)

result = lp(A_ub=A_ub, b_ub=b_ub, c=c)
print result.x.dtype

打印float64

是否有一个类似的库,在numpy / scipy中有一个不同的求解器,它能够操纵任意python对象并使用它们的方法+, -, *, /而不是强制一切到浮点?

0 个答案:

没有答案