Alt-F4 #27 - Designování Zbytečného  12-03-2021

Napsal pocarski, upravil stringweasel, Nanogamer7, Conor_, Therenas, Firerazer,
přeložil oof2win2

Obsah

Tento týden, pocarski pokračuje s jeho sestupem do pásově-orientovaného šílenství tím, že se podívá na univerzální balancéry. Výsledek je jak šílený jako je zbytečný, takvíte, že tu máte pochoutku!

Univerzální 8-8: Perfectly Balanced, as All Things Should Be pocarski

Nedávno, vyrobil jsem několik počítačových částí s pásy a rozdělovači. Tento týden, budu pokračovat v mé nezdravé posedlosti s posuvem itemů vyráběním něčeho, což je po pravdě i trochu praktické: balancér. Tak, proč bych ale psal celý článek o designování balancéru? No, to je proto, že ten který vyrobíme tento týden není váš průměrný balancér!

Tento článek nepůjde moc hluboko do principů designování balancéru, protože budeme používat předem vyrobené a známé plány většinou. Ale, ne všechny balancéry jsou vytvořeny rovně, takže budete muset znát trochu terminologie:

  • Vstupově balancovaný: Bere z všech vstupů rovnoměrně. Zvláště důležitý, když rozdělujete hodně vstupů do pár výstupů
  • Výstupově balancovaný: Dává všem výstupům rovnoměrně. Zvláště důležitý, pokud rozdělujete pár vstupů do několika výstupů
  • Propustností limitovaný: Má interní limitace. Příklad propustností limitovaného by bylo spojování dvou pásů do jednoho, a poté rozdělování toho jednoho v dva. Takový systém má maximální propustnost jednoho pásu, i kdyby dva pásy byly k dispozici u vstupu a i u výstupu.
  • Propustností nelimitovaný: Opak propustností limitovaného, nemá žádné interní limitace. Pokud X pásů je schopno projít zkrz, projdou zkrs.

Všechny plány z tohoto článku (a pár dalších) jsou dostupné zde.

Propozice

Zobrazte si následující: Jste nový hráč, a právě jste slyšeli o věci nazývané “balancéry” a o tom, jak užitečné jsou. Chcete balancovat jeden pás na tři. Měli by jste použít 1-3 balancér pro toto, ale o tom ještě nevíte, takže zkusíte použít 4-4 balancér s pouze jedním vstupem a třiemy výstupy zapojeny. Místo očekávaného 1:1:1 výstupového poměru, setkáte se s 1:1:2 poměrem a hodně zklamání.

Jak nepoužívat balancér

S tímto článkem, dal jsem si cíl vytvořit balancér, pro který by tato intuice fungovala; v jiných slovech, nezáleží na konfiguraci vstupů/výstupů, věechny výstupy jsou si rovny, a z všech vstupů je bráno rovnoměrně. Tento druh balancéru je známý jako “univerzální balancér”, koncept poprvé prozkoumán v tomto postu Redditovým uživatelem u/tzwaan, který je jedním z moderátorů Factorio subredditu.

Univerzální balancéry jsou schopny dělat, to co by žádný jiný balancér nebyl schopný dělat: nezáleží na konfiguraci, jsou vstupově balancovány, výstupově balancovány a propustností nelimitovány v stejný čas! Toto je sada vlastností předtím myšleno, že bylo vlastněno pouze 2-2 balancérem, což je jeden rozdělovač. Nevýhoda je, že se stávají velkými.

Principy Designu

Podívejme se na konvertování 4-4 balancéru na 3-3 balancéru. Toto je děláno tím, že extra výstup dáte do smyčky zpět do prvního rozdělovače. Tento nápad budeme používat jako základní princip:

4-4 v smyčce

Chceme následující chování: Když se výstup bude přeplňovat, chceme, aby přebytek itemů cestoval zpět do vstupů balancéru na udržování plnou propustnost na všech výstupech. Jak bychom toto ale udělali? Je to lehké, využijeme prioritní rozdělovače. Pokud uděláme jejich neprioritní výstup dát itemy zpět do smyčky, garantujeme, že přebytek, a pouze přebytek, tam půjde. Také potřebujeme sloučit itemy v smyčce s vstupy, ale tentokrát s vstupovou prioritou. Nastavíme to tak, že itemy v smyčce jsou neprioritní vstup, aby se to nemotalo s vstupem žádným způsobem:

Automaticky smyčkující 4-4

Po trošce testování, zjistíme, že toto má základní vadu. Pokud se smyčkující itemy zkusí napojit na pás, který je plný, zaplní se až na bod rozpojení a zablokují přeplnění, což nás dá zpět na základní čáru.

|ničený automaticky smyčkující 4-4

Abychom toto opravili, musíme se ujistit, že každý item v smyčce je schopen se dostat do jednoho výstupu smyčky. Toto se může dělat hned několika způsoby, ale pro naše využití, díváme se na nejmenší číslo rozdělovačů. Je náhodou, že nejvíce ekonomickou cestou, jak toto udělat, je další balancér. Přidejme ho do smyčky:

Opravený 4-4

Teď máme plně funkční univerzální 4-4 balancér. Toto ale může být vylepšeno. Díky některým mechanikám balancérů, nepotřebujeme plné čtyři pásy na smyčku zpět. Obecně, potřebujeme o tři pásy méně, než pro kolik je náš balancér vyroben. Toto znamená, že jsme schopni optimalizovat náš balancér kompresováním smyčkujících pásů na dva, a potém rozdělování:

Lehký univerzální 4-4

Jsme také schopni toto přesunout do podoby, která zabírá mnohem méně místa, jako toto:

Small universal 4-4

Tento balancér, který je docela dlouhý, jepouze šest široký, což znamená, že jste schopni ho dát na standardní čtyřpásový bus, a mít dostatek místa, aby jste jich dali několik vedle sebe. Je důležité poznamenat, že toto není můj design, ale je založen na jednom z mých designů. Ztratil jsem ale jméno designéra, takže mu nejsem schopen dát správnou zásluhu.

Pokročilý design

Tak, zkusme se podívat na něco většího: univerzální 8-8. Začneme tím, že uděláme stejné kroky jako náš 4-4, ale místo toho použijeme 8-8 balancér. Toto je náš výsledek:

Základní univerzální 8-8

Bohužel, univerzální 8-8 balancér, který tímto způsobem získáme není perfektní. Narozdíl od standardního 4-4, standardní 8-8 je propustně limitován, což nechá celý univerzální 8-8 balancér propustností limitovaným. Zde je podmínka, která ho nechá zaplnit:

Základní zaplňující 8-8

Jak jste schopni si všimnout, šest pásů vstupu a výstupu je dostupných, ale méně než šest prochází. Naštěstí, toto může být rychle opraveno s výmenou jádrového balancéru na nelimitovaný propustností:

Správný univerzální 8-8

Všimněte si, jak sekundární balancér může zůstat vstupově nelimitovaný, protože jeho jediná práce je povolit, aby itemy šly zpět na pásy. Teď, mohli bychom zkusit použít kompresující trik loopbacku, ale museli bychom kompresovat osm pásů na pět a pak z pěti na osm. To konzumuje mnohem více rozdělovačů, než pokud bychom přeskočili konverzi a balancovali osm pásů rovnou. Protože používáme modré pásy, jsme schopni využít tkaní pásů a zmáčknout osm pásů loopbacku na dvě kostky široké cesty na každé straně:

Kompaktovaný univerzální 8-8

Celá věc je k nepoznání, a to je protože sekundární balancér je teď v řadě s hlavním, což znamená, že se musíme vypořádat s dvanácti pásy danými do prostoru osmi kostek, což nás nutí, aby druhý balancér byl roztáhlý. Pokud snížíme úroveň pásů na červené, jsme schopni odebrat tkaní pásů celkově, a místo toho jsme schopni využít pár modrých podzemních pásů abychom dostali osm červených pásů do prostoru čtyř. Toto nám dovolí lehce snížit úroveň i na žluté pásy, ale potřebujeme pořád využít pár červených a modrých podzemních pásů:

Modrá, červená a žlutá univerzální 8-8čky dohromady

Je definitivně možné, abychom použili žlutý design pásů bez použití modrých podzemních pásů, ale to by způsobilo, že by celý design byl mnohem delší. Je také možné, abychom nevyužívaly podzemní pásy vyšších úrovní u červených a žlutých pásů, ale to by způsobilo to, že by celý balancér byl o 33% širší a kdo ví o co delší.

Konečné Vysvětlení

Záměrně jsem nechal pár záhad v tomto článku, protože některé byly moc nepřijemné na vysvě, tlování v procesu, a některé sám dost nechápu. Toto je část, kde se je snažím vysvětlit, tak varování, že trochu technické věci budou následovat.

  • Jak víte, že balancér je nejefektivnější způsob distribuce itemů přes pásy?

Dokažme toto indukcí. Jako první, představte si že máme nejefektivnější distrubutor přes 2N-1 pásů, můžeme to nazývat “malým distributorem”. Teď, přidejme řadu rozdělovačů, aby rozdělily každý vstup na 2. Teď máme 2N-1-2N distributor. Abychom měli správné číslo vstupů, klonujme smalý distributor a vraťme jeho výstupy do zbytku vstupů v přidaném rádku rozdělovačů. Teď máme 2N-2N distributor s nejmenším možným počtem rozdělovačů možným. Řekněmě, že 2-2 distributor je jeden rozdělovač, což je očividně nejvíce efektivní. Efektivní generující algoritmus redistributorů je identický nejlehčímu generovacímu algoritmu balancérů, a to si můžete vyskoušet sami.

  • Jak jste schopni garantovat balancování vstupu?

Pro jakýkoli N-N balancér, pokud žádný výstup není přetížen, všechny mají stejnou propustnost nehledě na vstupy. Podobně, pokud žádné vstupy nejsou prázdné, každý z nich má stejnou propustnost nehledě na výstupy. Takže když smyčka má dostatečnou kapacitu na plnění chybějících vstupů, bude existovat balancování vstupu.

  • Proč je méně pásů v smyčce?

Abych byl upřímný, sám toto plně nechápu. Je to experimentálně získaný výsledek, a má to něco s dočiněním že tři je nejmenší číslo, které nedělí 2N, což nechá tři otevřené výstupy nejhorším případem, s kterým si musí smyčka poradit. Nejsem schopen ale vysv ětlit, proč jeden a dva nepotřebují plné smyčky. Pokud by si někdo chtěl poradit a pomoc mi s matematikou zde, byl bych více než rád.

Závěr

Toto byl víceméně povrchový vzhled na svět univerzálních balancérů. Mohli jsme se podívat hlouběji, třeba zkoumání N-3 teorému, ale nemyslím si, že univerzální balancéry jsou dostatečně užitečné na to. Jsou více hračkou a hezkou zvědavostí než něco použitelného v reálných situacích. Jsem schopen vymyslet pouze pár situací, kde by byly užitečné, a to je vykládání vlaků s variabilní délkou a druhá je že nechcete projíždět skrz plánové knížky balancérů. Univerzální balancéry (a po pravdě, všechny balancéry) jsou moc velké s moc malým benefitem, a stejně by jste měli používat prioritní rozdělovače. Univerzální 8-8 balancér je pouhým experimentem toho, co může být děláno s pásy (je to skoro jako kdyby to bylo duchovním nástupcem pásového sčítače a paměti) a není záměrem, aby se používal v užitečném způsobu. Pokud jste schopni najít scenário pro užitek, prosím napište mi, jsem sám docela zvědavý, pro jaké účely tato monstrosita může být využívána. Jste také vítáni zkusit vyrobit presentované designy menší pokud jste absolutní maniak a máte až moc volného času.

Přispívání

Jako vždy, hledáme lidi, kteří chtějí přispívat k Alt-F4, buď to je přidáváním zajímavěho článku nebo překladem. Pokud máte něco zajímavého na mysli co by jste chtěli sdílet s komunitou v hezkém způsobu, toto je ideální místo kde o tom diskutovat. Pokud si nejste moc jisti o tom, rádi pomůžeme s diskuzí nápadů o obsahu a strukturování otázek. Pokud to zní jako něco zajímavého, připojte se na Discord aby jste začali!