Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  out of memory

    Posted 11/01/14 01:58 PM

    Originally posted by: end495


    Hello,

     

    // CHIRON TEZGAHLARININ İYİLEŞTİRİLMESİ

     

    // KÜMELER

     

    {string} Isler=...; // İşler kümesi

     

    int Makineler=2; // Makineler kümesi

    range M=1..Makineler;

     

    int Slotlar=card(Isler); // Slotlar kümesi

    range S=1.. Slotlar;

     

    // PARAMETRELER

     

    float  p[i in Isler]=...; // i işinin işlem süresi

     

    int f[i in Isler][j in Isler]=...; // clamp çakışma matrisi

     

    int d[i in Isler]=...; // i işinin teslim tarihi

     

    float h[i in Isler]=...; // i işinin hazırlık süresi

     

    int G=999; // büyük bir sayı

     

    // KARAR DEĞİŞKENLERİ

     

    dvar boolean x[i in Isler][m in M][s in S]; // i işi m makinesinin s slotuna çizelgelenmişse

                                                  

    dvar boolean y[i in Isler][j in Isler][m in M][s in S]; // i ve j işleri aynı makinenin ardışık slotlarına çizelgelenmişse

     

    dvar boolean z[i in Isler][j in Isler][m in M][s in S]; // aynı ekipmanları kullanan i ve j işleri aynı makinenin ardışık slotlarına çizelgelenmişse

     

    float t[m in M][s in S]; // m makinesinin s slotuna çizelgelenen işin başlama zamanı

     

    float Cmax; // en büyük tamamlanma zamanı

     

    // AMAÇ FONKSİYONU(Her bir amaç fonksiyonu ayrı ayrı çözdürülecek. Her bir amaç fonksiyonundan elde edilen optimal sonuç ağırlıklandırma amacıyla Amaç3 için parametre olarak kullanılacak.)

     

    minimize Cmax; // Amaç1: en büyük tamamlanma zamanının en küçüklenmesi

     

    maximize sum(i in Isler)sum(j in Isler:ord(Isler,i)!=ord(Isler,j))sum(m in M)sum(s in S)z[i][j][m][s]; // Amaç2: aynı ekipmanları kullanan işlerin aynı makinenin ardışık slotlarına çizelgelenmesinin en büyüklenmesi

     

     

     

    // KISITLAR

     

    subject to{

    forall(i in Isler)

    sum(m in M)sum(s in S)x[i][m][s]==1; // Kısıt1: Her işin yalnızca bir makinenin bir slotuna çizelgelenmesini sağlamaktadır.

     

    forall(m in M)

    forall(s in S)

    sum(i in Isler)x[i][m][s]<=1; // Kısıt2: Bir makinenin bir slotuna yalnızca bir işin çizelgelenmesini sağlamaktadır.

     

    forall(i in Isler, j in Isler:ord(Isler,i)!=ord(Isler,j))

    forall(m in M)

    forall(s in S:s<=Slotlar-1)

    x[i][m][s]+x[j][m][s+1]-1<=y[i][j][m][s]; // Kısıt3: İki farklı iş aynı makinenin ardışık slotlarına çizelgelenmişse ilgili karar değişkenine 1 değerini atayarak bu iki iş arasındaki hazırlık zamanının oluşmasını sağlamaktadır.

     

    forall(i in Isler, j in Isler:ord(Isler,i)!=ord(Isler,j))

    forall(m in M)

    forall(s in S)

    f[i][j]-(1-y[i][j][m][s])<=z[i][j][m][s]; // Kısıt4: Aynı ekipmanları kullanan iki farklı iş aynı makinenin ardışık slotlarına çizelgelenmişse ilgili karar değişkenine 1 değerinin atanmasını sağlamaktadır.

     

    forall(i in Isler, j in Isler:ord(Isler,i)!=ord(Isler,j))

    forall(m in M)

    forall(s in S)

    G*(1-z[i][j][m][s])>=h[j]; // Kısıt5: Aynı ekipmanları kullanan iki farklı iş aynı makinenin ardışık slotlarına çizelgelenmişse j işinin hazırlık zamanı parametresine 0 değerinin atanmasını sağlamaktadır.

     

    forall(m in M)

    forall(s in S:s<=Slotlar-1)

    t[m][s]+sum(i in Isler)x[i][m][s]*p[i]+sum(i in Isler)sum(j in Isler:ord(Isler,i)!=ord(Isler,j))y[i][j][m][s]*h[j]<=t[m][s+1]; // Kısıt6: Bir makinenin her bir slotundaki işin başlama zamanının belirlenmesini sağlamaktadır.

     

    forall(m in M)

    forall(s in S:s<=Slotlar-1)

    sum(i in Isler)x[i][m][s+1]>=sum(i in Isler)x[i][m][s]; // Kısıt7: Bir makinenin bir sonraki slotuna bir iş çizelgelenmişse aynı makinenin bir önceki slotuna da bir işin çizelgelenmesini sağlamaktadır.

     

    forall(i in Isler)

    forall(m in M)

    forall(s in S)

    t[m][s]+p[i]-G*(1-x[i][m][s])<=d[i]; // Kısıt8: Bir makinenin her bir slotundaki işin teslim tarihinden önce tamamlanmasını sağlamaktadır.

    forall(m in M)

    t[m][Slotlar]+sum(i in Isler)x[i][m][Slotlar]*p[i]<=Cmax; // Kısıt9: Her makinenin son slotundaki işin başlama zamanının o slota çizelgelenmiş işin işlem süresiyle toplamının en büyük tamamlanma zamanından küçük ya da ona eşit olmasını sağlamaktadır.

     

    forall(m in M)

    t[m][1]==sum(i in Isler)x[i][m][1]*h[i]; // Kısıt10: Her bir makinenin ilk slotuna çizelgelenen işin başlama zamanına o işin hazırlık zamanının değerinin atanmasını sağlamaktadır.

     

    forall(m in M)

    forall(s in S)

    t[m][s]>=0; // Kısıt11: İşaret kısıtını oluşturmaktadır.

     

    Cmax>=0; // Kısıt12: İşaret kısıtını oluşturmaktadır.

    }

    I've got out of memory error while cplex is reading my model. I've got this error on the red highlighted constraint which is trying to do if two different jobs are scheduled in consecutive slots of same machine, the y decision variable takes 1 or 0.

     

     

     

     

     

     

     

     

     

     

     

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: out of memory

    Posted 11/10/14 02:52 AM

    Please re-post this question on the OPL Forum. The people there may have hints how to save memory. In the worst case you will have get a bigger machine or reformulate your problem :-(


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: out of memory

    Posted 11/15/14 02:33 PM

    Originally posted by: end495


    Any other suggestions for memory saving?


    #CPLEXOptimizers
    #DecisionOptimization