用matlab和LINGO求解整数规划问题

整数规划问题

尤其是0-1整数规划问题 是我们在数学建模中经常会遇到问题,TSP问题、指派问题、背包问题等,接下来,我将用matlab和LINGO中的一些函数来解决整数规划问题。
matlab常用的就是 intlinprog函数

LINGO 通过 @gin 来实现取整操作

 

intlinprog

  可以使用 matlab 中的 intlinprog 函数 专门用于 求解整数规划问题。 其中值的一提的是,原来以前版本的matlab是不支持求解整数规划问题,只提供了 bintprog函数 来求解 0-1整数问题,但现在matlab 提供了 intlinprog函数来专门求解整数规划问题,且你只需要把函数的自变量x的取值的上下限变为0和1,那么 intlinprog函数就变成了一个求解0-1整数规划问题

intlinprog 函数 用于 求解 这种情况

                                               用matlab和LINGO求解整数规划问题_第1张图片

方程为:

[x, fval]=intlinprog (f, intcon, A, b, Aeq, beq, lb ,ub) ,其中 intcon 为 整数约束的自变量x的编号,比如 方程里面取整的 函数 为 x1、x2、x3 则 intcon=[1 2 3];

 

对于下面一个方程:

                                      用matlab和LINGO求解整数规划问题_第2张图片     且 x1 、 x2 为整数

所以,我们用来求解上图那个方程的代码就是:
 

c=[100 150];
A=[1 2;1 0;0 1];
b=[160;100;120];
lb=zeros(2,1);
[x, fval]=intlinprog(-c,[1 2],A,b,[],[],lb);
disp(x);
disp(c*x);

由于intlinprog函数是用于求解最小值,所以我们对目标函数加个负号, 也就是 对 负的目标函数 求最小值 ,即对目标函数求最大值,所以得出结果是直接c*x 就行

结果为:


  100.0000
   30.0000

   14500

如果只符合0-1规划的话,那我们就把ub 设置为1就好

LINGO来求解:

model:
max=100*x1+150*x2;
x1+2*x2<=160;
x1<=100;
x2<=120;

@gin(x1);
@gin(x2);


end

由于,LINGO默认变量都是大于0,所以只需要取整就行。

结果为:

用matlab和LINGO求解整数规划问题_第3张图片

即 x1=100,x2=30,最终结果为 14500。

以上就是 用matlab和 LINGO 两种软件来求解 整数规划问题!

你可能感兴趣的:(数学建模)