基于受控词汇表的表达式树构建与翻译
cvexp的Python项目详细描述
cvexp是“受控词汇表达式”的缩写。 python模块,允许抽象语法树(“表达式”)为 构造起来和编写普通的python代码一样简单。名字 抽象语法树中的函数的 词汇表,使用uri作为名称,就像w3c rdf那样。
cvexp的目的是让开发人员更容易 将第三方库集成到python中而不必指定 全新的API。特别关注的图书馆和语言是 计算机代数系统,线性规划和优化(如 lp_solve、glpk和cvxopt)和prolog。
下面是一个求解混合整数线性规划的例子 使用glpk作为后端时出现问题。为了让它起作用,你 显然必须安装必备的python包(即python glpk或 无论如何)因为这些不包括在cvexp中:
from cvexp.builders import var from cvexp.builders import integer from cvexp.builders import minimize from cvexp.translate_glpk import solve # You could also use lp_solve by doing this: # from cvexp.translate_lpsolve55 import solve # ...or you could use CVXOPT like this: # from cvexp.translate_cvxopt import solve X = var('X') # the 'X' name is optional Y = var('Y') # ...and so is 'Y' # Purely linear programming: sol = solve(( Y + 0.1 == X, Y >= 9.8 - X, minimize(Y), ), out_filename='problem.out') # out_filename is optional print 'X =', sol[X] # >>> 4.95 print 'Y =', sol[Y] # >>> 4.85 # Mixed integer-linear programming: sol = solve(( Y + 0.1 == X, Y >= 9.8 - X, integer(Y), minimize(Y), ), out_filename='problem.out') # out_filename is optional print 'X =', sol[X] # >>> 5.1 print 'Y =', sol[Y] # >>> 5
如果使用cvxopt,也可以解决二次规划问题。 例如:
from cvexp.builders import var from cvexp.builders import integer from cvexp.builders import minimize from cvexp.translate_cvxopt import solve X = var() Y = var() sol = solve(( minimize((X - 5) ** 2 + (Y - 3) ** 2), )) print 'X =', sol[X] # >>> 5.0 print 'Y =', sol[Y] # >>> 3.0