$Title EOQ-Modell Blockrabatte $Ontext Vorlesung: Supply Chain Management Abschnitt: 2.4 Einstufige Beschaffungsplanung bei Multiple Sourcing und Mengenrabatten Problemstellung: Lieferantenwahl und Allokation optimaler Bestellmengen bei Blockrabatten und gleichmaessigem Bedarfsverlauf - Model - Author: Rui Guo Date: 17/12/2019 $Offtext $eolcom// $include eoq-qd_data.gms variables kosten Gesamtkostenrate q_total Gesamte Bestellmenge pro Bestellzyklus deltaQ(i,l) Teil der Bestellmenge bei Lieferant i der auf Rabattstufe l entfaellt y(i,l) gleich 1 falls bei Lieferant i auf Rabattstufe l bestellt wird ; positive variables deltaQ, q_total ; binary variables y ; equations def_kosten Definition der Gesamtkostenrate eine_bestellung Sicherstellung dass mindestens eine Bestellung erfolgt def_q_total Definition der Gesamtbestellmenge rabattstufe_unten(i,l) Einhaltung der unteren Grenzen der Rabattstufe l>1 bei Lieferant i rabattstufe_unten_1(i,l) Einhaltung der unteren Grenze der ersten Rabattstufe l=1 bei Lieferant i rabattstufe_oben(i,l) Einhaltung der oberen Grenzen der Rabattstufe l>1 bei Lieferant i rabattstufe_oben_1(i,l) Einhaltung der oberen Grenze der ersten Rabattstufe l=1 bei Lieferant i rabattstufen_1_2(i,l) Nur Bestellung auf Rabattstufe 2 wenn Obergrenze von Rabattstufe 1 erreicht lieferrate_max(i) Beschraenkung der Lieferrate von Lieferant i ; def_kosten.. kosten =e= sum(i, sum(l$stufe(i,l), pi(i,l)*deltaQ(i,l)*d/q_total + I_rate/2*pi(i,l)*deltaQ(i,l)) + k(i)*y(i,'l1')*d/q_total) ; eine_bestellung.. sum(i, y(i,'l1')) =g= 1 ; def_q_total.. q_total =e= sum((i,l)$stufe(i,l), deltaQ(i,l)) ; rabattstufe_unten(i,l)$(stufe(i,l) and (ord(l)>1) and (ord(l)1)).. deltaQ(i,l) =l= (ub(i,l)-lb(i,l))*y(i,l) ; rabattstufe_oben_1(i,l)$(ord(l)=1).. deltaQ(i,l) =l= ub(i,l)*y(i,l) ; rabattstufen_1_2(i,l)$(ord(l)=1).. deltaQ(i,l) =g= ub(i,l)*y(i,l+1) ; lieferrate_max(i).. sum(l$stufe(i,l), deltaQ(i,l)*d) =l= q_total*qDot(i) ; model eoq_id / all / ; options minlp = lindoglobal optcr = 1e-6 reslim = 60 ; * Schranken fuer den Solver deltaQ.up(i,l)$(stufe(i,l) and (ord(l)=1)) = ub(i,l) ; deltaQ.up(i,l)$(stufe(i,l) and (ord(l)>1)) = ub(i,l)-lb(i,l) ; q_total.up = sum((i,l)$(ord(l)=num_levels(i)), ub(i,l)) ; q_total.lo = smin((i,l)$stufe(i,l), lb(i,l)) ; y.fx(i,l)$(not stufe(i,l)) = 0 ; q_total.l = 1 ; // Vermeidung von Fehlern wegen Division durch Null solve eoq_id using minlp minimzing kosten ; display kosten.l, q_total.l, y.l, deltaQ.l ;