流行算法类软件盘点(一):混合整数线性规划(MILP)解算器lpsolve

介绍lpsolve软件解决纯线性问题、混合整型及二进制问题等功能,展示最大流问题实例及其在不同环境下的求解结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lpsolve

软件名称:lpsolve

解决问题:纯线性问题,混合的整型和二进制问题,半连续性与特殊命令集(SOS) 模型

应用平台:由ANSI C编写,可应用于Linux和WINDOWS等不同平台。

使用案例:

解决下图所示的最大流问题(这幅图已经标注出求解结果了):

lpsolve

lpsolve IDE环境中只需输入如下的文本,是不是非常简单直观:

lpsolve

然后按一个运行按钮(红框标注),出现以下的求解结果,红框标注的是结果,蓝框标注的是求解信息,包括耗费时间等等:

lpsolve

关于lpsolve IDE环境的详细使用说明可以参考其使用手册(lpsolve下载主页上可自由下载),看到这里也许有人会问,上面的例子很简单,如果对于复杂的网络拓扑,自己手动输入这些表达式显然是不现实的, 那该怎么办,好在lpsolve可以集成在别的开发环境中,它提供了一整套API,可供调用,具体也请参考使用手册,上面提到的博客里对于matlab调用lpsolve有简单的说明,这里补充说一下,mxlpsolve('write_lp',lp,'a.lp')这个语句可以生成IDE环境里可直接执行的脚本文件(C,JAVA等接口也有类似语句),这样复杂的问题可以用高级编程语言建模,然后生成LP脚本文件单独在IDE中运行,是不是很方便。

以上这个Max Flow的例子直接用matlab自带的linprog工具箱求解,写出代码是:

1

2

3

4

5

6

7

8

9

10

11

12

13

f = [ -1 -1 -1 0 0 0 0 0 0 0 0 0 ]; 

A = []; 

b = []; 

Aeq = [1 0 0 -1 -1 0 0 0 0 0 0 0 

       0 1 0 0 0 -1 -1 -1 0 0 0 0 

       0 0 1 0 0 0 0 0 -1 0 0 0 

       0 0 0 1 0 1 0 0 0 -1 0 0 

       0 0 0 0 1 0 1 0 1 0 -1 0 

       0 0 0 0 0 0 0 1 0 0 0 -1 ]; 

beq = zeros(6,1); 

lb = zeros(12,1); 

ub = [3;2;2;5;1;1;3;1;1;4;2;4]; 

x = linprog(f,A,b,Aeq,beq,lb,ub);

求解结果如下,可以看到虽然最大流的值是正确的,但其它边上的流却与lpsolve求解结果有很大差别:

lpsolve

详细使用请参阅peonyding的ChinaUnix博客>>

转载于:https://my.oschina.net/zhujian111/blog/804667

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值