İçeriğe geç
academia.sh

Ders 03 / 12

Değer Akışı

Fikirden üretime giden yolun haritalanması: dokuz adımlı akışta 20 iş kaleminin ortalama 182,0 adımlık öncü süresinin 70,2 adımının işlem ve 111,8 adımının bekleme olması (katma değerli pay %38,5), toplam 2237 adım beklemenin 1485'inin tek bir adımda — yayın penceresinde — durması, yayın penceresi 20 adımken hiçbir tek adım iyileştirmesinin öncü süreyi 2 adımdan fazla kısaltmaması, pencere 5 adıma indirildiğinde aynı iyileştirmelerin ayrışıp yazma 10'dan 5'e inince 32 adım kazandırması ama kabul onayı 2'den 1'e inince 4 adım kaybettirmesi, ve darboğazın yayın penceresinden yazmaya, oradan tümleşik sınamaya kayması.

İçindekiler

Önceki ders aynı yolu iki düzende koşturdu ve sınırda düşen bağlamı saydı, ama yolun kendisini sabit tuttu: yedi adım, sabit süreler. Bir değişikliğin fikirden üretime giden yolunda asıl soru kaç adım olduğu değil, o adımların hangisinde ne kadar durulduğudur.

Değer akışı haritası, bu yoldaki her adımı üç sayıyla yazan çizelgedir: işlem süresi, bekleme süresi ve ilk seferde doğru oranı. M20/K05’in iş kalemi ile aynı nesneyi ölçer, ölçeği farklıdır — orada ölçülen bir iş kaleminin ekipler arası yoluydu, burada ölçülen bir değişikliğin fikirden üretime giden yoludur.

Haritanın Kurulması

Örnek yine kurgu bölgesel ölçüm ağıdır; ağ da akış da kurgudur. KA13: yol dokuz adımdır — talep sıraya alma, çözümleme, yazma, gözden geçirme, tümleşik sınama, kabul onayı, yayın penceresi, üretim kurulumu, üretim doğrulaması. KA14: her adımın eş zamanlı yürütücü sayısı, işlem süresi ve ilk seferde doğru oranı vardır; ilk seferde doğru çıkmayan kalem adımın dönüş hedefine geri gider ve o adımdan itibaren yeniden yürür. KA15: yirmi iş kalemi on ikişer adım arayla akışa girer. Bekleme bir girdi değildir, ölçülür: yürütücü doluysa kuyrukta, yayın penceresi kapalıysa pencerede birikir. KA16: yayın penceresi yirmi adımda bir açılır. KA17: rastgelelik üreteçle yazılır, tohum 20260801’dir; her kaleme kendi zar dizisi verilir, böylece bir adımın süresi değiştiğinde kalemin şansı değişmez ve koşumlar karşılaştırılabilir kalır. KA18: öncü süre akışa girişten üretim doğrulamasının bitişine kadar geçen adımdır; katma değerli süre kalemin adımlarda geçirdiği işlem süresinin toplamıdır.

Harita ve akış süreç içi bir modeldir; gerçek bir akış kaydı ya da yayın çizelgesi yoktur.

// akis/harita.mjs — fikirden uretime deger akisi haritasi (model): gercek bir akis kaydi yok,
// adimlar veri yapisidir. Rastgelelik uretecle yazilir, tohum gorunur.

export const N = 20, VARIS = 12, LIMIT = 4000, PENCERE = 20, TOHUM = 20260801;

// adim: ad, es zamanli yurutucu, islem suresi, ilk seferde dogru orani, donus hedefi
export const ADIM = [
  ["talep-siraya-alma", 1, 1, 1.00, 0], ["cozumleme", 1, 4, 0.85, 0],
  ["yazma", 2, 10, 0.80, 1], ["gozden-gecirme", 1, 3, 0.75, 2],
  ["tumlesik-sinama", 1, 8, 0.70, 2], ["kabul-onayi", 1, 2, 0.90, 1],
  ["yayin-penceresi", 1, 1, 1.00, 0], ["uretim-kurulumu", 1, 3, 0.95, 2],
  ["uretim-dogrulama", 1, 2, 0.90, 2],
].map(([ad, kap, islem, isd, donus], i) => ({ ad, kap, islem, isd, donus, i }));

// dogrusal eslesmeli uretec: her kaleme kendi zar dizisi verilir, boylece bir adimin suresi
// degistiginde kalemin sansi degismez ve kosumlar karsilastirilabilir kalir.
export function uretec(tohum) {
  let x = tohum >>> 0;
  return () => ((x = (x * 1664525 + 1013904223) >>> 0) / 2 ** 32);
}

export function kos({ islem = {}, pencere = PENCERE } = {}) {
  const adim = ADIM.map((a) => ({ ...a, islem: islem[a.ad] ?? a.islem }));
  const zar = uretec(TOHUM);
  const K = Array.from({ length: N }, (_, i) => ({ i, varis: i * VARIS, adim: 0,
    hazir: i * VARIS, kosuyor: false, kalan: 0, bitti: false, bitis: null, isToplam: 0,
    bekleme: 0, yenidenIs: 0, hata: false, hataAt: null, kurtarma: null,
    zar: Array.from({ length: 80 }, zar), zarNo: 0 }));
  const mesgul = adim.map(() => 0);
  const S = { bekleme: adim.map(() => 0), islem: adim.map(() => 0), ziyaret: adim.map(() => 0),
    donus: adim.map(() => 0), dagitim: 0 };

  const bitir = (d, t) => {
    const a = adim[d.adim];
    mesgul[a.i]--; d.kosuyor = false;
    if (a.isd < 1 && d.zar[d.zarNo++] >= a.isd) {        // ilk seferde dogru degil
      S.donus[a.i]++; d.yenidenIs++;
      if (a.ad === "uretim-dogrulama" && !d.hata) { d.hata = true; d.hataAt = t; }
      d.adim = a.donus; d.hazir = t; return;
    }
    if (a.ad === "uretim-kurulumu") S.dagitim++;
    if (a.i === adim.length - 1) {
      d.bitti = true; d.bitis = t;
      if (d.hata) d.kurtarma = t - d.hataAt;
      return;
    }
    d.adim = a.i + 1; d.hazir = t;
  };

  for (let t = 0; t < LIMIT; t++) {
    for (const a of adim) {
      if (a.ad === "yayin-penceresi" && t % pencere !== 0) continue;   // toplu yayin penceresi
      const kuyruk = K.filter((d) => !d.bitti && !d.kosuyor && d.adim === a.i && d.hazir <= t)
        .sort((x, y) => x.hazir - y.hazir || x.i - y.i);
      for (const d of kuyruk) {
        if (mesgul[a.i] >= a.kap) break;
        S.bekleme[a.i] += t - d.hazir; d.bekleme += t - d.hazir;
        S.islem[a.i] += a.islem; S.ziyaret[a.i]++; d.isToplam += a.islem;
        d.kosuyor = true; d.kalan = a.islem; mesgul[a.i]++;
      }
    }
    for (const d of K) if (d.kosuyor && --d.kalan === 0) bitir(d, t + 1);
  }
  return { K, S, adim };
}

export const ort = (a) => (a.length ? (a.reduce((s, v) => s + v, 0) / a.length).toFixed(1) : "-");

export function olc(ayar) {
  const { K, S, adim } = kos(ayar);
  const oncu = K.map((d) => d.bitis - d.varis);
  const pencere = Math.max(...K.map((d) => d.bitis));
  const kd = K.reduce((s, d) => s + d.isToplam, 0), top = oncu.reduce((s, v) => s + v, 0);
  return { K, S, adim,
    onculSure: ort(oncu), katmaDeger: (100 * kd / top).toFixed(1) + "%",
    enUzunBekleme: adim[S.bekleme.indexOf(Math.max(...S.bekleme))].ad,
    ilkSefer: (100 * K.filter((d) => d.yenidenIs === 0).length / N).toFixed(0) + "%",
    yenidenIs: K.reduce((s, d) => s + d.yenidenIs, 0),
    dagitimSikligi: (100 * S.dagitim / pencere).toFixed(1),
    geriDonusOrani: (100 * K.filter((d) => d.hata).length / N).toFixed(0) + "%",
    kurtarma: ort(K.filter((d) => d.hata).map((d) => d.kurtarma)),
    bitmeyen: K.filter((d) => !d.bitti).length };
}
// akis/olc.mjs — haritanin okunmasi: katma deger payi, en uzun bekleme, tek adim iyilestirmesi.
import { ADIM, N, PENCERE, TOHUM, olc, ort } from "./harita.mjs";

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const T = olc({}), P = olc({ pencere: 5 });

console.log(`${N} is kalemi, ${ADIM.length} adim, yayin penceresi ${PENCERE} adim, ` +
  `tohum ${TOHUM}; bitmeyen ${T.bitmeyen}`);

const A = [-19, 6, 7, 14, 9, 11, 7, 10];
console.log("\n1. deger akisi haritasi (olculen)");
yaz(A, "adim", "yurutucu", "islem", "ort. bekleme", "ziyaret", "ilk sefer", "donus",
  "bekleme");
for (const a of T.adim) {
  const z = T.S.ziyaret[a.i];
  yaz(A, a.ad, a.kap, a.islem, (T.S.bekleme[a.i] / z).toFixed(1), z,
    a.isd < 1 ? `${(100 * (1 - T.S.donus[a.i] / z)).toFixed(0)}%` : "-", T.S.donus[a.i],
    T.S.bekleme[a.i]);
}

const B = [-34, 16];
console.log("\n2. haritanin toplami (taban)");
for (const [ad, v] of [["ort. oncu sure (adim)", T.onculSure],
  ["kalem basina islem (adim)", ort(T.K.map((d) => d.isToplam))],
  ["kalem basina bekleme (adim)", ort(T.K.map((d) => d.bekleme))],
  ["katma degerli payi", T.katmaDeger], ["en uzun beklemenin durdugu adim", T.enUzunBekleme],
  ["hic yeniden ise donmeyen kalem", T.ilkSefer], ["toplam yeniden is (donus)", T.yenidenIs]])
  yaz(B, ad, v);

const C = [-19, 11, 12, 10, 12, 10];
console.log("\n3. tek adimin islem suresi yariya inerse (iki pencere ayarinda)");
yaz(C, "iyilestirilen", "islem", "pencere 20", "degisim", "pencere 5", "degisim");
yaz(C, "(taban)", "-", T.onculSure, "-", P.onculSure, "-");
for (const a of ADIM.filter((a) => a.islem >= 2)) {
  const y = Math.floor(a.islem / 2), i = { [a.ad]: y };
  const R = olc({ islem: i }), Q = olc({ islem: i, pencere: 5 });
  yaz(C, a.ad, `${a.islem} -> ${y}`, R.onculSure, (R.onculSure - T.onculSure).toFixed(1),
    Q.onculSure, (Q.onculSure - P.onculSure).toFixed(1));
}

const D = [-30, 10, 9, 11, 10, 12];
const K = { "taban (pencere 20)": T, "darbogaz: yazma 10->5": olc({ islem: { yazma: 5 } }),
  "darbogaz disi: cozumleme 4->2": olc({ islem: { cozumleme: 2 } }),
  "pencere 20->5": P,
  "pencere 5 + yazma 10->5": olc({ pencere: 5, islem: { yazma: 5 } }) };
console.log("\n4. dort teslimat olcutu ve katma deger payi");
yaz(D, "kosum", "oncu sure", "dagitim", "geri donus", "kurtarma", "katma deger");
for (const [ad, R] of Object.entries(K))
  yaz(D, ad, R.onculSure, R.dagitimSikligi, R.geriDonusOrani, R.kurtarma, R.katmaDeger);

const E = [-30, 16, 16];
console.log("\n5. beklemenin nerede durdugu");
yaz(E, "kosum", "en uzun bekleme", "toplam bekleme");
for (const [ad, R] of Object.entries(K))
  yaz(E, ad, R.enUzunBekleme, R.S.bekleme.reduce((s, v) => s + v, 0));
20 is kalemi, 9 adim, yayin penceresi 20 adim, tohum 20260801; bitmeyen 0

1. deger akisi haritasi (olculen)
adim               yurutucu  islem  ort. bekleme  ziyaret  ilk sefer  donus   bekleme
talep-siraya-alma       1      1           0.0       28          -      0         0
cozumleme               1      4           1.0       48        83%      8        50
yazma                   2     10           8.6       61        70%     18       524
gozden-gecirme          1      3           0.0       43        74%     11         0
tumlesik-sinama         1      8           5.6       32        78%      7       178
kabul-onayi             1      2           0.0       25        92%      2         0
yayin-penceresi         1      1          64.6       23          -      0      1485
uretim-kurulumu         1      3           0.0       23       100%      0         0
uretim-dogrulama        1      2           0.0       23        87%      3         0

2. haritanin toplami (taban)
ort. oncu sure (adim)                        182.0
kalem basina islem (adim)                     70.2
kalem basina bekleme (adim)                  111.8
katma degerli payi                           38.5%
en uzun beklemenin durdugu adim    yayin-penceresi
hic yeniden ise donmeyen kalem                 20%
toplam yeniden is (donus)                       49

3. tek adimin islem suresi yariya inerse (iki pencere ayarinda)
iyilestirilen            islem  pencere 20   degisim   pencere 5   degisim
(taban)                      -       182.0         -       118.0         -
cozumleme               4 -> 2       182.0       0.0       114.0      -4.0
yazma                  10 -> 5       180.0      -2.0        86.0     -32.0
gozden-gecirme          3 -> 1       182.0       0.0       115.5      -2.5
tumlesik-sinama         8 -> 4       180.0      -2.0       106.0     -12.0
kabul-onayi             2 -> 1       182.0       0.0       122.0       4.0
uretim-kurulumu         3 -> 1       180.0      -2.0       117.0      -1.0
uretim-dogrulama        2 -> 1       181.0      -1.0       118.0       0.0

4. dort teslimat olcutu ve katma deger payi
kosum                          oncu sure  dagitim geri donus  kurtarma katma deger
taban (pencere 20)                 182.0      4.5        15%     213.3       38.5%
darbogaz: yazma 10->5              180.0      4.5        15%     213.3       30.5%
darbogaz disi: cozumleme 4->2      182.0      4.5        15%     220.0       35.9%
pencere 20->5                      118.0      6.0        15%     130.0       59.4%
pencere 5 + yazma 10->5             86.0      6.7        15%      73.3       63.8%

5. beklemenin nerede durdugu
kosum                          en uzun bekleme  toplam bekleme
taban (pencere 20)             yayin-penceresi            2237
darbogaz: yazma 10->5          yayin-penceresi            2502
darbogaz disi: cozumleme 4->2  yayin-penceresi            2333
pencere 20->5                            yazma             957
pencere 5 + yazma 10->5        tumlesik-sinama             622

Sayılar ölçüm sınıfındadır; girdileri yukarıdaki varsayımlardır. Model katma değerliyi “işlem” olarak tanımlar ve yeniden iş de işlem sayılır; bu yüzden %38,5 bir tavan değeridir.

Öncü Sürenin İçinde Ne Var

Ortalama öncü süre 182,0 adımdır: 70,2 adım işlem, 111,8 adım bekleme. Katma değerli pay %38,5’tir — bir kalem yolun üçte ikisini durarak geçirir. Yığılmış ilk seferde doğru oranı daha çarpıcıdır: yirmi kalemin yalnız dördü, yani %20’si, hiç geri dönmeden akışı geçer. Kalan on altı kalem toplam 49 dönüş üretir.

Birinci tablo bu 49 dönüşü adıma dağıtır: yazma 18, gözden geçirme 11, çözümleme 8, tümleşik sınama 7, üretim doğrulaması 3, kabul onayı 2. Ziyaret sayıları bunun sonucudur — yirmi kalem yazma adımını 61 kez ziyaret eder.

Beklemenin dağılımı ise düz değildir. Dokuz adımın beşinde bekleme sıfırdır. Toplam 2237 adım beklemenin 1485’i tek bir adımda durur: yayın penceresi. Ziyaret başına 64,6 adım. İkinci en büyük yığılma yazma adımındadır (524 adım, ziyaret başına 8,6). Beklemenin durduğu yer ile işin yapıldığı yer aynı değildir.

Bir Adımı İyileştirmek Neden Görünmüyor

Üçüncü tablo her adımın işlem süresini yarıya indirip toplam öncü süredeki değişimi ölçer. Yayın penceresi 20 adımken sonuç tektir: hiçbir iyileştirme 2 adımdan fazla kazandırmaz. Çözümlemeyi 4’ten 2’ye indirmek 0,0 adım, yazmayı 10’dan 5’e indirmek 2,0 adım kazandırır. On adımlık bir işi yarıya bölmek 182 adımlık öncü sürenin yüzde birini bile değiştirmez, çünkü kazanılan süre yayın penceresinde geri beklenir.

Pencere 5 adıma indirildiğinde aynı iyileştirmeler ayrışır. Yazma 10’dan 5’e inince öncü süre 32,0 adım kısalır; tümleşik sınama 8’den 4’e inince 12,0; çözümleme 4’ten 2’ye inince yalnız 4,0. Kabul onayını 2’den 1’e indirmek ise öncü süreyi 4,0 adım uzatır — kalemler darboğaza daha sık ve daha kümelenmiş varır. Darboğaz dışındaki iyileştirme yalnız görünmez değildir; işaret bile değiştirebilir.

Darboğaz Kayar

Beşinci tablo en uzun beklemenin nerede durduğunu koşum koşum izler. Tabanda yayın penceresidir. Pencere 5’e indirilince yazmaya geçer (toplam bekleme 2237’den 957’ye iner). Yazma da yarıya indirilince tümleşik sınamaya geçer (622). Üç koşumda üç ayrı adım.

Dördüncü tablo bunun teslimat karşılığını verir. Geri dönüş oranı beş koşumun beşinde de %15’tir; ilk seferde doğru oranları değişmediği için bu ölçüt hiç oynamaz. Dağıtım sıklığı 4,5’ten 6,0’a, oradan 6,7’ye çıkar; kurtarma süresi 213,3’ten 130,0’a, oradan 73,3 adıma iner; katma değerli pay %38,5’ten %59,4’e, oradan %63,8’e yükselir. Buna karşılık yalnız darboğazı iyileştiren koşumda katma değerli pay %38,5’ten %30,5’e düşer: işlem süresi kısalmış, bekleme yerinde kalmıştır.

Farkın Saklandığı Yer

Bu derste fark beklemenin dağılımında saklıdır ve sayısı şudur: dokuz adımın beşinde bekleme sıfır, birinde toplamın %66’sı. Bildirilmiş kısım işlem süreleridir — haritaya bakan herkes yazmanın 10, tümleşik sınamanın 8 adım sürdüğünü okur. Bildirilmemiş kısım beklemedir; girdi değildir, ancak koşumda doğar ve iyileştirme kararını o belirler.

Sinyalin kime kaç adımda ulaştığı da dönüş hedeflerinden okunur. Tümleşik sınamada bulunan sapma yazma adımına iki adım geriden döner ve 7 dönüş buradan gelir. Aynı sınıftan bir sapma üretim doğrulamasında bulunursa yazmaya altı adım geriden döner; bu 3 kalemin kurtarma süresi 213,3 adımdır. Sinyal aynıdır; pahalı olan, geri dönüş yolunun uzunluğudur.

Özet

  • Dokuz adımlık akışta ortalama öncü süre 182,0 adımdır: 70,2 adım işlem, 111,8 adım bekleme; katma değerli pay %38,5 (yeniden iş de işlem sayıldığı için bu bir tavan değeridir).
  • Yirmi kalemin yalnız %20’si hiç geri dönmeden geçer; 49 dönüşün 18’i yazma, 11’i gözden geçirme, 8’i çözümleme adımından çıkar.
  • Toplam 2237 adım beklemenin 1485’i tek bir adımda durur (yayın penceresi, ziyaret başına 64,6); dokuz adımın beşinde bekleme sıfırdır.
  • Yayın penceresi 20 adımken hiçbir tek adım iyileştirmesi öncü süreyi 2 adımdan fazla kısaltmaz; pencere 5’e indirildiğinde yazma 32,0 adım kazandırır, kabul onayı ise 4,0 adım kaybettirir.
  • Darboğaz üç koşumda üç ayrı adıma kayar; dağıtım sıklığı 4,5 → 6,0 → 6,7 ve kurtarma süresi 213,3 → 130,0 → 73,3 adım olurken geri dönüş oranı beş koşumda da %15’te kalır.

Sonraki Adım

Bu ders dört ölçütü birer sonuç olarak okudu: harita değişti, ölçütler onu izledi. Oysa ölçütlerin kendisi bir kümedir ve birbirini oynatır. Sonraki ders dört teslimat ölçütünü — dağıtım sıklığı, öncü süre, geri dönüş oranı, kurtarma süresi — bağlı bir küme olarak koşturur: parti büyüklüğünü küçültmenin, kapı eklemenin ve otomatik geri almanın her dördünde ölçülen değişimi yazılır ve bir ölçütü iyileştirip ötekini bozan kararlar adıyla gösterilir.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat