Mantıksal kısıtlar

Python ile Tedarik Zinciri Analitiği

Aaren Stubberfield

Supply Chain Analytics Mgr.

Örnek problem

Azami Ağırlık 20.000 lb

Ürün Ağırlık (lb) Kârlılık ($US)
A 12.800 77.878
B 10.900 82.713
C 11.400 82.728
D 2.100 68.423
E 11.300 84.119
F 2.300 77.765
  • Ağırlık sınırını aşmadan en kârlı ürünü seç
  • Karar Değişkenleri:
    • X$_{i}$ = ürün _i_ seçilirse 1, yoksa 0
  • Amaç:
    • z'yi enbüyükle = $\sum$ Kârlılık$_{i}$X$_{i}$
  • Kısıt:
    • $\sum$ Ağırlık$_{i}$X$_{i}$ < 20.000
Python ile Tedarik Zinciri Analitiği
prod = ['A', 'B', 'C', 'D', 'E', 'F']
weight = {'A':12800, 'B':10900, 'C':11400, 'D':2100, 'E':11300, 'F':2300}
prof = {'A':77878, 'B':82713, 'C':82728, 'D':68423, 'E':84119, 'F':77765}

# Initialize Class model = LpProblem("Loading Truck Problem", LpMaximize) # Define Decision Variables x = LpVariable.dicts('ship_', prod, cat='Binary')
# Define Objective model += lpSum([prof[i]*x[i] for i in prod]) # Define Constraint model += lpSum([weight[i]*x[i] for i in prod]) <= 20000
# Solve Model model.solve() for i in prod: print("{} status {}".format(i, x[i].varValue))
Python ile Tedarik Zinciri Analitiği

Örnek sonuç

Azami Ağırlık 20.000 lb

Ürün Gönderilsin mi?
A Hayır
B Hayır
C Hayır
D Evet
E Evet
F Evet

Sonuç

  • Kârlılık: $230.307
  • Ürünlerin Ağırlığı: 15.700 lb
Python ile Tedarik Zinciri Analitiği

Mantıksal kısıt örnek 1

Ya ürün E seçilir ya da ürün D seçilir; ikisi birden değil.

  • X$_{E}$ = ürün _i_ seçilirse 1, yoksa 0
  • X$_{D}$ = ürün _i_ seçilirse 1, yoksa 0
  • Kısıt
    • X$_{E}$ + X$_{D}$ ≤ 1
Python ile Tedarik Zinciri Analitiği

Kod örneği - mantıksal kısıt örnek 1

model += x['E'] + x['D'] <= 1
prod = ['A', 'B', 'C', 'D', 'E', 'F']
weight = {'A':12800, 'B':10900, 'C':11400, 
          'D':2100, 'E':11300, 'F':2300}
prof = {'A':77878, 'B':82713, 'C':82728, 
        'D':68423, 'E':84119, 'F':77765}

# Initialize Class
model = LpProblem("Loading Truck Problem",
                   LpMaximize)

# Define Decision Variables
x = LpVariable.dicts('ship_', prod, 
                      cat='Binary')
# Define Objective
model += lpSum([prof[i]*x[i] for i in prod])

# Define Constraint
model += 
  lpSum([weight[i]*x[i] for i in prod]) <= 20000
model += x['E'] + x['D'] <= 1

# Solve Model
model.solve()
for i in prod:
  print("{} status {}".format(i, x[i].varValue))
Python ile Tedarik Zinciri Analitiği

Mantıksal kısıt 1 örnek sonucu

Azami Ağırlık 20.000 lb

Ürün Gönderilsin mi?
A Hayır
B Hayır
C Evet
D Evet
E Hayır
F Evet

Sonuç

  • Kârlılık: $228.916
  • Ürünlerin Ağırlığı: 15.800 lb
Python ile Tedarik Zinciri Analitiği

Mantıksal kısıt örnek 2

Ürün D seçilirse ürün B de seçilmelidir.

  • X$_{D}$ = ürün _i_ seçilirse 1, yoksa 0
  • X$_{B}$ = ürün _i_ seçilirse 1, yoksa 0
  • Kısıt
    • X$_{D}$ ≤ X$_{B}$
Python ile Tedarik Zinciri Analitiği

Kod örneği - mantıksal kısıt örnek 2

model += x['D'] <= x['B']

prod = ['A', 'B', 'C', 'D', 'E', 'F'] weight = {'A':12800, 'B':10900, 'C':11400, 'D':2100, 'E':11300, 'F':2300} prof = {'A':77878, 'B':82713, 'C':82728, 'D':68423, 'E':84119, 'F':77765} # Initialize Class model = LpProblem("Loading Truck Problem", LpMaximize) # Define Decision Variables x = LpVariable.dicts('ship_', prod, cat='Binary')
# Define Objective
model += lpSum([prof[i]*x[i] for i in prod])

# Define Constraint
model += 
 lpSum([weight[i]*x[i] for i in prod]) <= 20000
model += x['D'] <= x['B']

# Solve Model
model.solve()
for i in prod:
  print("{} status {}".format(i, x[i].varValue))
Python ile Tedarik Zinciri Analitiği

Mantıksal kısıt 2 örnek sonucu

Azami Ağırlık 20.000 lb

Ürün Gönderilsin mi?
A Hayır
B Evet
C Hayır
D Evet
E Hayır
F Evet

Sonuç

  • Kârlılık: $228.901
  • Ürünlerin Ağırlığı: 15.300 lb
Python ile Tedarik Zinciri Analitiği

Diğer mantıksal kısıtlar

Mantıksal Kısıt Kısıt
Öğe _i_ seçilirse, öğe _j_ de seçilir. x$_{i}$ - x$_{j}$ ≤ 0
Ya öğe _i_ seçilir ya da öğe _j_ seçilir, ama ikisi birden değil. x$_{i}$ + x$_{j}$ = 1
Öğe _i_ seçilirse, öğe _j_ seçilmez. x$_{i}$ - x$_{j}$ ≤ 1
Öğe _i_ seçilmezse, öğe _j_ de seçilmez. -x$_{i}$ + x$_{j}$ ≤ 0
En fazla _i_, _j_ ve _k_ öğelerinden biri seçilir. x$_{i}$ + x$_{j}$ + x$_{k}$ ≤ 1
1 James Orlin ve Ebrahim Nasrabadi. 15.053 Yönetim Biliminde Optimizasyon Yöntemleri. Bahar 2013. Massachusetts Institute of Technology: MIT OpenCourseWare. Lisans: Creative Commons BY-NC-SA.
Python ile Tedarik Zinciri Analitiği

Özet

  • Mantıksal kısıt örneklerini gözden geçirdik
  • Diğer mantıksal kısıtlar için bir tablo listeledik
Python ile Tedarik Zinciri Analitiği

Sıra sende!

Python ile Tedarik Zinciri Analitiği

Preparing Video For Download...