swiglpk-gnu线性规划工具包的简单swig绑定

swiglpk的Python项目详细描述


gnu线性编程工具包(glpk)的纯python绑定

PyPILicenseBuild StatusAppVeyor Status

为什么?

swiglpk不是glpk的高级包装器(请看 optlang如果你是 对基于python的数学编程语言感兴趣)。只是 提供普通的swig绑定到 底层C库。与python的其他glpk包装器相比 (例如PyGLPKPython-GLPKctypes-glpkecyglpki等)这是公平的 版本不可知:它将尝试猜测glpk.h头的位置 文件(使用which glpsol),然后编译 特殊GLPK安装。此外,swiglpk还提供了二进制轮子 对于所有主要平台,它们总是最新的 最新的glpk版本(swiglpk版本遵循主要的glpk版本控制 以及小版本数字来强调这一点)。

如果你觉得swiglpk有用的话,请盯着这个repo给我们一些爱!

安装

pip install swiglpk

就这样。swiglpk为windows、mac和linux提供了二进制轮子。不需要安装第三方依赖项。

示例

GLPK manual

from swiglpk import *

ia = intArray(1+1000); ja = intArray(1+1000);
ar = doubleArray(1+1000);
lp = glp_create_prob();
glp_set_prob_name(lp, "sample");
glp_set_obj_dir(lp, GLP_MAX);
glp_add_rows(lp, 3);
glp_set_row_name(lp, 1, "p");
glp_set_row_bnds(lp, 1, GLP_UP, 0.0, 100.0);
glp_set_row_name(lp, 2, "q");
glp_set_row_bnds(lp, 2, GLP_UP, 0.0, 600.0);
glp_set_row_name(lp, 3, "r");
glp_set_row_bnds(lp, 3, GLP_UP, 0.0, 300.0);
glp_add_cols(lp, 3);
glp_set_col_name(lp, 1, "x1");
glp_set_col_bnds(lp, 1, GLP_LO, 0.0, 0.0);
glp_set_obj_coef(lp, 1, 10.0);
glp_set_col_name(lp, 2, "x2");
glp_set_col_bnds(lp, 2, GLP_LO, 0.0, 0.0);
glp_set_obj_coef(lp, 2, 6.0);
glp_set_col_name(lp, 3, "x3");
glp_set_col_bnds(lp, 3, GLP_LO, 0.0, 0.0);
glp_set_obj_coef(lp, 3, 4.0);
ia[1] = 1; ja[1] = 1; ar[1] = 1.0; # a[1,1] = 1
ia[2] = 1; ja[2] = 2; ar[2] = 1.0; # a[1,2] = 1
ia[3] = 1; ja[3] = 3; ar[3] = 1.0; # a[1,3] = 1
ia[4] = 2; ja[4] = 1; ar[4] = 10.0; # a[2,1] = 10
ia[5] = 3; ja[5] = 1; ar[5] = 2.0; # a[3,1] = 2
ia[6] = 2; ja[6] = 2; ar[6] = 4.0; # a[2,2] = 4
ia[7] = 3; ja[7] = 2; ar[7] = 2.0; # a[3,2] = 2
ia[8] = 2; ja[8] = 3; ar[8] = 5.0; # a[2,3] = 5
ia[9] = 3; ja[9] = 3; ar[9] = 6.0; # a[3,3] = 6
glp_load_matrix(lp, 9, ia, ja, ar);
glp_simplex(lp, None);
Z = glp_get_obj_val(lp);
x1 = glp_get_col_prim(lp, 1);
x2 = glp_get_col_prim(lp, 2);
x3 = glp_get_col_prim(lp, 3);
print("\nZ = %g; x1 = %g; x2 = %g; x3 = %g\n" % (Z, x1, x2, x3))
glp_delete_prob(lp);

…将产生以下输出(示例也可以在 examples/example.py):

GLPK Simplex Optimizer, v4.52
3 rows, 3 columns, 9 non-zeros
*     0: obj =   0.000000000e+00  infeas =  0.000e+00 (0)
*     2: obj =   7.333333333e+02  infeas =  0.000e+00 (0)
OPTIMAL LP SOLUTION FOUND

Z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0

很难看吧?考虑使用optlang来制定和解决优化问题。

文档

您可以找到有关glpk的c api的文档here

开发

你还想从源安装吗?然后您需要安装以下 依赖关系优先。

  • GLPK
  • 开关量

如果你在OSX上,swig和glpk可以很容易地安装 homebrew

brew install swig glpk

如果你使用的是ubuntu linux,你可以使用 apt-get

apt-get install glpk-utils libglpk-dev swig

如果你在windows上,你就可以自己操作了(查看appveyor.yml配置文件以获得指导)。

然后克隆repo并运行以下命令。

python setup.py install

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Eclipse不识别渐变依赖项   java RecyclerView在从API(OkHttp)刷新时无法滚动,导致IndexOutOfBoundsException崩溃   java如何在JavaDoc中显示示例代码,而不必手动复制/粘贴?   java Android设置自定义actionbar   用Java制作swing标签生成器   java Spring引导Hibernate无法删除验证令牌   Java中的递归问题   JAVANet 4垃圾收集   仅使用一个ImageView的java视图翻转器   使用高级正则表达式在java中拆分字符串   Python中Java volatile的等价物   java数据流作业总是创建新的默认存储桶,即使设置了tempLocation和gcpTempLocation?   变量未在Java中初始化   当iam试图将TestNG安装到Eclipse版本:Mars中时使用java。1获取错误,因为软件包含未着色的内容   运行Sqoop命令时出现java_主页问题   SpringJava框架自动维护实体历史记录   多线程Java:为什么/什么是这些线程监控?   java如何控制mavenjettyplugin的VM参数?   java在equals方法中比较两个对象名称   java设置Itext表中的标题行