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

 

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM