Setting Environment

OS : mac OS X Mojave
Python : 3.6.5
Django : 2.2.1

위 버전들을 바탕으로 Django 개발 환경 세팅을 진행하겠습니다.

 

1. python version 세팅

 # pyenv를 homebrew를 이용해 설치
 $ brew install pyenv
 
 # 환경 변수 세팅
 # 아래 내용들을 파일 끝에 추가
 # zsh을 사용할 경우 ~/.zshrc
 $ vi ~/.bashrc
 export PATH="$HOME/.pyenv/bin:$PATH"
 eval "$(pyenv init -)"
 eval "$(pyenv virtualenv-init -)"
 
 # 특정 버전을 pyenv를 통해 설치(여기서는 3.6.5)
 #
 # zipimport.ZipImportError: can't decompress data; zlib not available
 # 위와 같은 에러가 뜬다면 아래처럼 환경변수를 추가해 설치
 # LDFLAGS="-L/usr/local/opt/zlib/lib" CPPFLAGS="-I/usr/local/opt/zlib/include" pyenv install 3.6.5
 $ pyenv install <~python-version~>
 
 # 실제 3.6.5 버전이 설치 되었는지 확인
 $ pyenv versions
 
 # virtualenv 설정을 위한 homebrew를 이용해 pyenv-virtualenv 설치
 $ brew install pyenv-virtualenv
 
 # virtualenv 생성
 $ pyenv virtualenv <~python-version~> <~virtualenv-name~>

 

2. Django 설치

 # virtualev activate
 $ pyenv activate <~virtualenv-name~>
 
 # pip를 이용한 Django 설치
 $ pip install django==<~django-version~>
 
 # django 설치 검증
 # django 버전이 출력된다면 제대로 설치 완료
 $ python -m django --version
 <~django-version~>

 

3. Django start project 생성

 # django admin을 사용한 start project 생성
 # <~project-name~>으로 folder가 생성됨.
 $ django-admin startproject <~project-name~>
 
 # project로 change directory
 $ cd <~project-name~>
 
 # run development server
 $ python manage.py runserver
 python manage.py runserver
 Watching for file changes with StatReloader
 Performing system checks...

 System check identified no issues (0 silenced).

 You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
 Run 'python manage.py migrate' to apply them.

 May 29, 2019 - 17:20:27
 Django version 2.2.1, using settings 'exmatch.settings'
 Starting development server at http://127.0.0.1:8000/
 Quit the server with CONTROL-C.

 

4. Project 생성 확인

제대로 서버가 생성되었다면 http://127.0.0.1:8000/ 에 접속하시면 
아래처럼 page가 뜨시는 것을 확인하실 수 있습니다

 

5. Django start app 생성

 # manage.py를 사용한 start app 생성
 $ python manage.py startapp <~app-name~>

 

6. Django MySQL Setting

 # <~project-name~>/setting.py

...

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'api',
]

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '<~hostname~>',
        'PORT': '<~PORT~>',
        'USER': '<~username~>',
        'PASSWORD': '<~password~>',
        'NAME': '<~database-name~>',
    }
}

...

 

7. MySQL migration

 # install mysqlClient
 $ pip install mysqlclient

 # <~app-name~>의 db model 생성
 $ python manage.py makemigrations
 
 # django app db model 생성
 $ python manage.py migrate

https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/43438.pdf

https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/44843.pdf

https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/45406.pdf

http://www.oreilly.com/webops-perf/free/kubernetes.csp

'Cloud > Kubernetes' 카테고리의 다른 글

[Kubernetes] AWS에 Kubernetes 설치하기  (0) 2017.07.13

https://github.com/MatthewClarkMay/geoip-attack-map


위 github의 오픈 소스는 특정 IP(현재 내가 서비스하고 있는 IP 등등)에 대한 패킷 정보를 attack map 형태의 웹 어플리케이션으로 나타내 주는 오픈소스이다. 물론 해당 IP의 패킷 정보를 받아와서 보여주는 기능은 구현되어 있지 않다. github의 README.md 파일에서는 해당 오픈 소스를 설치하는 방법을 자세히 설명해 두었다. 해당 과정대로 설치를 끝내고, config까지 해준다면 지도 위에서 attack이 날라가는 것을 볼 수 있다. 실제 attack이 아니라, dummy 정보를 syslog에 넣고, 그 syslog를 읽어서 visualization해주는 오픈 소스이기에 수정이 필요하다.


* 설치 환경
서버 : Ubuntu Server 16.04 LTS (AWS EC2 t2.micro)


1. git clone으로 저장소 복사

$ git clone https://github.com/MatthewClarkMay/geoip-attack-map


2. 파이썬, redis 설치

$ sudo apt-get install python3-pip redis-server


3. python requirements 설치

$ cd geoip-attack-map/ 
$ sudo pip3 install -U -r requirements.txt


4. redis 실행

$ redis-server

이처럼 redis server가 잘 구동중이라면 Ctrl + C로 빠져나감


5. IP 주소의 정보를 알기 위한 maxminddb를 받아옴

$ cd DataServerDB
$ ./db-dl.sh
$ cd ..


6. DataServer.py 시작

$ cd DataServer
$ sudo ./DataServer.py

이후 putty를 Duplicate Session으로 새로운 Session 생성


7.  dummy data(attack) 생성

$ cd geoip-attack-map/DataServer
$ ./syslog-gen.sh

이후 putty를 Duplicate Session으로 새로운 Session 생성


8. attack map을 위한 국가별 flag image unzip

$ sudo apt-get install unzip     #unzip이 설치 안되었을 떄
$ cd geoip-attack-map/AttackMapServer/static/
$ unzip flags.zip


9. 서버 외부에서 접속하기 위한 javascript 수정

$ vim map.js


실제 서버 주소로 수정해줌

// To access by a browser in another computer, use the external IP of machine running AttackMapServer
// from the same computer(only), you can use the internal IP.
// Example:
// - AttackMapServer machine:
//   - Internal IP: 127.0.0.1
//   - External IP: 192.168.11.106
var webSock = new WebSocket("ws:/<실제 서버 주소>:8888/websocket"); // Internal
//var webSock = new WebSocket("ws:/192.168.1.100:8888/websocket"); // External


10. 웹 어플리케이션 동작

$ cd ..
$ ./AttackMapServer.py

이렇게 되면 웹 어플리케이션이 동작 중이다.

※ 해당 웹 어플리케이션은 8888포트로 동작하므로 AWS Inbound 설정에서 8888포트를 열어줘야 한다.


11. 웹 어플리케이션 동작 확인

다음처럼 실제 어택하는 모습이 보이게 된다.

현재는 ip 8.8.8.8이 고정되어 있어서 미국 왼쪽 부분으로 모든 패킷이 날라가는 것을 볼 수 있다.

DataServer.py 와 map.js, AttackMapServer.py를 고쳐주면 목적지를 바꿔줄 수 있다.



12. 각 주요 부분 설명

 - DataServer/sys-gen.py     : 출발 IP, Port, 도착 IP, Port, 공격 유형 등을 랜덤으로 생성시켜 /var/log/syslog에 저장해 준다
 - DataServer/DataServer.py    : /var/log/syslog에서 log 정보를 읽어와 패킷 정보라면 IP의 나라, 위치 등 정보를
                                                           Json 파일로 만들어 웹 어플리케이션으로 전달하는 역활
 - AttackMapServer/AttackMapServer.py : 해당 웹 어플리케이션을 구동시켜주는 프로그램, Json파일을 읽어와 Javascript로 넘겨준다
 - AttackMapServer/static/map.js : Server에서 넘겨준 정보로 Attack Map을 그려줌

https://kubernetes.io/

Kubernetes 관련 자료는 위 링크에 있습니다.(공식사이트)


Kubernetes를 설치하고 테스트 하는 것이 이번 포스팅의 목표입니다.

AWS EC2 Ubuntu 16.04 LTS를 이용해 설치 했습니다.


1. 우선 Docker의 설치가 필요합니다. 

sudo apt-get update
sudo apt-get install docker.io
sudo docker run hello-world

위 처럼 실행하면 Docker가 설치된 뒤, 

docker에서 "hello-world" docker image를 다운로드해 실행시켜 줍니다.


2. kubectl 설치

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

다음처럼 치면 Kuberctl 최신 stable 버전을 설치하게 됩니다.


제대로 설치 되었는지 확인하려면 

kubectl version

다음처럼 client 버전이 뜹니다.(제 경우에는 1.7.6버전이 설치되었습니다.)


3. Kubelet, Kubeadm 설치

sudo -i
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat </etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm

이런 식으로 kubelet과 kubeadm을 설치해 줍니다.


4. Kubeadm으로 Cluster 생성

kubeadm init

위 처럼 뜬다면 성공입니다.


※다음 명령어는 root권한이 아닌 일반 사용자가 사용할 수 있도록 설정 파일을 옮기는 명령어입니다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


4. Pod 간의 네트워크를 위한 addon 설치

kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.6/rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.6/canal.yaml

Pod 간의 네트워크를 위한 addon이 여러가지가 있는데 전 canal을 사용했습니다.


5.  Master Isolation

원래 Master에는 Pod이 스케줄링되지 않습니다.
하지만 하나의 노드에서 Test를 위해 Master에서도 Pod이 스케줄링 될 수 있도록 설정해 줍니다.

kubectl taint nodes --all node-role.kubernetes.io/master-


위 명령어를 실행시키면 아래처럼 나옵니다.

Kubectl version 명령어를 통해 제대로 연결된 것을 보실 수 있습니다.


이처럼 Kubernetes를 설치했고, 다음은 App을 Deploy하고, Autoscale 하는 법을 정리하겠습니다.

'Cloud > Kubernetes' 카테고리의 다른 글

Kubernetes 논문  (0) 2017.11.17

AWS(Amazon Web Service)는 가상의 서버를 생성해 주는 서비스로 클라우드라 볼 수 있다.
AWS의 가장 큰 장점은 1년간 공짜란 점이 아닐까...
이 중 가장 기본이 되는 EC2를 생성해보도록 하자.


1. EC2 Dashboard에서 Instances를 선택

생성된 가상 서버를 Instance라고 부른다.

 ※ 오른쪽 위에 Ohio 라고 되어있는 부분을 누르면 가상 서버가 존재하는 실제 위치를 바꿔줄 수 있다(서울도 있다)


2. EC2 Instances에서 Launch Instance를 선택해 가상의 서버를 생성한다.


3. Step1. 설치 가능한 AMI가 나온다. 왼쪽에 Free tier only를 선택하면 가상서버의 공짜 OS를 선택할 수 있다.
   나는 Ubuntu 16.04 LTS를 설치하도록 하겠다.(2017.07.05 기준)


4. Step2 가상서버의 type을 선택한다. type은 가상서버의 성능에 따라 나눠져 있는데 공짜 버전이 default로 선택되어 있다. Next를 눌러준다.


5. Step3. 가상 서버의 자세한 설정들을 하는 부분입니다.

  1) Number of Instances : 사용량이 증가할 때 가상 서버의 수를 늘려줄 수 있는데 이 가상 서버의 수를 나타냅니다.
  2) Purchasing option : 잠시 서버 허용량을 넘어서는 request가 있을 때, spot instance를 사용해 적은 비용으로 서버가 죽지 않고 동작하도록 합니다
  3) Network, Subnet, Auto-assign Public IP : 자신만의 subnet을 만들어서 해당 subnet에서 ip를 할당할 수 있게 해줍니다.
                                                           여러 서버를 만들 때 도움이 되겠지만 서버 하나 만들 때는 default로 만들어 줍니다
  4) IAM role : aws 내의 다른 인스턴스 간의 접근 권한을 설정해 줄 수 있다.
  5) Shutdown behavior : OS에서 shutdown시 instance를 stop할 것인지 terminate할 것인지 정한다
  6) Enable termination protection : 체크할 경우 API나 console을 통해 terminate되지 않는다.
  7) Monitoring : 해당 instance의 metrics들을 CloudWatch를 이용해 자세히 모니터링하는 설정이다. 물론 추가요금이 발생한다
  8) Tenancy : 실제 물리적 서버를 통째로 자신이 쓰도록 설정한다. 물론 추가요금이 발생한다.


6. Step4. EC2 instance의 저장 공간을 설정하는 부분이다.


  1) Size : free tier의 경우 30GB까지 가능합니다
  2) Volume Type : General Purpose SSD (GP2)를 선택했는데 Magnetic도 무료입니다.
  3) Delete on Termination : Terminate 시에 해당 Storage를 삭제한다면 체크합니다.
                                     (삭제 안 하고 다른 Storage 생성 후 30GB 넘을 시 추가 요금이 발생할 수 있습니다)

7. Step 5. Tag 추가

 - 다양한 Tag를 설정할 수 있습니다. 나중에도 필요하면 고칠 수 있으므로 나중에 설정하도록 합시다


8. Step 6. Security Group을 설정합니다.

 1) 새로 생성 시 존재하는 Security Group이 없으므로 Create a new security group을 체크해 줍니다.
  2) security group name과 Description을 설정해 줍니다.
  3) 밑에 Warning의 경우 모든 범위의 IP에서 EC2 instance에 접속할 수 있다는 경고인데 Source에서 My-IP를 선택해주면 없어지지만
      대부분의 경우 유동IP를 사용하므로 모든 IP에 대해 개방해 주는 것이 좋습니다.

9. Step 7 지금까지 선택 내용 정리

 - 정리된 내용이므로 지금까지 선택된 내용이 맞는지 확인하고 launch를 눌러줍니다.
  - 해당 Instance에 대한 key를 생성할 수 있는데 생성 이후 해당 Instance에 접속할 때 해당 key를 사용합니다.
  - Create a new key pair를 선택하시고 Key pair name을 설정해주신 뒤, Download Key Pair를 누르시면 key pair를 다운받을 수 있습니다.


10. Instance 확인

 - 다시 EC2 Dashboard에서 Instances에 들어가시면 새로운 Instance가 생성된 모습을 보실 수 있습니다.


11. putty key generator를 이용한 key file 생성 -1

 

  - putty key generator를 이용해 .pem 파일을 .ppk로 변환시켜 줍니다. (Load를 클릭)


12. putty key generator를 이용한 key file 생성 -2

  - Rsa와 2048로 설정되어 있는지 확인하시고 Save private key를 눌러 .ppk인 key를 저장해 줍니다.


13. putty를 이용한 접속

 - Host Name에 IP 주소나, DNS 주소를 넣어줍니다.
  - Connection-SSH-Auth에서 key file을 Browse 버튼을 눌러서 등록해 줍니다.
  - Saved Sessions에서 Saved Sessions 밑의 Text 입력창에 이름을 입력해 해당 Session의 저장도 가능합니다.
  - 이제 Open 버튼을 누르면 AWS EC2로 접속을 시도합니다.

14.  Ubuntu에 접속


  - login as: 가 뜨면 ubuntu라고 입력하고 엔터를 누릅니다.
  - 설정해둔 key file로 비밀번호 없이 자동으로 로그인 되고, 명령어를 칠 수 있도록 shell이 뜹니다.


이상으로 AWS EC2 생성과 접속이 끝났습니다!!





1. Data Mining
 - 목표는 방대한 양의 데이터 속에서 의미있는 지식을 찾아내는 것

2. Metadata
 - 데이터에 대한 데이터, 특정 데이터가 어떤 것의 데이터 인지 정의한 data

3. Supervised Learning
 - 사람이 지도하는 방식
 - Data Mining 방법 중 하나로 주된 방법으로 classification이 있다.
 - classification은 특정 데이터의 카테고리를 찾는 방법이다.
 - KNN 알고리즘 : 특정 데이터를 뽑았을 때 가까운 데이터를 범위 k만큼 골라내는 방식으로 카테고리를 나눌 수 있다

4. Unsupervised Learning
 - 사람이 개입하지 않는 방식
 - label data 없이 가장 그 data를 잘 설명할 수 있는 cluster를 찾는 문제이다.
 - K-means : 특정 cluster 내에서 자신을 제외한 다른 data와 차이가 가장 작은 값을 가지는 데이터를 뽑아내는 알고리즘

5. Machine Learning
 - explicit programming(사람이 개입해 개발)의 제한으로 나타남
 - data mining 처럼 supervised와 unsupervised, reinforcement 이렇게 3가지 방법이 있다.
 - Data로 새로운 rule을 생성하는 방식
 - 실제 데이터 값과 rule의 값을 비교해서 그 비교 값의 제곱을 비교해 그 값이 가장 적은 rule을 채택한다.

'AI' 카테고리의 다른 글

[AI] Agent System  (0) 2017.06.08
[AI] Semantic Web  (0) 2017.06.07
[AI] Knowledge Representation  (0) 2017.06.07
[AI] Constraint Satisfaction Problems  (0) 2017.06.07
[AI] Game Playing  (0) 2017.04.17

1. Agent System
 - Agent : 특정 사람의 일을 대신할 수 있는 전문성을 지닌 사람을 의미
 - Agent System은 이런 Agent의 기능을 수행하는 컴퓨터 시스템을 의미

2. Conversational Animated Agents
 - 대화가 가능한 가상의 대리인을 의미

3. Joseph Wiezenbaum
 - 자주 쓰이는 대화 문장을 정리해 사용자가 입력한 문장에 대한 대답을 할 수 있도록 rule을 만든 사람
 - Eliza : rule을 이용해 만든 대화형 에이전트
 - 동작 방식 : 문장을 받아들여 키워드를 체크하고, 문장의 형태를 분석한다.
                  질의의 주어와 목적어를 바꾸는 방식으로 대답
                  전의 문장의 내용을 기억하는 부분이 없기 때문에 전의 대화 내용과는 상관없는 대답이 나올 수 있다.
                  특정 문장 형식에도 대답하는 문장 형식을 여러개 만들어 랜덤으로 다양하게 출력할 수 있다.



'AI' 카테고리의 다른 글

[AI] Machine Learning & Data Mining  (0) 2017.06.08
[AI] Semantic Web  (0) 2017.06.07
[AI] Knowledge Representation  (0) 2017.06.07
[AI] Constraint Satisfaction Problems  (0) 2017.06.07
[AI] Game Playing  (0) 2017.04.17

1. Semantic Web
 - '의미론적 웹'이란 뜻으로 인터넷에 있는 정보를 컴퓨터가 이해할 수 있도록 Ontology형태로 표현하고 이를 처리하도록 하는 프레임워크이자 기술.

2. Resouce Description Framework(RDF)
 - Ontology 형태로 표현하는 규격 중의 하나이다.
 - triple 속성을 가지며 subject, predicate, object를 가진다
 - 각각 관계 주체, 관계, 관계 대상을 나타내며, 해당 테이블을 이용해 Directed Graph를 만들 수 있다.
 - 해당 정보들을 여러 군데서 받아 하나의 graph를 생성할 수도 있다.

3. RDFS(Resource Description Framework Schema)
 - RDF Schema Language로써, RDF의 스키마를 정의

4. Ontology
 - RDF 등 semantic web에서 컴퓨터가 파악할 수 있는 자료를 표현하는 것

5. DBPedia
 - WikiPedia의 Box 정보를 가져 올 수 있는 저장소

'AI' 카테고리의 다른 글

[AI] Machine Learning & Data Mining  (0) 2017.06.08
[AI] Agent System  (0) 2017.06.08
[AI] Knowledge Representation  (0) 2017.06.07
[AI] Constraint Satisfaction Problems  (0) 2017.06.07
[AI] Game Playing  (0) 2017.04.17

1. Propositional logic
 - 명제 논리
 - 서술문으로서 그 내용에 대해 참이나 거짓을 담고 있는 문장

2. Predicate logic
 - 술어 논리
 - 명제 논리를 기반으로 기호화시켜 관계를 나타낼 수 있고, 기호를 통해 수량도 나타낼 수 있게 한 것

3. Quantifier
 - 정량자, 전체 정량자(∀), 존재 정량자(∃) 두가지가 있다.
 - ∀ : 전체 정량자, '모든'
 - ∃ : 존재 정량자, '일부'

4. First-order logic
 - 일차 술어 계산
 - 술어 계산에서 정량자가 변수에만 적용되고, 술어나 함수에 대해서는 적용되지 않는 경우

5. Conversion to clause form
 1) implication 제거
  ex) p -> q = ¬p ∨ q
 2) 부정의 범위를 줄임
  ex) ¬(∃x)P(x) <=> (∀ㅌ)(¬P(x))
 3) 변수의 변환
  ex) (∀x)[P(x) -> (∃x)Q(x)] <=> (∀x)[P(x) -> (∃y)Q(y)]
 4) 정량자를 제거
  ex) (∀x)[(∃y)P(x, y)] <=> (∀x)P(x,F(x))
 5) prenex form 변환
  ex) (∀x)[P(x) -> (∀y)Q(y)] <=> (∀x)(∀y)[P(x)->Q(y)]
 6) global 정량자 제거
 7) ∧ 제거
 8) 변수 이름 재정의

6. Resolution in Propositional logic
 Given Axioms         Conversion to clause Form
   P                         P
   (P∧Q)->R              ¬P ∨ ¬Q ∨ R
   (S∨T)->Q              ¬S ∨ Q 
   T                         ¬T ∨ Q  
                              T

  To Prove R,
  ¬P ∨ ¬Q ∨ R                   ¬R
            └─────────┘
                      ¬P ∨ ¬Q                      P
                            └─────────┘
                                         ¬Q                     ¬T ∨ Q  
                                           └─────────┘
                                                        ¬T                          T
                                                          └─────────┘ 
                                                                       □        -------------> R 증명 완료

7. The Most General Unifier
 - 술어 논리에서 variable의 value를 최대한 정해주는 집합
 - UNIFY 함수를 호출하면 반환해준다.

8. Procedural Knowledge
 - 사람이 instruction의 순서를 정해준다.

9. Declarative Knowledge
 - 사람이 순서를 정해주지 않아도 컴퓨터가 스스로 순서를 정해서 수행한다.
 - 모든 가짓수를 계산해 맞는 답을 찾음
 - 사람이 instruction의 순서를 정해주는 것은 cost가 크므로 Declarative 방식이 유리할 때가 있다.

10. Closed World Assumption
 - 닫힌 세계이므로 현재 명시된 명제로 추론이 불가능하면 그 명제는 거짓이 된다.

11. Open World Assumption
 - 열린 세계이므로 현재 명시된 명제로 추론이 불가능 하다면 그 명제는 알 수 없는 명제가 된다.


'AI' 카테고리의 다른 글

[AI] Agent System  (0) 2017.06.08
[AI] Semantic Web  (0) 2017.06.07
[AI] Constraint Satisfaction Problems  (0) 2017.06.07
[AI] Game Playing  (0) 2017.04.17
[AI] Genetic Algorithm  (0) 2017.04.17

1. Constraint Satisfaction Problem
 - Variable과 Domain 사이의 제약조건을 통해 미리 Variable에 대한 Domain을 제한하여 수행 속도를 올리는 방법

2. Map-Coloring Problem

 - 위처럼 나눠져 있는 지도에서 3개의 색으로 인접한 구역의 색과 겹치지 않도록 칠하는 방법이 있는지를 구하는 문제
 - Constraint graph를 통해 인접하는 구역을 표현할 수 있고, 해당 그래프를 이용해 색칠 하는 것이 가능

3. Varieties of Constraints
 - Variable의 수에 따라 분류 가능
 - Unary constraints : 하나의 변수를 특정 도메인으로 제약하는 Constraint
 - Binary constraints : 두개의 변수로 제약하는 Constraint
 - higher-order constraints : 3개 이상의 변수로 제약하는 Constraint

4. Cryptarithmetic

       T W O
    + T W O
    -----------
     F O U R
 - 같은 문자의 경우 같은 숫자이며 해당 연산 결과와 맞는 경우가 있는지 찾는 문제
 - Constraint를 정의하여 문제 풀이 가능

5. Real-world CSPs
 - Assignment Problems : 누가 어떤 과목을 강의 할지
 - Timetabling problems : 어떤 class를 언제 어디서 강의 할지
 - Transportation scheduling : 배송을 효율적으로 하는 방법

6. Backtracking search
 - 가능한 경우의 수를 모두 해보는 방식으로 graph에서 dfs방식으로 탐색.
 - 모든 경우의 수를 탐색하므로 정확한 결과를 얻을 수 있지만 필요 없는 계산이 너무 많음.(Cost가 높다)

7. Most constrained variable
 - 가장 단순한 방법으로 가능한 경우의 수 중 가장 빠른 것 부터 적용하는 방법

8. Most constraining variable
 - 가장 많은 연관성(제약)을 가진 곳부터 Domain을 할당하는 방식

9. Least constraining value
 - Domain 중 영향을 가장 적게 주는 value를 선택하는 방식.

10. Forward checking
 - 특정 variable의 value를 정해주고 난 뒤, constraint에 의해 value가 선택되지 않은 variable의 domain이 바뀌게 되는데,
   바뀔 때 마다 Domain을 바꿔 주어서 연산을 줄이는 방식

11. Arc consistency
 - 특정 Variable의 value가 정해졌을 때, constraint에 의해 value가 선택되지 않았을 경우 variable의 domain이 바뀌게 되고,
   해당 Domain의 남은 수가 1개일 경우 해당 value만 가능하므로 이 value를 선택했을 경우를 가정해 다시 Domain을 계속 줄여나가는 방식
 - AC-3 알고리즘이라고 불린다.




'AI' 카테고리의 다른 글

[AI] Semantic Web  (0) 2017.06.07
[AI] Knowledge Representation  (0) 2017.06.07
[AI] Game Playing  (0) 2017.04.17
[AI] Genetic Algorithm  (0) 2017.04.17
[AI]3장 Heuristic Search Tech.  (0) 2017.04.13

+ Recent posts