Program Integer Campuran dengan Suku Bunga Bervariasi

Saat ini saya terjebak dengan program MIP yang tingkat suku bunganya, i, didasarkan pada jumlah unit yang diproduksi untuk Perumahan Plan A. Jika jumlah rumah plan A yang terjual adalah yang tertinggi di antara keempat tipe tersebut maka i=1. Jika jumlah rumah plan A yang terjual tertinggi kedua, maka i=2 dan seterusnya hingga i=4. Tingkat bunga pada dasarnya adalah 2i%. Tidak begitu yakin bagaimana menambahkan batasan yang akan mewakili posisi rumah plan A dan menerapkan tingkat bunga yang benar dalam fungsi tujuan. Fungsi tujuan memaksimalkan total keuntungan (misalnya 50.000A + 40.000B + 70.000C + 80.000D). Adakah ide tentang cara menggunakan variabel biner untuk mewakili posisi?


person Gurobi22    schedule 05.12.2016    source sumber
comment
Harap edit pertanyaan Anda dengan contoh bagaimana Anda mencoba solusi.   -  person Quintin Balsdon    schedule 05.12.2016


Jawaban (1)


Salah satu cara untuk melakukannya adalah dengan menggunakan matriks permutasi p(i,j). Yaitu.

sets 
  i = {A,B,C,D}
  j = {1,2,3,4}

binary variable p(i,j)

# assignment constraints
sum(i,p(i,j))=1
sum(j,p(i,j))=1

# quantities sold
x(j) = sum(i, p(i,j)*x(i))
x(j) >= x(j+1)

# interest rate
r(i) = sum(j, p(i,j)*r(j))
r(j) = 2*j/100

Sayangnya ekspresi p(i,j)*x(i) tidak linier. Dengan sedikit usaha kita dapat memperbaikinya sebagai berikut:

sets 
  i = {A,B,C,D}
  j = {1,2,3,4}

binary variable p(i,j)
positive variable q(i,j)

# assignment constraints
sum(i,p(i,j))=1
sum(j,p(i,j))=1

# quantities sold
x(j) = sum(i, q(i,j))
x(j) >= x(j+1)

# linearization of q(i,j) = p(i,j)*x(i)
q(i,j) <= p(i,j)*xup(i)
x(i) - xup(i)*(1-p(i,j)) <= q(i,j) <= x(i)

' interest rate
r(i) = 2*sum(j, p(i,j)*j)/100

Di sini xup(i) adalah batas atas pada x(i).

Bukan formulasi yang sangat elegan.

person Erwin Kalvelagen    schedule 05.12.2016
comment
Namun bukankah batasan pertama pada jumlah yang terjual bersifat non-linier karena Anda mengalikan matriks permutasi dengan x(i) [kuantitas yang juga Anda selesaikan]? - person Gurobi22; 06.12.2016
comment
Sial, kamu benar. Bisa dilinearisasi dengan mudah tapi itu membuat hal ini agak rumit. - person Erwin Kalvelagen; 06.12.2016
comment
Saya telah mencoba mencari tahu, tetapi tampaknya agak sulit untuk linierisasikan batasan Ranking karena kuantitas dan variabel biner tidak diketahui. Ada ide? - person Gurobi22; 06.12.2016