微積分と物理​/論理2

Unity学習帳2冊目微積分と物理 / 論理2

日本語とC#と論理記号 anchor.png

<真理値表>

    \(A\wedge B\)    \(A \underline{\vee}B\)\(A\vee B\) \(A\leftrightarrow B\)  \(\neg A\)\(A\rightarrow B\)  
    かつ     または    でないならば  
    AND    XORORNOR NOTIMPNOTIMPNAND 
AB falseA&&BA&&!BA!A&&BBA!=BA||B!(A||B)A==B!BA||!B!A!A||B!(A&&B)true
11 0101010101010101
10 0011001100110011
01 0000111100001111
00 0000000011111111

1:真:True(トゥルー)
0:偽:False(フォールス)

AND(掛算)はOR(足算)より先に計算する事

Page Top

回路図 anchor.png

各論理式は電池と電球それを伝える配線で表現できる
IMPも他の回路と同様に回路図式化できる

kairo1.png

Page Top

ベン図 anchor.png

f5ee6b5ef9c8329673ee530c59206f91.png
集合の関係を表すための図。利用する際は領域を染めた領域を真とする

Page Top

含意(がんい:IMPLIES) anchor.png

\(A\Rightarrow B\) 日本語にするなら「AならばB」
論理学で利用される機会が多い「ならば」は「含意」に該当する
この「ならば」は含意を無理に日本語へ近似した結果であって正確に、その意味となる日本語は存在しない
真理値表の値の動きこそが、その働きを正確に表している。だからC#の\(!A||B\)と憶えるのが一番いい

  • この結合子は必ず二項をつないだ状態で議論される
  • AはBである為の十分条件
  • BはAである為の必要条件
    imp.png

論理式では !A||B で表せる
\(インコ\Rightarrow 鳥\)
\(鳥\Rightarrow 動物\)


メモ:
AはBに含まれてる?だから"含"意??計算式で含まれてるって何?
\(n>\delta \Rightarrow \left| { a }_{ n }-\alpha \right| <\varepsilon \)
imp2.png


Page Top

条件付き論理積の確認 anchor.png

C#のAND、「A ∧ B」を表現する&&などの論理演算が「条件付き論理積」である事を確認する
以下のコードで check を true にすると A という条件を満たしたので”Bが実行され評価される”
しかし false の場合、条件は満たされていないので、Bの実行すらオミットされ、Bが評価されることは無い

|| や == 等も同様、C#では条件付き論理演算子になっている。これはプログラムを組むうえで強く意識しておいた方が良い事項である

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 
 
 
 
-
|
|
|
|
-
-
|
!
!
|
|
-
|
|
!
!
using UnityEngine;
using System.Collections;
 
public class Logic2 : MonoBehaviour
{
        
        public bool check;
 
        void Start ()
        {
                if (check && Execute ()) {
                        print ("!");
                }
        }
 
        bool Execute ()
        {
                print ("Exec");
                return true;
        }
}

実行結果
falseの場合、何も表示されない
trueの場合

Exec
!

と表示される

Page Top

カルノー図 anchor.png

複数の論理式を出来うる限り少ない論理式の組み合わせに単純化する技術
命題数によって描くカルノー図は違う。それぞれ書式フォーマットがあるので、それに沿って描くと間違いがない
具体的な命題数による図は以下の例題(命題数2と3の例を作りました)を参照

4命題まではノートに書けるがそれ以上になると別の方法があるらしい

Page Top

3ランプゲーム anchor.png

赤、緑、青の3色ランプがある
以下のパターンの時、お化けが出てくる

  1. 赤が消えて青が光っている
  2. 緑と青が光っている
  3. 全てのランプが消えている
  4. 緑と青が消えて、赤が光る

これを論理式で考える。まず命題を作る

r:赤ランプが光る
g:緑ランプが光る
b:青ランプが光る

各事象を論理式化する

  1. !r&&b
  2. g&&b
  3. !r&&!g&&!b
  4. !g&&!b&&r

これをカルノー図にして論理式を整理する

karno1.png

コード化すると以下になる

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
 
 
-
!
-
|
|
|
-
-
|
-
-
|
-
|
!
|
!
!
|
|
-
|
|
|
!
!
using UnityEngine;
using System.Collections;
 
//論理テスト
public class Logic1 : MonoBehaviour
{
        bool r, g, b, monster;
 
        void Update ()
        { 
                if (Input.GetKeyDown (KeyCode.Space)) {
                        ChangeFlag ();
                        //if (!b && !g || g && b || !r && !g && b) {	//カルノー図によって得た単純化された論理式
                        if (!r && b || g && b || !r && !g && !b || !g && !b && r) {
                                monster = true;
                        } else {
                                monster = false;
                        }
                        print ("RED=" + r + "  :GREEN=" + g + "   :BLUE=" + b + "  →  MONSTER=" + monster);
                }
        }
 
        void ChangeFlag ()
        {
                r = Random.value > 0.5f ? true : false;
                g = Random.value > 0.5f ? true : false;
                b = Random.value > 0.5f ? true : false;
        }
}
Page Top

2ランプゲーム anchor.png

<2ランプゲームのルール>
次のいずれかのパターンになったらお化けが出てきます

  1. 青いランプは消えているが黄色いランプは光っている
  2. 青いランプは消えていて黄色いランプも消えている
  3. 青いランプは光っていて黄色いランプも光っている

Unity Web Player | ロジックモンスター)
(全ソース:GitHub_Osinko/Logic)

まず命題を考える。命題数は2になる

命題blue:「青いランプが光っている」
命題yellow:「黄色いランプが光っている」

この命題を使って各論理式を考える

  1. !blue&&yellow
  2. !blue&&!yellow
  3. blue&&yellow

これら3つを論理和でひとつにする

!blue && yellow | | !blue && !yellow | | blue && yellow

これをカルノー図で考えると・・・
karno2.png

これを利用すると
「 if (!blue && yellow | | !blue && !yellow | | blue && yellow) {~」と3つの論理和式になっている部分が
「if(!blue | | yellow)」とシンプルになる


ソース一部抜粋

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
 
 
 
-
|
|
|
|
|
|
|
|
-
|
-
|
|
|
-
-
|
|
-
|
!
!
!
 
-
!
 
 
-
|
|
|
|
|
|
!
 
 
-
|
|
|
|
|
!
!
using UnityEngine;
using System.Collections;
 
public class Lamp : MonoBehaviour
{
        public Animator anim, monster;
        public Light blueLight, yellowLight;
        public float timeSpan;
    
        float timeCount;
        bool blue, yellow, button;
    
        void Update ()
        {
                timeCount += Time.deltaTime;
                if (timeCount > timeSpan) {
                        timeCount %= timeSpan;
                        ChangeLamp ();
 
                        //今回はココがテーマ
                        if (!blue && yellow || !blue && !yellow || blue && yellow) {
                                anim.SetTrigger ("elevatorTrig");
                                StartCoroutine (MonsterCrouch ());
                                //メカニムに設定したトリガーをstringで指定して起動する
                                //メカニム側はanyStateではなく新しく自分でつくったNewStateでトラジションを双方につなげ作る}
                        }
                }
        }
 
        //コルーチンで再生タイムを微調整
        float startDelay = 0.2f;
        float crouchStepDelay = 0.8f;
        public IEnumerator MonsterCrouch ()
        {
                WaitForSeconds stdelay = new WaitForSeconds (startDelay);
                WaitForSeconds delay = new WaitForSeconds (crouchStepDelay);
                yield return stdelay;
                monster.SetBool ("crouch", true);
                yield return delay;
                monster.SetBool ("crouch", false);
        }
 
        void ChangeLamp ()
        {
                blue = Random.value > 0.5f ? true : false;
                yellow = Random.value > 0.5f ? true : false;
 
                blueLight.enabled = blue;
                yellowLight.enabled = yellow;
        }
}


添付ファイル:

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Last-modified: 2015-08-26 (水) 20:59:11 (JST) (3171d) by osinko