이렇게 우리의 삶은 수열의 연속이라고 할 수 있습니다.현재의 값이 이전 값에 영향을 받아 연산 된 결과라고 생각할 수 있었습니다. 실제 생활에서는 매우 다양하고 복잡한 문제들이 존재하고 저희는 현재값이 이전값의 영향을 받는다는 특성을 좀더 실제적인 문제에 적용하고 싶었습니다. <중 략>N개의 물건이 있고 가방이 W무게까지 견딜수 있다면N번째 물건을 포함했을때와 미포함했을때의 경우를 나눠서 그때 발생되는 각각의 가치를 비교하여 큰값을 취해야 합니다.그리고 그 다음번의 물건에 대해서 그 물건을 챙겨야 할지 말아야할지를 선택하기 위해서는 그전물건을 고려했을때의 가치를 기억해놓고 비교할 수 있어야 합니다.
과제 6)1.Knn 방법으로 성적 예측하기1)[1] 4.022827트레이닝 데이터와 테스트 데이터를 나누고 그뒤 numeric변수를 추출하여 성적을 예측하였습니다. K가 25일 때 RMSE는 4정도가 나왔습니다.2)nomalize한뒤 RMSE> normalize sgn sgnTrain sgnTest sgnTrain_labels sgn_test_pred sgn_test_pred_numeric sgn_test_pred_numeric rmse_sgn_test rmse_sgn_test[1] 3.987991nomalize 함수를 먼저 정의해주고, nomalize가 적용된 트레인데이터와 테스트데이터를 사용했습니다. 이때 K가 25일 때, rmse값은 3.98정도 였습니다.3) k값 다양하게 변화시키면서 성능측정.저는 다양한 k에 대한 값을 알고 싶어서 for문을 사용했습니다.(k의 범위는 20-100까지 커질 때rmse)k값이 커짐에 따라 rmse값의 변화를 그래프로 나타내 보았습니다. 점점 작아지는 것을 알 수 있습니다. 따라서, K값이 클수록 rmse값이 작다는 것을 알 수 있었습니다.4) categorical변수 사용하기sgTrain$higher
공학설계입문공학설계입문 보고서-라인 트레이서-1. 개요 및 문제 정의- 개요: 라인 트레이서 로봇을 만들기 위해 먼저 개략적인 아이디어로서, 바닥에 칠해진 검은 선을 따라서 가는 것이 목적이기 때문에 두 개의 Light sensor를 사용하고, 한 개의 sensor가 검은 선을 인식할 때마다 다른 명령을 줌으로써 곡선 등에 대처할 수 있도록 해야겠다고 생각했다. 더불어 두 개의 Light sensor가 모두 검은 선을 인식하지 않거나 모두 인식할 때에는 앞으로 움직여서 한 개의 sensor가 검은 선을 인식하는 조건을 촉발시켜야겠다는 아이디어에 착안했다.또한 성능을 높이기 위해서 두 바퀴가 모두 앞으로 움직일 때는 최대출력을 주고, 곡선을 돌 때에는 라인의 방향에 따른 바퀴에 출력을 아예 주지 않거나 조그만 출력을 주어서 방향을 전환하는 대신, 기존 바퀴에는 최대출력을 주어 빠른 시간 내에 정해진 코스를 완주해야겠다는 아이디어에 착안했다.- 문제 정의: objectives, metric, constraints를 결정한다. 문제정의단계는 고객의 요구를 명료 하게하고 원하는 것에 순위를 정하며, 얻게 되는 것을 정량화(Metric설정), 제약조건을 성립하는 단계이다.1. 1 Objective우리는 NXT프로그래밍 설계를 통해 검은색 선을 따라 움직이는 로봇을 만들고자 하였다. 최적의 라인 트레이서 로봇을 만들기 위해 두 센서 간의 거리, 코딩에 대해 여러 방법으로 고안하고 수정하게 되었다. Brainstorming을 통해, 1)종점까지 도달하는 시간이 짧을수록, 2)이동 시 라인을 많이 이탈하지 않고 나아갈수록 좋다는 의견이 모아졌고, 이를 목표로 구상하기로 하였다.1.2 MetricObject를 비교적 객관적으로 평가하기 위해서 시간과 정확도(라인주변을 이탈하지 않는 정도)의 척도를 사용하기로 하였다. 시간에 대해서는 20초-걸린 시간(초)를 사용하였고 정확도에 대해서는 이탈(비틀비틀 거리는 정도)를 육안으로 보았을 때 전혀 흔들리지 않으면 5점, 약간 흔들리면ensor를 통해 검은색을 감지하느냐 감지하지 않느냐라는 조건으로 크게 둘로 나눈 뒤, 1번 Light sensor의 검은색 감지 여부로 경우를 더 나누었다.3번과 1번 Light sensor가 모두 검은색을 감지 한 경우, B와 C를 동시에 움직여 앞으로 나가도록 하였고, 3번 Light sensor만 검은색을 감지 한 경우, B는 최대출력으로-C는 약간의 출력으로 움직여 방향을 전환하게 했으며 여기서 1번 Light sensor가 검은색을 감지할 때까지 같은 행동이 반복되도록 하였다. 1번 Light sensor가 검은색을 감지한다면, 다시 처음으로 돌아가는 것으로 Loop system을 적용하였다.3번 Light sensor가 검은색을 감지하지 못하고 1번 Light sensor만 검은색을 감지한 경우, C는 최대출력으로-B는 약간의 출력으로 움직여 방향을 전환하게 했으며, 여기에서는 1번 Light sensor가 검은색을 감지하지 않을 때까지 같은 행동이 반복되도록 하였다. 그리고 검은색을 감지한다면 처음으로 돌아가게 하였다.마지막으로 3번과 1번 Light sensor가 모두 검은색을 감지하지 않은 경우에는 모두 검은색을 감지했을 경우와 같이 B와 C를 동시에 움직여 앞으로 나가도록 하였다.2.1 개념설계Function:: 흰 색 우드락 배경 위에 그려진 검은색 직선 및 곡선으로 이루어진 검은색 라인을 따라가야 한다. 어떤 방향에서 시작하더라도 수행할 수 있어야 한다.Requirements for function:: 직선 및 곡선에서 탈선하지 않아야 한다.Means for Function: 흰 색 배경을 인식해서 가는 방법, 검은색 선을 인식해서 가는 방법이 있다.2.2 예비설계예비 설계단계에서는, (위의 사진을 참고한다면)방향을 전환할 때 한 쪽의 바퀴만 움직이고 다른 한 쪽의 바퀴는 정지하도록 하였다. 이를 통해 방향 전환을 할 수는 있었지만, 로봇이 매우 덜컹거리며 움직였다.이러한 덜컹거림을 극복하기 위해서, 완전히 정지해있는 한 쪽 바퀴에 약간따라 가도록 하는 것이 목표이기에, 검은 색과 하얀 색을 구분하여 로봇이 움직일 수 있도록, 3번 port와 1번 port에 Light sensor를 각각 1개씩 부착하였다. 그리고 두 Light sensor간의 너비는 바닥에 칠해진 검은 선의 두께보다 조금 더 넓게 설정하였으며, Light sensor에 따른 빛의 세기에 대한 비교 정도는 50으로 하였다.또한 B port에는 오른쪽 바퀴를, C port에는 왼쪽 바퀴가 연결되어있다.그럼으로써 총 4 가지의 상황이 생기게 되었는데, 아래와 같다.①두 Light sensor가 모두 검은색을 감지하지 않았을 때②1번 Light sensor만 검은색을 감지하고, 3번 Light sensor는 감지하지 않았을 때③3번 Light sensor만 검은색을 감지하고, 1번 Light sensor는 감지하지 않았을 때④두 Light sensor가 모두 검은색을 감지했을 때먼저 ①번의 경우, 두 Light sensor가 모두 검은색을 감지하지 않았을 때로서, 로봇이 바닥에 칠해진 검은 선을 두 Light sensor 사이에 두고 앞으로 움직이는 상황이다. 이 때 Move block을 사용하여 B와 C를 동시에 움직이도록 설정하며, 방향은 앞쪽으로, power는 최대출력인 100으로 설정하였고, Duration은 unlimited로 하여 다른 설정한 조건이 충족될 때까지 지속되도록 설정하였다.다음으로 ②번의 경우, 1번 Light sensor만 검은색을 감지하고, 3번은 감지하지 않았을 때로서 로봇의 오른쪽에 위치한 1번 Light sensor가 바닥에 칠해진 검은 선을 감지했음을 의미한다.다시 말해서 로봇이 오른쪽으로 움직여야 하는 상황이기 때문에, C port와 B port를 따로 설정하기 위해(왼쪽 바퀴와 오른쪽 바퀴를 따로 설정하기 위해) 2개의 Move block을 사용하였다. 여기서 왼쪽 바퀴에 연결된 C port에는 그대로 100의 출력을 설정하였고, 오른쪽 바퀴에 연결된 B port에는 17만큼의 적은 출력을 설을 감지하지 않았을 때의 Light sensor block을 한 개 추가하여(빛 세기에 대한 비교 정도는 40으로 설정), 1번 Light sensor가 더 이상 검은색을 감지하지 않으면, ②번의 상황이 끝나도록 설정하였다.③번의 경우, 3번 Light sensor만 검은색을 감지하고, 1번 Light sensor는 감지하지 않았을 때로서 로봇의 왼쪽에 위치한 3번 Light sensor가 바닥에 칠해진 검은 선을 감지했음을 의미한다.이는 로봇이 왼쪽으로 움직여야 하는 상황을 의미하며, 여기서도 B port와 C port를 따로 설정하기 위해(왼쪽 바퀴와 오른쪽 바퀴를 따로 설정하기 위해) 2개의 Move block을 사용하였다. ②번의 경우와 정확히 반대의 경우이기 때문에, 오른쪽 바퀴에 연결된 B port에는 그대로 100의 출력을 설정하였고, 왼쪽 바퀴에 연결된 C port에는 17만큼의 적은 출력을 설정하였다(모두 Duration은 unlimited로 설정하여 다른 조건이 충족될 때까지 지속되도록 설정). 따라서 로봇이 C port에 아무 출력을 주지 않았을 때와 같이 덜컹거리지 않고, 비교적 부드럽게 회전할 수 있었다.그리고 2개의 Move block의 뒤에 1번 Light sensor가 검은색을 감지했을 때의 Light sensor block을 한 개 추가하여(빛 세기에 대한 비교 정도는 40으로 설정), 1번 Light sensor가 검은색을 감지하면, ③번의 상황이 끝나도록 설정하였다.마지막으로 ④번의 경우는 두 Light sensor가 모두 검은색을 감지했을 때이다. 이 때에는 두 Light sensor가 바닥에 칠해진 검은 선 위에 있음을 의미하기 때문에, 두 바퀴를 모두 움직임으로써 로봇이 ④번의 경우에서 벗어나 ②번 혹은 ③번의 경우에 부합될 수 있도록 의도하였고, 두 바퀴가 동시에 움직이는 것이기 때문에 ①번의 경우와 같이 작동하도록 설정하였다.3. 평가 단계: 성공적이었던 부분, 문제점 및 개선방안앞서 설정한 metric을 기준으로 평일 때 동시에 다른 쪽 바퀴는 약 17정도로 천천히 움직인 것이다.- 성공적이었던 부분: 처음 설계 시, 로봇이 방향을 전환할 때 한 쪽 바퀴를 완전히 정지시켜 놓음으로써 로봇이 크게 덜컹거리고 이로 인해 많은 시간이 소요되었다. 따라서 이러한 낭비되는 시간을 줄이고 로봇의 덜컹거림을 없애고자 완전히 정지되어있던 바퀴에 약간의 출력을 주어 같이 움직이도록 하였다. 결과적으로 덜컹거림이 거의 사라졌으며, 이로 인해 주어진 라인을 완주하는데도 크게 성공적이었다.- 문제점: 우리의 설계는 로봇의 덜컹거림을 줄여 속도를 빠르게 하고자 한 쪽 바퀴를 정지시키지 않고 움직이도록 수정한 것으로, 이와 같이 설계를 수정하고 나서 예행 연습 을 시행했을 때는 아무 문제없이 로봇이 동작했으나, 실제 test시 '정 방향'의 경우 탈선하게 되었다.여기서 탈선한 구간은 직선구간으로 곡선이 없는 곳이었다. 실제로 test1에서는 정 방향에서 직선구간에 아무 문제없이 빠른 속도로 진행 되었고, 설계를 수정한 test2의 역방향에서도 직선구간에서 문제없이 동작하였다. 이를 통해 우리가 설계를 수정한 부분과 실제 test당시의 탈선과의 관련성은 없다고 생각했다.그러면 어떤 요소가 로봇을 탈선하게 했을까?문제점의 원인으로 그림자에 대해 생각하게 되었다. 탈선하기 전, 구경하기 위해 많은 학생들이 붐비게 되었는데, 직선구간에 들어서고 나서, 조금 뒤 누군가가 라인 바로 앞으로 지나갔는데, 그 후 로봇이 바로 탈선을 하였다. 그 때의 지나간 학생의 그림자로 인해 로봇이 검은색그림자를 라인(경로)으로 인식하고 다른 방향으로 나아갔을 수 있다는 가정이 세워지게 되었다. 비록 그 당시에는 그림자가 영향을 미칠 것이라는 것을 바로 알아차리지 못하고 직선구간에 탈선한 것에 대해 매우 당황했기에 결과가 많이 아쉽지만, 보고서를 작성하며 우리가 평소에 사소하게 생각하고 지나치던 것들이 결과에 큰 영향을 미칠 수 있다는 점을 깨닫게 되었다.- 개선방안: 직선구간에서 탈선했던 것이 외부적 요소일 가능성이 농후되었다.
How to Overcome the Temptations of DevilsDo you know the answer to living as a proper Christian? Recently, many people have been concerned about how to behave as Christians in various parts of their lives. Some Christians are falling into the temptations of the world. There is an old Korean proverb “If you know the enemy and know yourself, you are invincible.” If we know how the devil tempts us, we can cope with the temptations of devils as Christians. In Screw Tape Letters, an experienced demon Screw Tape taught his nephew, Wormwood, about his skills to corrupt people through 31 letters.
Lab05 Vending MachineI. 서론-K-map을 이용한 논리 최적화에 대한 설명: K-map(카노프 맵)을 이용하는 방식은 체계적인 2 단 논리함수 최적화 방법 중 입력 변수의 개가 4 개 이하일 때 매우 효율적인 방식이다. 주어진 함수들을 minterm 의 합으로 유일하게 나타낼 수 있는데, 이 minterm 들이k-map 의 각 사각형과 1:1 로 대응된다.어떤 minterm 에 의해 함수의 출력이 1 이 되면, 해당하는 k-map 의 사각형에 1 을표시하고, 출력이 0 이 되면 0을 표시하고, don’t care 인 경우에는 X 로 표시한다. 이렇게 0, 1 그리고 X 로 표시된 K-map 을 논리 최적화에 이용하는데, k-map 에서 값이1 인 인접 사각형들이 2 의 멱승으로 묶여질 때, 즉 다음 4 개중의 하나의 모양을 이룰 때 그 minterm 들을 합병하여 각각 변수를 1 개, 2 개, 3 개, 4 개를 줄여 나갈 수 있다.변수가 4개일 때 주의해야 할 것은 순서를 00, 01, 11, 10으로 해야한다는 것이다. 그 이유는 최적화를 할 때 양 옆의 변수끼리 의 차이가 1이 나야 k-map을 적용하여 최적화에 용이하기 때문이다.-7-segment LED 의 구성 및 동작7-segment 는 외부 핀의 모양에 따라 2 가지 종류가 있는데, 다음 그림은 2 종류에 대한 핀 구성을 보여준다. (NC (Not Connected) 핀은 사용하지 않는 핀이다.) 또한 각각의 7-segment 는 common-anode 형태와 common-cathode 형태가 존재한다. 아래 그림에서 왼쪽이 common-anode, 오른쪽이 common-cathode 이다.우리는 이번 실험에서 위 사진의 왼쪽을 사용하였다.위의 7447에 Vcc와 Ground를 연결하고 그림에 나와있는 15~9번 pin-port에 7-segment LED에서부터 전선을 연결시켜서 사용하게 되는데, LED를 사용할 때는 과전류가 흐르는 것을 방지 시키기 위해서 330 저항을 연결하여 연결해야 한다.-본 실험에서 개발하는Vending Machine 의 요구조건을 바탕으로 동작 시나리오 설명이 실험에서 우리가 구현하고자 한 자판기는 500원짜리와 600원짜리 두가지 음료수를 판매한다. 이 자판기는 100원짜리 동전을 최대 3개, 500원짜리 동전을 최대 1개 입력 받을 수 있다. 따라서 우리가 입력할 수 있는 금액은 100원, 200원, 300원, 500원, 600원, 700원, 800원이다. 우리는 ‘S’를 통해 사고 싶은 음료수를 선택할 수 있고, 입력한 금액이 사고 싶은 음료수의 가격을 만족하거나 그 이상이라면 LED를 통해 음료수가 나왔다는 출력을 알려준다. 또 잔돈이 생기면 잔돈이 얼마나 남았는지 7-segement LED를 통해 잔돈의 결과를 알려주는데, 100원의 잔돈이 생기면1, 200원의 잔돈이 생기면 2, 300원의 잔돈이 생기면3, 잔돈이 없다면 0을 나타내어 알려준다. 잔돈이 생길 수 있는 경우는 0원, 100원, 200원, 300원 이다.따라서 우리가 실험하는 Vending Machine의 input값은 총 4개인데, S를 통해 물건 선택(0일 때 500원짜리음료수 1일 때 600원짜리 음료수) N2를 통해 입력 받는 500원짜리 동전의 개수, N1과 N0를 통해 입력 받는 100원짜리 동전의 개수를 2진수를 통해 나타내고 C1C0를 2진수를 통해 거스름돈의 개수를 출력해주고 G1은 1일 때 600원짜리 캔이 출력되고 G0가 1일 때 500원짜리 음료수가 출력됨을 알려준다.II. 실험과정 및 결과-문제의 정의로부터 Vending Machine의 구조인 [실험 내용1]의 회로도에 대한 동작 설명또, 무슨 물건을 살 것인지 얼마를 넣을 것인지 신호를 입력하면 그 신호가 core logic을 통해서 C0, C1, G1, G0으로 출력되는데, G0과 G1은 입력한 돈이 구매할 수 있는 금액을 충족한 이후 구매해졌을 때 구매하였다는 신호를 LED로 연결하 실험 내용 1의 회로도는 다음과 같다. DIP switch를 통해서 S,-segment LED로 신호를 보내서 0, 1, 2, 3을 출력하게 되는데 이것도 LED이기 때문에 이 때도 330 저항을 각각 연결해주어야 한다.-Vending machine core logic 설계과정에 대한 설명I .문제 1 에 제시된 기능에 대한 진리 표 작성 및 설명금액입력출력SN2N1N0C1C0G1G00원00000000100원00010000200원00100000300원00110000500원01000001600원01010101700원01101001800원011111010원10000000100원10010000200원10100000300원10110000500원11000000600원11010010700원11100110800원11111010이 실험은 Vending machine 에 0원, 100원, 200원, 300원, 400원, 500원, 600원, 700원, 800원을 각각 넣었을 때 나오는 100원짜리 거스름돈의 개수와 500원/600원 음료수의 출력 여부를 나타낼 수 있게 하는 것이었다.G1, G0는 상품을 나타내는 신호인데 G1이 1이면 600원짜리 음료수를 선택한 것이고, G0이 1이면 500원짜리 음료수를 선택한 것이다. 따라서 위의 표에서(0000~0111)까지는 500원짜리 음료수를 택할 때, (1000~1111)까지는 600원짜리 음료수를 택할 때이다. C1과 C0는 거스름돈으로 나오는 100원의 개수를 나타내는 신호인데 C1C0=00이면 거스름돈이 없고, C1C0=01 이면 1개, C1C0=10 이면 2개, C1C0=11 이면 3개를 나타낸다. 그래서 위의 진리표를 통해 한눈에 각 입력 값과 출력 값을 알 수 있도록 하였다.ii. 문제 2 에 제시된 K-map 을 완성하고 Core Logic 의 입력에 대한 각 출력신호의 논리식을 제시For C1: S’N2N1+N2N1N0DCAB*************0*************00100For C0: S’N2N0+SN2N1N0’DCAB*************0*************0001업자료의 회로를 첨부하였다. 회로를 설계할 때 개별 입력과, 핀번호는 첫번째 사진을 참고하면 된다.-전체 회로에 대한 실험 결과I. Bread Board 상에 구현된, Vending Machine 의 입력 부 / Core Logic / 출력(G1,G0 LED 및 C1,C0 의 7Segment)를 포함하는 전체 회로를 사진으로 캡쳐 하고 각 부분을 실험내용 1 에 제시된 회로도와 비교하여 설명↑입력 0 0 1 1을 가했을 때, 7segement 출력:0↑입력 0 1 0 1을 가했을 때, 7segement 출력: 1↑입력 0 1 1 0을 가했을 때, 7segement 출력: 2↑입력 0 1 1 1을 가했을 때, 7segement 출력: 3거스름돈이 나올 수 있는 금액의 경우는 0원, 100원, 200원, 300원이고 각각의 경우를 시행해 보았을 때 적절한 결과가 나왔다. 각각 입력의 경우에 스위치와 Vcc와 연결을 하고, 신호가 입력되는지 확인하기 위해서 LED에 330을 연결하고 Ground로 보내서 불이 들어오도록 회로를 구상하였다. Gate는 아랫부분은 왼쪽에서부터 NOT, AND, AND게이트 이고 윗부분은 7-segment LED, 7447, OR gate를 사용하였다.또, 각각의 입력과 출력에 대해 330옴 LED를 각각 달았고, 7-segmentLED도 LED이기 때문에, 7개의 330옴 저항을 달았다.ii. Vending Machine 의 입력에 대한 출력 동작 특성기술문제 1 에서 작성한 진리표를 참고하여 각 입력 값에 따른 출력 측정 결과를 기술금액입력출력7-segmentSN2N1N0C1C0G1G00원000000000100원000100000200원001000000300원001100000500원010000010600원010101011700원011010012800원0111110130원100000000100원100100000200원101000000300원101100000500원110000000600원110100100700원111001101800원111선택할 경우 700원이 입력되었을 때 100원, 800원이 입력되었을 때 200원이 거스름돈으로 남겨진다는 것을 알 수 있었다. 또 그 외의 경우에는 거스름돈이 0원이라는 것을 알 수 있다.각각의 경우의 입출력을 위의 표로 정리해보았는데, 500원짜리 음료를 선택할 경우 500원이상 입력했을 때 G0가 1로 음료가 뽑혔다는 것을 알 수 있었고, 600원짜리 음료를 선택할 경우 600원이상 입력했을 때 G1이 1로 음료가 뽑혔다는 것을 알 수 있었다. 그 외의 경우도 S(선택)N2(500원짜리 동전입력) N1N0(100원짜리 입력 2진수로 나타냄) C1C0(거스름돈2진수로)G1(600원짜리 음료수 출력)G0(500원짜리 음료수 출력)을 알 수 있다.III. 결론 및 토의“실험 시에 발생한 오류들과 각각의 해결 방법을 기술 논리 회로 설계에서 오류를줄이기 위한 방법 제시”: 우선 회로를 연결하기 전에 전류가 정상적으로 흐르는지 확인한다. 20mA정도 흐르면 적당하다고 하였다. Vcc연결체크 하는 것이다.그리고 회로를 구성할 때 한번에 전체를 다 연결하지 말고, 부분으로 나눠서 그때그때 쇼트검사를 해주는 것이 좋다.그리고 가장 기본적인 건 실험할 회로를 깔끔하게 그리는 것이다. 이번에 회로를 연결할 때 내가 그린회로가 가독성이 떨어져서 연결할 때 마다 제대로 선을 꼽았는지 헷갈렸었다. 또 어떤 경우는 정상적으로 입력과 출력이 되지만 어떤 경우는 엉뚱한 결과값이 나와서 디버깅해보니 인풋부터 값이 이상하게 들어가고 있었다. 따라서 회로에서 몇 가지 부분에 오류가 있다는 것을 거꾸로 차근차근 전압 측정기로 측정하면서 어떤 부분이 HIGH이고 LOW 값이 나와야 하는지를 생각하면서 디버깅 과정을 거치면 우리가 잘못 꼽은 선이나, 연결을 해야하는데 안한부분을 알 수 있었다.다행히, 우리 조는 이번에 실험도구들이 고장 나 있지 않아서 2가지의 오류를 잡은 후에 바로 정상적인 실험 결과를 도출할 수 있었지만, 다른 조의 친구들은 가끔 게이트의 핀 하나가 고장 나거나 얇은 전선,각한다.