python约束可以使用浮点约束吗?

时间:2015-03-27 11:34:21

标签: python floating-point constraints algebra fractions

我正在尝试根据Google发现的示例学习constraint模块,并查看来源 但是,如果我尝试解决 float 值,看来我做错了。

例如,我想解决:7x+3y=10 ; 10x-20y=10
解决方案是:x = -1y = 17/3

唉,用constraint模块解决会产生一个空列表解决方案:

$ cat tmp.py 
#!/usr/bin/env python

"""
7x+3y=10 ; 10x-20y=10 
"""
from constraint import Problem
problem = Problem()
problem.addVariable("x", [-2,-1,0,1,2])
problem.addVariable("y", [-1,1,17/3])

problem.addConstraint(lambda x, y: 7*x + 3*y == 10)
problem.addConstraint(lambda x, y: 10*x - 20*y == 10)

print problem.getSolutions()

带输出:

$ python tmp.py
[]


  1. constraint模块的文档是否可用?
  2. constraint可以使用 float 约束吗?
  3. 注意:我知道17/3无法在数字计算机上准确表示。

    编辑1:

    我试过@Lucho关于使用fractions模块的想法:遗憾的是 - 它没有解决问题。

    $ cat tmp.py
    #!/usr/bin/env python
    
    """
    7x+3y=10 ; 10x-20y=10 
    """
    from constraint import Problem
    from fractions import Fraction
    
    frac = Fraction(17, 3)
    
    problem = Problem()
    problem.addVariable("x", [-2,-1,0,1,2])
    #problem.addVariable("y", [-1,1,17/3])
    problem.addVariable("y", [-1,1,frac])
    
    problem.addConstraint(lambda x, y: 7*x + 3*y == 10)
    problem.addConstraint(lambda x, y: 10*x - 20*y == 10)
    
    print problem.getSolutions()
    
    $ python tmp.py 
    []
    
    $
    

1 个答案:

答案 0 :(得分:0)

我之前没有见过这个模块,但我的猜测是尝试使用Fractions模块来代表17/3

from fractions import Fraction Fraction(17, 3)

我找到的文档是http://labix.org/doc/constraint/,但它没有说明这个特例。