maven 빌드를 하다보면 파일명이나 버젼명등에 시간값을 집어 넣고 싶을때가 있는데,

아래와 같이 사용하면 된다.


먼저 pom.xml에서 properties 항목에 변수명과 timestamp format을 지정해준다.

 <properties>

<build.timestamp>${maven.build.timestamp}</build.timestamp>

<maven.build.timestamp.format>yyMMddhhmm</maven.build.timestamp.format>

</properties>


지정된 변수명을 사용하면 된다.

위의 경우는 ${build.timestamp}

Python에서 list의 중복을 제거 하는 방법은 중복이 있는 list를 set으로 만들어 1차로 중복을 제거 하고, 다시 list로 만들면 된다.


>>> a=[0,0,1,1,2,3]

>>> set(a)

set([0, 1, 2, 3])

>>> a

[0, 0, 1, 1, 2, 3]

>>> list(set(a))

[0, 1, 2, 3]

 



http://partrita.blogspot.kr/2013/05/blog-post.html

'Development > Python' 카테고리의 다른 글

Python 에서 ++ --  (0) 2017.02.02
Python Random number  (0) 2017.02.01
Python 에서 Enum 사용하기  (0) 2017.01.25

C나 java를 포함한 많은 언어에서 습관적으로 사용하는 ++, -- operation이 python에는 없음


>>> i=1

>>> i

1

>>> i++

  File "<stdin>", line 1

    i++

      ^

SyntaxError: invalid syntax

>>> i--

  File "<stdin>", line 1

    i--

      ^

SyntaxError: invalid syntax

 


++이나 -- 대신 += 이나 -=을 사용하면 된다

>>> i

2

>>> i+=1

>>> i

3

>>> i-=1

>>> i

2


'Development > Python' 카테고리의 다른 글

list에서 중복을 제거하는 방법  (0) 2017.02.02
Python Random number  (0) 2017.02.01
Python 에서 Enum 사용하기  (0) 2017.01.25

N개의 숫자 random하게 고르기

#0 ~ 99중에 2 고르기(중복 없음)

import random

random.sample(range(0,100), 2) 


numpy활용하여 N개의 숫자 random하게 고르기

#0 ~ 99 숫자 1 고르기

import numpy as np

np.random.randint(100)

np.random.randint(0, 100)

 

#0 ~ 99 숫자 2 고르기(중복 있음)

np.random.randint(0, 100, 2) 



List에서 n개의 random 한 element return 하는 함수

 import random

 

def randElem(list, n):

    iRands = random.sample(range(0, len(list)), n)

    retVal = []

    for i in range(len(iRands)):

        retVal.append(list[iRands[i]])

    return retVal


'Development > Python' 카테고리의 다른 글

list에서 중복을 제거하는 방법  (0) 2017.02.02
Python 에서 ++ --  (0) 2017.02.02
Python 에서 Enum 사용하기  (0) 2017.01.25

도합 20만번의 학습을 하여도 여전히 낮은 수준으로 시합을 하여서, training 방법에 사람이 직접 상대하여 그 결과를 학습하는 과정을 추가하였다.


직접 상대하면서 2연속으로 상대가 말을 두면 그 말을 막는 곳에 두지 않으면 패배 하는 상황을 집중 훈련 시켰다.

가령 아래와 같은 상황에서 X가 우상에 두지 않으면 패배 한다.

O

O

 

 

 

 

 

 

X

만약 우상 이외의 다른곳(좌하)에 두게 되면 아래와 같이 패배하게 되어서 좌하에 해당하는 action에 negative reward를 주는 것을 집중적으로 학습 하였다.


O

O

O

 

 

 

X

 

X


즉, 해당 state에서 actiond을 취하면 패배한다는 걸 Q value에 적용시켜주는 것이다. 이런 경우를 여러번 학습하게 되면 결국 좌상에 두는 action을 제외하고는 모두 negative value를 가지게 되므로, 결과적으로 좌상에 두도록 학습이 되게 된다.


사람: O  머신러닝: X (사람이 먼저 둠)

1수

O


 

 

 


 



2수

O


 

 

 


 

X


3수

O

O

 

 

 


 

X


4수

O

O

X

 

 

 


 

X


4수의 근거

지금까지의 학습으로 3수까지의 state에 대한 Qvalue값들은 아래와 같다.

 -10

 -10 

 0 

 -0.83333333

 -0.83333333

 -0.83333333

 -0.83333333

 -0.83333333

 -10

Q value를 보면 총 3가지 종류의 값이 있다.

이미 둔 칸은 -10이다.

해당 강화학습에서 다음 action에 대한 선택 로직에 게임의 규칙은 전혀 반영하지 않았다. 따라서 게임을 진행하려면, 스스로 규칙을 학습해야 하는데, 이미 둔곳은 둘수 없다는 기본적인 규칙들은 -10을 reward로 받도록 되어 있다.(두기 전과 후의 state에 변화가 없을때 reward는 -10)


두면 패배할수 있는 칸(이미 상대가 2칸을 선점했고 그 2칸을 방어할수 없는 칸)은 다음번 수의 패배에 대한 negative reward들로 -0.83333으로 채워져 있다. 즉, 좌상칸이 가장 높은 value를 가지고 있기 때문에 좌상칸을 선택했다.


마지막으로 0, 비록 reward를 얻을수 없지만, 현재 상황에서 가장 높은 reward를 가지고 있다. 따라서 좌상이 선택되어야 한다.


5수

O

O

X

 

 

O


 

X


6수

O

O

X

 

X

O


 

X


6수의 근거

5수까지의 state에 대한 Q value는 아래와 같다.

 0

 -8 

 -9.6 

 0

 0.8999977

 -8

 0

 0

 -9.92

이미 둔칸이지만 0인 곳은 학습이 되지 않는 곳이다. 가운데 칸의 경우 0.89점으로 가장 높은 reward를 가진다. 실제로 해당 칸을 두개 되면 X가 좌상에서 우하로 가는 대각선 공격을 할수 있는 기회가 주어지게 된다.


7수

O

O

X

 

X

O

O

 

X


8수

O

O

X

X

X

O

O

 

X


위의 4수 처럼 좌중칸이 가장 높은 Q value를 가지게 되어서 선택


9수

O

O

X

X

X

O

O

O

X


위의 경우처럼 이기진 못했지만 꽤 사람처럼 둔경우도 생겼다!!!


결과적으로 negative reward가 효과적으로 작용을 하게 되고 비록 강화학습이지만 사람과의 학습을 통해 실제 의미 있는 케이스에 대한 학습이 이루어지는 것이 더 빠른 학습이 될 수 있는 것으로 생각된다. (물론 실제 그런지는 사람과 시합하지 않은 경우와 대조를 해보고 해야 하지만 귀찮아서 생략..;;;....) 이래서 알파고도 굳이 사람의 기보를 학습했나????



'Development > MachineLearning' 카테고리의 다른 글

Tic Tac Toe 인공지능 구현 v01  (0) 2017.01.25
Tic Tac Toe 인공지능 구현 v00  (0) 2017.01.24

+ Recent posts