石橋を叩いて壊すブログ

ゼロから始めるFactorioの回路構築(条件回路・論理演算編)

前回に引き続きさらにFactorioの回路の話。
Factorioで「回路網」の研究を完了させると、ケーブルやチェストのほかに「定数回路」「算術回路」「条件回路」が使用可能になる。
定数回路と算術回路の使い方については前回の記事に書いた。今回は条件回路の使い方と、条件回路を用いた論理演算(AND / OR / XOR / NOT演算)について書く。

条件回路

条件回路は信号の内容を条件に基づいて判断し、判断後の信号を出力することができる。

以前の記事にも書いたとおり、例えば条件を判断してランプを光らせるには、ランプに条件を直接指定すればよかった。
しかし、条件が複雑な場合はランプでは対応できない。
例えば、「鉄板が100枚より多く、なおかつ、銅板が100枚より多い場合にランプを光らせる」という条件はランプには設定できない。

条件回路は、条件を判断した判断後の信号を出力し、さらにそれを別の判断に使用することで、多段階・複数の判断が下せるようになることに意味がある。
実際に「鉄板が100枚より多く、なおかつ、銅板が100枚より多い場合にランプを光らせる」をやってみよう。


実際に「鉄板が100枚より多く、なおかつ、銅板が100枚より多い場合にランプを光らせる」をやってみた回路。
2台の条件回路を使用し、片方では「鉄板が100枚より多い場合に鉄板が1の信号を出力」、
もう片方では「銅板が100枚より多い場合に鉄板が1の信号を出力」を行っている。
以前の記事に書いたとおり、1つの回路に複数の出力があると信号が足し算されるので、「鉄板が1の信号」が2つ足し算され「鉄板が2」の信号となる。
ランプには「鉄板=2」の条件を指定してあるので、従って両方の条件が成立した際にランプが光る。

この例では、2台の条件回路が判断した結果をランプが受け取り、ランプがその値を判断することで目的が果たされた。
つまり条件判断が2段階で行われたということである。このような複雑な判断こそ条件回路の存在意義である。

なお、条件回路の入力部には赤と緑のピンがあるが、前回の記事の算術回路の節で触れたように、
赤と緑のピンが演算子の左右の数字に対応しているわけではない。赤い端子だけを使っても2種の数値の比較判断は可能である。

ところで、今回は鉄板と銅板がともに値を満たすことを確認したが、それ以外にも条件回路の組み合わせ方にはいくつかのパターンがある。
以下で4パターンの組み合わせを見てみよう。

AND演算(論理積)

AND演算とは、上記例で見たような「複数の条件がすべてYESのときだけ、YES」の組み合わせのことである。
例えば、「鉄板が100枚より多く、なおかつ、銅板が100枚より多い場合にYES」というのがAND演算である。

AND演算の方法については既に上記で説明したが、記事の構成上、再度同じ説明を載せておく。


2台の条件回路を使用し、片方では「鉄板が100枚より多い場合に鉄板が1の信号を出力」、
もう片方では「銅板が100枚より多い場合に鉄板が1の信号を出力」を行っている。
以前の記事に書いたとおり、1つの回路に複数の出力があると信号が足し算されるので、「鉄板が1の信号」が2つ足し算され「鉄板が2」の信号となる。
ランプには「鉄板=2」の条件を指定してあるので、従って両方の条件が成立した際にランプが光る。

同様に条件回路を3台/4台と増やし、ランプの条件も鉄板=3/鉄板=4のように増やしていけば、より多条件のAND演算、あるいは「3個中2個以上がYES」といった判断も可能となる。

OR演算(論理和)

OR演算とは、「複数の条件のうちどれか1つでもYESのときだけ、YES」という組み合わせのことである。
例えば、「鉄板が100枚より多いか、または、銅板が100枚より多い場合にYES」というのがOR演算である。
鉄板と銅板がともに100枚より多い場合もYESとなるが、鉄板と銅板がともに100枚以下の場合にはNOとなる。

などと仰々しく書いたが、やることはAND演算とほぼ変わらない。
上記したAND条件の説明のうち、ランプの条件を「鉄板>0」に変更するだけである。


2台の条件回路を使用し、片方では「鉄板が100枚より多い場合に鉄板が1の信号を出力」、
もう片方では「銅板が100枚より多い場合に鉄板が1の信号を出力」を行っている。
1つの回路に複数の出力があると信号が足し算されるので、どちらかの条件が満たされれば「鉄板が1の信号」、両方の条件が満たされれば「鉄板が2の信号」となる。
ランプには「鉄板>0」の条件を指定してあるので、従ってどちらか片方、または両方の条件が成立した際にランプが光る。

XOR演算(排他的論理和)

XOR演算とは、「2つの条件のうち、片方だけがYESのときだけ、YES」という組み合わせのことである。
例えば、「鉄板が100枚より多く銅板が100枚より多くないか、または、鉄板が100枚より多くないが銅板が100枚より多い場合にYES」というのがXOR演算である。
鉄板と銅板がともに100枚より多い場合も、ともに100枚より多くない場合も、ともにNOとなる。

ここまで真面目にこの記事を読んでくれた人なら、最早これ以上の説明は不要であろう。
やることはやはりAND演算とほぼ変わらない。ランプの条件を「鉄板=1」にするだけである。
なぜなら、鉄板と銅板がともに100枚より多ければ鉄板=2の信号が出力されるし、ともに100枚以下ならば鉄板=0の信号が出力される。
鉄板と銅板のどちらかだけが100枚より多いときには鉄板=1の信号が出力されるから、それが答えである。


前提条件はAND演算と同じ。どちらかの条件が満たされれば「鉄板が1の信号」、両方の条件が満たされれば「鉄板が2の信号」、
どちらの条件も満たされなければ「鉄板が0の信号」となる。
ランプには「鉄板=1」の条件を指定してあるので、従ってどちらか一方の条件が成立したときだけランプが光る。

その他

ここまでくれば、もう詳細など書くまでもない。

NAND演算(否定論理積:ひとつ以上NOのときYES)
AND演算の回路で、ランプの条件を「鉄板<2」にする。
NOR演算(否定論理和:すべてNOのときYES)
AND演算の回路で、ランプの条件を「鉄板=0」にする。
NOT演算(否定:YESのときNO、NOのときYES)

NOT演算は単一の条件を判断するので、条件回路は1つでいい(というかランプに直接指定してもいい)。
「鉄板が100枚より多い」の否定は「鉄板が100枚以下」だが、「以下」という演算子はFactorioに存在しないので、
値を1足して「鉄板が101枚未満」を指定することで否定となる。
なお、演算子「>」を「<」に変えただけでは正しくない。「鉄板が100枚より多い」の演算子を反転させると「鉄板が100枚より少ない」となるが、
これでは鉄板がちょうど100枚のときYESにならない。

これで一通りの回路の機能を見て回ったと思うので、次回は実践例を紹介する。

この記事を評価

13 16

コメント

【この記事にコメント】
お名前:
コメント:

277,008

記事カテゴリー

最近の記事

  1. FF14を翻訳したら国によって結構特色が違った[12/11]
  2. ゼロから始めるFactorioの回路構築(実践例編)[7/24]
  3. ゼロから始めるFactorioの回路構築(条件回路・論理演算編)[7/24]
  4. ゼロから始めるFactorioの回路構築(定数回路・算術回路編)[7/24]
  5. ゼロから始めるFactorioの回路構築(入力・出力・混合編)[7/24]

RSS1.0 RSS2.0

最近のコメント

  1. 天晴れ!押したらポーションのモヤモヤでまし…[5/26]
  2. 習うより慣れろって感じで。この記事は記事冒…[4/7]
  3. もっと詳しく説明してください[3/21]
  4. みなさんと同じです、
    すみません
    [11/21]
  5. 上と同じ理由です。
    すみません
    [9/26]

記事を検索


管理人

石橋

コーヒー3杯で手が震える