lingo解决整数线性规划(小题)

Posted a-runner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lingo解决整数线性规划(小题)相关的知识,希望对你有一定的参考价值。

------------恢复内容开始------------

  小编最近在看解决整数线性规划。

  对于一维的决策变量,使用matlab和lingo均可。

  matlab可以用intlinprog(f,incont,a,b,aeq,beq,ln.hn)

  f对应的所求式子的列向量,incont对应着 为整数的相关索引,a为不等式的限定矩阵,b为不等式的资源矩向量,同理aeqhebeq为等式的对应矩阵和向量。

  下面用lingo求解整数线性规划问题:

  技术图片

  两种方法:

  第一种,按照每个备选校址,写出对应的覆盖小区的向量,组成一个矩阵。

  列向量分别代表每一个校址对应所覆盖的小区,分别为0,1(二进制变量)

model:
sets:
col/1..6/:x;
row/1..8/;
link(row,col):a;
endsets
data:
a = 1 1 1 0 0 0
    0 1 0 1 0 0
    0 0 1 0 1 0
    0 0 0 1 0 1
    1 1 1 0 0 0
    0 0 0 0 1 1
    1 0 0 0 0 0 
    0 1 0 1 0 1;
enddata
min = @ sum(col(i):x(i));
@for(row(i):@sum(col(j):a(i,j)*x(j))>1);
@for(col(j):@bin(x(j)));
end

技术图片

 

如图所示,显示答案为1,4,5.

  第二种方法:

  xi{1: 在备选校址Bi建学校, 0: 在备选校址Bi不建学校}

  由于小区A1可以被备选校址B1,B2,B3所间的学校所覆盖,所以有约束条件:

  x1 + x2 + x3 >=1

  类似的其他的也一样:

         min  求和(xi)(小编求和符号复制不过来)

  s.t:

    x1 + x2 + x3 >=1

    x2 + x4 >=1

    x3 + x5 >=1

    x4 + x6 >=1

    x5 + x6 >=1

    x1 >=1

    x1 + x4 + x6 >=1

  lingo程序如下:

  代码更加简洁

model:
sets:
var/1..6/:x;
endsets
min=@sum(var:x);
x(1)+x(2)+x(3)>1
x(2)+x(4)>1
x(3)+x(5)>1
x(4)+x(6)>1
x(1)>1
x(2)+x(4)+x(6)>1
end

 

------------恢复内容结束------------

以上是关于lingo解决整数线性规划(小题)的主要内容,如果未能解决你的问题,请参考以下文章

整数规划该如何用MATLAB求解?

如何使用lingo软件编程解决线性规划问题?问题如补充所示。

Lingo实现求解非线性整数规划

lingo能解决的问题,matlab能解决 吗?那个更好。

如果用lingo软件可以进行求解,那么用MATLAB可以实现吗

Lingo 基本使用