Alt-F4 #23 - Pásová Extravaganza  12-02-2021

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

Obsah

Po dvoutýdenní pauze kvůli pár FFF horkých z pánve jsme zpět s dvoumi články o pásech. V prvním, Recon419A objevuje zajimavý koncept, který umožnuje dopravovat itemy v stylu právě v čas. Poté, věci se stanou velmi nerdy když pocarski se ponoří do hlubin stavění turingového stroje pomocí pouhých pásů. Titul z počítačové vědy doporučen!

Logistické pásy Recon419A

Factorio má tři hlavní metody transportování věcí: pásy, roboti, a vlaky. Pásy jsou dobré jedno nebo dvoj-itemovou propustnost, vlaky na masivní kvantity jednoho druhu, a roboti na komplikované recepty výroby. Někdy, je ale potřeba použít kombinaci těchto přístupů, kde se techniky jako sushi pásy prokážou. V tomto článku chci mluvit o jiném způsobu, který nazývám “logistické pásy”. Jako sushi pásy, logistické pásy mohou být použity s a bez módů a nejsou módy samotnými; radši jsou způsob, jak kontrolovat jaké suroviny jdou kam s použitím pásů a velmi lehkých obvodů. Jako vanillový logistický systém a některé vlakové módy jako LTN, cílí být cestou jak dopravit suroviny, která je chytřejší než pouhé pásy.

Popis Logistického Pásu

Logistické pásy jsou poněkud komplikovaný koncept, ale je mnohem lehčí pochopit, jakmile to vidíte v akci. V tomto příkladě dávejte pozor na to kolikrát několik itemů jsou posílány po stejném páse, každý se nakládá na pás pouze když je požadován. Pokud železo a měď jsou jediné věci, které jsou potřeba, žádná ocel se nepošle; rovněž, když nic není potřeba, pás zůstane prázdný.

Demonstrace logistického pásu s použitím obvodových kondicí, filtrových rozdělovaču a nakládačů. Podavače také mohou být použity místo nakládačů, ale mohou být muset zněkolikanásobněny kvůli rychlosti pásu.

Můžete vidět v příklade, že obvodová kondice je nastavena, aby se materiály poslaly, pokud destinace má méně než sto. V realitě, délka pásu ovlivní kolik itemů se pošle, pokud je pás dlouhý, sto bude nabufferováno s dalšímy stovkami pořád na páse. Existuje teoretický limit na jak dlouhý pás můžete mít, než přeplníte příjemový kontejner, ale v praxi budete používat místo toho vlaky. Pokud by jste si chtěli pohrát s tímto setupem, tiskový řetězec je zde, ale mělo by být poznamenáno, že plán používá nakládače z Loader Redux módu.

Příklad obvové kondice pro logistický pás.
Příklad obvové kondice pro logistický pás. Všimněte si, že nastavení limitu na 100 pošle zhruba 270 plátů přes tuto délku, protože pláty zůstávají na páse poté, co se systém zastaví

Použití Logistických pásů

Logistické pásy jsou užitečné, když potřebujete hodně druhů itemů najednou a poté žádné po nějakou dobu. Kdokoli kdo automatizoval pásy s roboty bude velmi známý s fenoménem známým jako “nabíjecí oblak”, který přichází, když váš logistický systém chce né méně něž deset tisíc koleček a tisíc pět set elektronických obvodů. Nápodobně, když se zeptáte o něco jako materiály na výrobu nukleárního reaktoru nebo raketového sila, roboti mají tendenci se seskupit kolem výrobny, která nikdy nebyla designována na takovou produkci. Když potřebujete hodně jednoho itemu, je mnohem lehčí ho přivést na páse: posílání deseti tisíc koleček trvá méně než čtyři minuty a neškodí to vašemu UPS; s roboty by to trvalo 2500 cest a nejspíše mnoho robotů půjde do vzduchu a pravděpodobně zaplaví nabíjecí kapacitu, která nikdy nebyla na to designována a bude to trvat věčnost, než se to znovu stabilizuje. Používání dedikovaných pásů ale vytváří své vlastní problémy; často budou pásy nečinně sedět a zabírat místo, vy také nemusíte mít místo na používání osmi-busu v první fázi. Pro něco jako pásové nákupní centrum, posílání velké kvantity koleček smíchaných s velkou dávkou elektronických obvodů je triviální činnost pro logistický pás; když přijedou na správné místo, používání robotů je mnohem méně nákladová činnost pro váš logistický systém.

Limitace: Několik destinací

Problém s posíláním více než jednoho itemu na několik destinací je netriviální, je to něco, co jsem osobně nebyl schopen vyřešit. Protože filtrační rozdělovače vezmou všechen vstup, posílání toho itemu přes filtrační rozdělovač pouze někdy vyžaduje komplikované uspořádání rozdělovačů a několik obvodových podmínek pocházejících z různých destinací. Dal jsem tomuto problému docela dost myšlenek, a i když jsem přišel na několik prototypů, většina z nich byla náchylná k chování jako zasekávání nebo posílání moc itemů na špatnou desttinaci, potenciálně způsobující přetok pokud necháno bez dozoru. S Factorio komunitou existující jak je, nebyl bych překvapen, kdyby tento problém mohl být překonán za týden nebo dva, v několika různých případech; možná uslyšíme o vašem řešení v budoucím vydání Alt-F4. Prozatím, nechal bych to ale jako výzvu pro komunitu. Řekněte mi o tom, co jste vymysleli!

Poznámka o sushi pásech

Hřáči, kteří jsou kolem hry delší dobu mohli již slyšet o podobném konceptu: sushi pásech. Jako logistické pásy, sushi pásy dovolí pokládat více než jeden druh itemu na pás, ale toto obecně dělají v smyčce vyrobené pro komplikovanou výrobu. Obvodová podmínka na začátku nebo kolem celého pásu pomáhá kontrolovat množství každé suroviny, což může vést k extrémně komplikovaným designům jako “bloodbus” - ohěhový systém pro vaši továrnu. Mezitím co koncept logistického pásu je podobný, má to několik důležiých důvodů, klíčová je jejich funkce: mezitím co sushi pásy jdou kolem a mají tendenci obsluhovat několik výroben v žádném zvláštním pořadí, logistické pásy jdou k a mají tendenci direktovat suroviny z jednoho místa na druhé. Ve skutečnosti, logistický pás může být použit na krmení sushi pásu místo normálního busu - když jsou suroviny potřeba, mohou být poslány, s opatrně monitorovanýmy systémy na rízení rychlosti, preventující přepopulaci pásového kola. Jiné koncepty jako časované pásy nebo limitování podavačů zde taky může být aplikováno, může dokonce být spojeno s logistickýmy pásy k dosáhnutí monumentálních výkonů inženýrství. V mé hlavě, logistické pásy samotné jsou pouze součástí hráčovy nabídky nástrojů.

Šílený příklad sushi pásů v akci na obří báze městských bloků. Zdroj: u/dentoidův redditový post

Vypočítánín pouze s pásy, část první: Ne-tak-rychlá matematika pocarski

V Factoriu, můžeme již použít ovládací síť na stavění systémů, začínající s lehkou binární logikou, až na kompletně funční počítač, a poté, někdo dost šílený příjde s tím, že na tom hraje DOOM. Co je ale méně zřejmé, je ale fakt že ovládací síť není pouze jediný Turingově uplný (podívejte se na odkázanou stránku pokud si nejste známí) systém ve hře. Vskutku, jste schopni postavit počítač z čehokoli základního, něco co dostanete skoro na začátku hry: pásy (transportéery).

V této dvoudílné sérii vás budu provázet procesem designování dvou systémů používaných v realitě s ničím jiným kromě pásů a rodzělovačů. Budu používat nakládače a nekonečné truhly, ale kdykoliv přichází stejné množství entit co odchází, takže všechny pásy by mohly být propojeny zkrz buffer. Nerozhodl jsem se to dělat kvůli kompaktnosti a vybýbání se špagetovému designu. Musím dát zásluhu uživateli letao12, který udělal sérii videí o vyrábění CPU s použitím pouze pásů, což je věc, která mě inspirovala k vrácení se k jeho nápadu s mým vlastním pohledem na věc.

Aby jakýkoli systém byl Turingově úplný, musí být možnost vytvořit takzvaná logická hradla. Logická hradla jsou lehké elementy, které provádí základní operace binární algebry způsobem vracení výstupu, který je založen pouze na aktuálních vstupech. Jsou pouze dvě čísla v binární algebře: 1 a 0. V elektronikách, korespondují k vysokému a nízkému napětí, ale v našem případě, řekněme, že pásy s itemy jsou 1 a prázdné pásy jsou 0. Existují 3 základní logická hradla:

  • OR hradlo - vrací 1 když aspoň jeden vstup je 1
  • AND hradlo - vrací 1 pokud všechny vstupy jsou 1
  • NOT hradlo - vrací 1 pouze když vstup je 0

Pravdivostní tabulka níže ukazuje jejich respektivní výstupy založeny na výběru možných vstupů.

A B NOT A A OR B A AND B
0 0 1 0 0
0 1 1 1 0
1 0 0 1 0
1 1 0 1 1

Je známým faktem, že když tyto hradla změníte specifickýmy způsoby (a někdy vytváření smyčky drátů), je možné vytvořit Turingův stroj. Všechny tři základní logická hradla mohou být vytvořena s pásy a rozdělovači. Zde je odkaz na knihu plánů se vším z tohoto článku, pro kohokoli, kdo by chtěl sám experimentovat s obvody. Budu odkazovat k různým itemům jako “item druhu 1/2/3/…”, pro pohodlí a obecnost, a prioritní/neprioritní výstupy jako “primární/sekundární”, spíše z pohodlí. Budu také používat jiné barvy v obrázcích, aby bylo rozpoznávat mezi druhy itemů.

Základní hradlo

AND a OR hradlo jsou lehké jako jeden rozdělovač s nastavenou prioritou:

Primární výstup se chová jako OR hradlo, mezitím co sekundární výstup se chová jako AND hradlo.

NOT hradlo je tročku těžší na výrobu, ale může být vyrobeno s vícero druhů itemů a chytrou mechanikou filtrování a prioritizování:

Mezitím co vstup A je 0, první rozdělovač dostává pouze jeden vstup, a tak item druhu 2 půjde do primárního vstupu, což znamená pouze NOT A výstup je 1. Když vstup A je zapnutý, první rozdělovač nyní získává dva vstupy; item druhu 1 jde na primární vstup, tak je dán na primární výstup, nahrazující item druhu 2, který teď vystupuje z sekundárního výstupu. Sekundární výstup je efektivně kopie A, ale s různým druhem itemů.

Primární výstup prvního rozdělovače je vždy 1, ale mění druh itemu záležící na vstupu. Použitím prvního rozdělovače, jsme schopni rozdělit hodnotu druhu itemu na 2 dráty: jeden bude pouze signál A přicházející rovnou zkrz s stejným druhem itemu jako originální vstup, typ 1, a druhý bude NOT A, s itemovým druhem 2.

Druhý obvod je výjmečně užitečný, protože kombinuje NOT hradlo, signálový duplikátor, a měnič itemů. Potřebujeme signálové duplikátory, protože větvení pásu s rozdělovačem nechá tok itemů nezasycený, což nechává interakci s ostatními rozdělovači špatnou, protože to není 0 ani 1. Také potřebujeme měniče itemů, protože je často nesoulad mezi výstupem ovládací sítě a vstupu jiné věci.

Poloviční sčítač

Teď když máme základní tři komponenty, postavme poloviční sčítač. K čemu by byl poloviční sčítač? No, jak jméno může napovídat, poloviční sčítač je polovina plného sčítače, což je obvod, který má schopnost sčítat binární čísla. Toto nám umožní provádět sčítání, a kreativní použití sčítání nám umožní implementovat doslova jakoukoli jinou matematickou operaci která existuje.

Poloviční sčítač je obvod, který sčítá dvě jednočíselné binární čísla. Toto může znít jako komplikovaná činnost, ale v realitě, je to velmi lehké. Oba vstupy A a B jsou jsou jednočíselná binární čísla, což znamená že maximální možný výstup je 2 (1+1), což, bohužel, se nevejde do jediného výstupu. Místo toho, použijeme dvoučíselnou binární hodnotu, kde první číslo má hodnotu 2 (21) a druhé číslo má hodnotu 1 (20). Když toto vezmeme v potaz, zde je pravdivostní tabulka polovičního sčítače:

A B První číslo A + B Druhé číslo A + B
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

Můžeme si všimnout, že první číslo je pouze A A B. Nicméně, pro druhé číslo, potřebujeme věc nazývanou XOR hradlo (XOR znamená “exklusivní OR”). XOR hradlo má výstup 1 pokud pouze 1 vstup je 1, což je přesně co potřebujeme na druhé číslo.

Logika XOR hradla je, “A nebo B, ale ne oboje”, a proto je XOR hradlo pouze (A NEBO B) A NE (A A B). Zde je jak se toto vytvoří s základními hradly, která jsem vysvětlil předtím:

Všimněte si, že dostaneme výstup AND hradla zdarma díky kombinovanému duplikátor-NOT hradlu, což nám dává kompletní poloviční sčítač. Je náhoda, že můžeme kombinovat první měnič itemů s druhým AND hraldem, což nám umožnuje odstranit rozdělovač:

Finální produkt

Tak, aby jsme změnili náš poloviční sčítač na plný sčítač, potřebujeme připojit dva za sebou (proto jméno “poloviční sčítač”):

Diagram plného sčítače

Jak můžete vidět, plný sčítač jsou pouze dva poloviční sčítače dány dohromady v specifickém způsobu. Teď, mohli bychom pouze kopírovat a vložit tento obvod, ale díky vlastnostem pásů, existuje mnohem lepší a menší způsob. Dvě poloviny pásů jsou procesovány odděleně od sebe, což znamená že místo toho abychom dávali dva poloviční sčítače, jsme schopni nechat všechno běžět skrz poloviční sčítač dvakrát. Toto je většinou nemožné s tradičnímy logickýmy hradly, ale v tomto novém světě Factorio počítačů, cokoliv existuje. Zde je jak:

Zde, první poloviční sčítač používá pravou stranu pásu a druhý poloviční sčítač používá levou část pásu. První, vstupy projdou zkrz první poloviční sčítač normálně na pravé straně pásu. Poté, XOR hradlo polovičního sčítače je vráceno až na začátek a je dáno na levou část pásu. Projde kdrz stejné mechanizmy znovu, ale protože je to na levé straně, nemá vůbec interakci s pravou stranou pásu. Druhý poloviční sčítač pořád má volný výstup, takže ho musíme připojit na třetí vstupový pás, tentokrát na levé straně, aby se to chovalo jako přenosová část. AND výstup obou polovičních sčítačů je bočně naložen na jeden pás, automaticky vytvářející OR. Interní spoždění mohou poloviční sčítače posunout výstup ve stejný čas, tímpádem se bude snažit naložit dva celé pásy na půl pásu. Proto potřebujeme přidat přetokový rozdělovač aby se přenos nezastavil a nezničil celý obvod. Po přeskupení některých komponentů, získáme toto:

Toto je přesně stejný obvod jako v minulém obrázku, a nechám to jako cvičení pro čtenáře aby to ověřil. Jediná věc, která zbývá je naskládat několik těchto obvodů dohromady a dát jim čísla, takže zde je pásový sčítač, který sčítá 01001101 (77) + 10001011 (139) = 011011000 (216):

Sčítání čísel je hezké, ale není to nic bez jakékoli paměti, což bude přesně to, co budu dělat při příštím vydání. Zůstaňte naladěni!

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!