[의생명정보알고리즘] 과제 PA2 실습

2025. 5. 8. 14:41·생명정보학/대학 강의
Ref :
의생명정보알고리즘 강의 / 첨단바이오공학부 김재범 교수님

과제 설명
코드의 매커니즘 ft. 교수님
파일 가져오는 방법


✅ 과제 요구사항 정리

📝 과제 목표:

  • 동적 계획법(Dynamic Programming) 을 이용한 쌍서열 정렬(pairwise sequence alignment) 구현
  • Linear gap penalty 기반
  • 점수 기준: match, mismatch, gap
  • 프로그램 실행 예:
./PA2.py 2 1 -1 ATCTG TGCA

🧾 반드시 지켜야 할 조건

항목 체크 여부
기존 PA2.tmp.py를 수정 ✅ 완료
새로운 파일을 만들지 않음 (재작성 금지) ✅ 완료
홈디렉토리에 PA2025 폴더 생성 ✅ 완료
PA2.py 라는 이름으로 저장 ✅ 완료
실행 확인 ✅ Optimal alignment score = 4 출력됨
정렬 결과도 올바름 ✅ ATCTG, TGCA-

📤 제출 방법

📍 eCampus에 제출할 것:

절대경로(absolute path)로 제출해야 해요.

예시:

/mss/home_student/202200000/PA2025/PA2.py

👉 여기서 202200000은 본인의 학번 디렉토리로 바꾸어야 해요.


🛠 과제 파일 가져오는 과정 쉽게 설명

1️⃣ 디렉토리 이동

cd /mss/home_student/ABD2025/

👉 이 디렉토리 안에 교수님이 미리 만들어둔 PA2.tmp.py 템플릿이 있어요!


2️⃣ 템플릿 파일을 복사해서 제출 폴더로 옮기기

cp PA2.tmp.py ~/PA2025/PA2.py
  • cp: 복사 명령어
  • PA2.tmp.py: 원본 템플릿 파일
  • ~/PA2025/PA2.py: 여러분 홈 디렉토리 안의 제출용 폴더(PA2025)에 PA2.py라는 이름으로 저장해요!

💡 ~는 여러분의 홈 디렉토리를 의미해요.


3️⃣ vi 에디터로 템플릿 파일 열기

vi PA2.tmp.py

👉 파일 내용을 확인하거나 수정할 때 사용합니다.


4️⃣ 과제 다 작성한 후에는?

eCampus에 이 경로를 제출해요:

/home/student/PA2025/PA2.py

✅ 과제 수행 절차 요약

1️⃣ 템플릿 파일 복사

cd /mss/home_student/ABD2025/
cp PA2.tmp.py ~/PA2025/PA2.py

2️⃣ 제출용 디렉토리(PA2025)에 파일 생성 확인

ls ~/PA2025

→ PA2.py가 있어야 함


3️⃣ 실행 권한 부여 (필수!)

chmod +x ~/PA2025/PA2.py

→ 이렇게 해야 ./PA2.py처럼 실행 가능함


4️⃣ 파일 편집

vi ~/PA2025/PA2.py

→ 동적 계획법(DP) 기반으로 시퀀스 정렬 알고리즘을 구현
→ 입력 예시: 2 1 -1 ATCTG TGCA

 

*PA2.py 파일을 과제에 맞게 수정할 것!*

#!/usr/bin/env python3

import sys
import random

# ▶ 명령줄 인자: match 점수, mismatch 패널티, gap 패널티, 시퀀스 2개
match = int(sys.argv[1])
mismatch = int(sys.argv[2])
gap = int(sys.argv[3])
seq1 = sys.argv[4]
seq2 = sys.argv[5]

# ▶ DP 테이블 크기 정의 (행: seq1 + 1, 열: seq2 + 1)
rows = len(seq1) + 1
cols = len(seq2) + 1

# ▶ 점수 저장용 행렬(score), 이동 방향 저장용 행렬(trace)
score = [[0] * cols for _ in range(rows)]
trace = [[''] * cols for _ in range(rows)]

# ▶ 첫 번째 열 초기화: 위쪽에서만 올 수 있으므로 gap 누적
for i in range(1, rows):
    score[i][0] = score[i - 1][0] + gap
    trace[i][0] = 'U'  # Up (위쪽에서 왔다는 의미)

# ▶ 첫 번째 행 초기화: 왼쪽에서만 올 수 있으므로 gap 누적
for j in range(1, cols):
    score[0][j] = score[0][j - 1] + gap
    trace[0][j] = 'L'  # Left (왼쪽에서 왔다는 의미)

# ▶ DP 테이블 채우기 (match, mismatch, gap 고려)
for i in range(1, rows):
    for j in range(1, cols):
        # 대각선에서 온 경우: match 또는 mismatch 점수
        if seq1[i - 1] == seq2[j - 1]:
            diag = score[i - 1][j - 1] + match
        else:
            diag = score[i - 1][j - 1] + mismatch

        # 위에서 온 경우: gap 발생
        up = score[i - 1][j] + gap

        # 왼쪽에서 온 경우: gap 발생
        left = score[i][j - 1] + gap

        # 가장 높은 점수를 선택
        max_val = max(diag, up, left)
        score[i][j] = max_val

        # ▶ 같은 점수가 여러 방향에서 나올 수 있으므로 무작위 선택
        directions = []
        if diag == max_val:
            directions.append('D')  # Diagonal (대각선)
        if up == max_val:
            directions.append('U')  # Up (위)
        if left == max_val:
            directions.append('L')  # Left (왼쪽)

        trace[i][j] = random.choice(directions)  # 방향 저장

# ▶ 최적 점수 출력 (마지막 칸 값)
print("Optimal alignment score =", score[-1][-1])

# ▶ Traceback: 오른쪽 아래에서 시작해 방향 따라 이동하며 정렬 복원
i = len(seq1)
j = len(seq2)
aligned1 = ''  # 정렬된 시퀀스 1
aligned2 = ''  # 정렬된 시퀀스 2

while i > 0 or j > 0:
    move = trace[i][j]
    if move == 'D':
        aligned1 = seq1[i - 1] + aligned1
        aligned2 = seq2[j - 1] + aligned2
        i -= 1
        j -= 1
    elif move == 'U':
        aligned1 = seq1[i - 1] + aligned1
        aligned2 = '-' + aligned2  # seq2에 gap 추가
        i -= 1
    elif move == 'L':
        aligned1 = '-' + aligned1  # seq1에 gap 추가
        aligned2 = seq2[j - 1] + aligned2
        j -= 1

# ▶ 정렬된 시퀀스 출력
print(aligned1)
print(aligned2)

5️⃣ 실행

cd ~/PA2025
./PA2.py 2 1 -1 ATCTG TGCA

6️⃣ 출력 예시

Optimal alignment score = 4
ATCTG
TGCA-

=> 이렇게 나오면 정답!! (random 함수를 사용해 경로가 다양하므로 정답이 여러개가 나올 수 있음)


🧠 핵심 목표 요약

  • PA2.py 안에 동적 계획법(DP) 기반 pairwise alignment 알고리즘을 구현
  • 입력된 매치 점수, 미스매치 패널티, 갭 패널티를 이용해 최적 정렬
  • 출력 형식은 꼭 아래와 같아야 함:
  • Optimal alignment score = [정수] [정렬된 시퀀스1] [정렬된 시퀀스2]
저작자표시 (새창열림)

'생명정보학 > 대학 강의' 카테고리의 다른 글

[의생명정보알고리즘] PA3 과제  (0) 2025.06.04
의생명정보알고리즘 예상 문제 정리  (0) 2025.04.24
의생명정보알고리즘 중간고사 정리  (0) 2025.04.14
[의생명정보알고리즘] Pairwise Alignment 점수 계산 프로그램 실습  (0) 2025.04.03
의생명정보알고리즘 대학 강의 정리  (0) 2025.03.20
'생명정보학/대학 강의' 카테고리의 다른 글
  • [의생명정보알고리즘] PA3 과제
  • 의생명정보알고리즘 예상 문제 정리
  • 의생명정보알고리즘 중간고사 정리
  • [의생명정보알고리즘] Pairwise Alignment 점수 계산 프로그램 실습
smile blog
smile blog
건국대 첨단바이오공학부 & 컴퓨터공학부 BT & IT 기술로 희망을 꿈 꿉니당
  • smile blog
    스마일 블로그
    smile blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (830) N
      • 일상 생각들 (3)
      • 학과에 대해 (4)
        • 첨단바이오공학부 (4)
        • 컴퓨터공학부 (0)
      • -------- 프로젝트 -------- (0)
      • [DS] 토이 프로젝트 (1)
      • [Web, Game, XR] 토이 프로젝트 (11)
      • 경진대회 (1)
      • -------- 진로 -------- (0)
      • 생물정보학자 (19)
        • 데이터 과학이란? (0)
        • 되는 방법 (9)
        • 책 추천 (2)
        • 인강 (1)
        • 대학 (2)
        • 회사 (1)
        • 학원 (2)
        • 학회 (2)
      • 디지털 헬스케어 (72)
        • 방법 (8)
        • 생각들 (10)
        • 공부법 (4)
        • 책 추천 (2)
        • 학원 (2)
        • 참고 (2)
        • 대학 (3)
        • 회사 (3)
        • 인강 (2)
        • 게임 엔진들 (1)
        • 게임 프로그래머 개론 (2)
        • 게임 프로그래머 취업 전략 가이드 (7)
        • 취업 서류 (1)
        • 애정하는 게임들 (4)
        • XR 테크니컬 아티스트 (9)
        • 영화, 애니메이션 테크니컬 디렉터 (12)
      • -------- 기초 학문 -------- (0)
      • 생명과학 이야기 (2)
        • 대학 강의 (2)
      • 화학 이야기 (0)
      • 컴퓨터과학 이야기 (0)
      • 통계학 이야기 (0)
      • 수학 이야기 (1)
        • 공학 수학 (1)
      • 영어 이야기 (1)
      • 심리학 이야기 (7)
        • 현대인과 정신건강 (7)
      • -------- 컴퓨터 언어 -------- (0)
      • Python (3)
        • 나도코딩의 파이썬 입문 (1)
        • 파이썬 관련 정보 (1)
      • SQL (0)
      • C 언어 (32)
        • 혼자 공부하는 C언어 요약 (1)
        • [책 정리] 혼자 공부하는 C언어 (31)
      • C++ (33)
        • 명품 C++ 프로그래밍 요약 (1)
        • [책 정리] 명품 C++ 프로그래밍 (27)
        • C++ STL (0)
        • 뇌를 자극하는 C++ STL (5)
      • -------- 생명과학 -------- (0)
      • 생화학 (8)
        • 대학 강의 (8)
      • 분자세포생물학 (6)
        • 대학 강의 (6)
      • 유전자치료공학 (4)
        • 대학 강의 (4)
      • 생명정보학 (7)
        • 대학 강의 (7)
      • 약리학 (2)
        • 대학 강의 (2)
      • -------- 컴퓨터과학 -------- (0)
      • 자료구조와 알고리즘 (8)
        • 자료구조와 알고리즘의 정의 (3)
        • [책 정리] C언어로 쉽게 풀어쓴 자료구조 요약 (1)
        • [인강] 자료구조와 알고리즘 (2)
        • 코딩 테스트 대비하기! (1)
      • 컴퓨터 회로 (0)
      • 컴퓨터 구조 (43)
        • 컴퓨터 구조와 운영체제 요약 (1)
        • ---------------------------------------- (0)
        • [전공 책 정리] 컴퓨터 구조 및 설계 (1)
        • Ch1. 컴퓨터 추상화 및 관련 기술 (8)
        • Ch2. 명령어 : 컴퓨터 언어 (11)
        • Ch3. 컴퓨터 연산 (8)
        • Ch4. 프로세서 (11)
        • Ch5. 메모리 계층구조 (3)
        • Ch6. 병렬 프로세서 : 클라이언트에서 클라우드까지 (0)
      • 시스템 프로그래밍 (15)
        • [책 정리] 시스템 프로그래밍 유닉스 & 리눅스 (0)
        • [인강] 리눅스 시스템 프로그래밍 (2)
        • 리눅스에서 코딩이란? (8)
        • 대학교 강의 정리 (5)
      • 운영체제 (0)
      • 컴퓨터 네트워크 (37)
        • 모두의 네트워크 요약 (1)
        • [책 정리] 모두의 네트워크 (10)
        • ---------------------------------------- (0)
        • [전공 책 정리] 컴퓨터 네트워킹 하향식 접근 8판 (1)
        • Ch1. 컴퓨터 네트워크와 인터넷 (7)
        • Ch2. 애플리케이션 계층 (7)
        • Ch3. 트랜스포트 계층 (8)
        • Ch4. 네트워크 계층 : 데이터 평면 (3)
        • Ch5. 네트워크 계층 : 제어 평면 (0)
        • Ch6. 링크 계층과 근거리 네트워크 (0)
        • Ch7. 무선 및 이동 네트워크 (0)
        • Ch8. 컴퓨터 네트워크 보안 (0)
      • 데이터베이스 (1)
      • -------- 데이터과학 -------- (0)
      • 데이터 사이언스 (8)
        • 인강 (8)
      • 데이터 분석 (2)
        • 인강 (2)
      • 머신러닝 (2)
        • 대학 수업 (2)
      • 인공지능 (11)
        • 대학교 강의 정리 (10)
        • 인공지능 관련 정보 (1)
      • -------- +a -------- (0)
      • Visual Studio Community (7)
        • 설치법 (1)
        • 단축키 (1)
        • 오류 (5)
      • Visual Studio Code (0)
      • 노션 (1)
      • 깃허브 (7)
        • 깃허브 사용법 (5)
        • 유니티, 언리얼 & 깃허브 (1)
        • 깃허브 주의사항 (1)
      • 챗GPT 활용법 (0)
      • 기타 feat. 프로그래밍 (7)
        • 프로그래머로 살아남기 (5)
        • 코딩 vs 프로그래밍 (1)
        • 애플 비전 프로 (1)
      • 메타버스 (5)
      • -------- 예술 -------- (0)
      • 음악 (1)
      • 미술 (0)
      • -------- XR -------- (0)
      • 유니티 이야기 (23)
        • 레트로의 유니티 게임 프로그래밍 에센스 요약 (4)
        • 유니티 관련 정보 (1)
        • 유니티 디버깅 (13)
        • 유니티 인강 (3)
        • 대학교 게임 프로그래밍 강의 (2)
      • 언리얼 이야기 (0)
        • 인생 언리얼 교과서 요약 (0)
      • 컴퓨터 그래픽스 (6)
        • OpenGL (6)
      • 가상현실 & 증강현실 (4)
        • 유니티 vr (4)
      • HCI 와 UI UX (7)
        • [책 정리] HCI 개론 (6)
      • -------- Design -------- (0)
      • 캐릭터 (1)
        • 모델링 (0)
        • 리깅 (1)
      • 포토샵 (3)
      • 3ds Max (7)
      • Maya (9)
        • 블로그 (1)
        • 인강 (6)
        • 대학교 (2)
      • Blender (14)
        • 책 (1)
        • 인강 (7)
        • 기타 (3)
        • 대학교 (3)
      • 아트 작업물들 (2)
      • 에셋 사이트 (1)
      • -------- 건강관리 -------- (0)
      • 건강관리 ft. 정현 (12)
        • 목 디스크 (2)
        • 눈 관리 (2)
        • 일상생활 습관 (6)
        • 일상생활 꿀팁 (2)
        • 사무직 꿀팁 (0)
      • 헬스의 정석 ft. 정현 (28)
        • 헬스와 건강 (8)
        • 헬스 구체화 정보 (6)
        • 헬스 유튜버 (1)
        • 헬스 서적 (1)
        • 도전 바디프로필! (11)
        • 헬스장 패션 (1)
      • -------- etc -------- (0)
      • 진로 관련 잡다한 글들 (34)
        • 진도율 (9)
        • 진로 관련 글들 (15)
        • 학교 강의 관련 글들 (10)
      • 인생 꿀 Tip (23)
        • 컴퓨터 초기 설정 (9)
        • 원격 데스크톱 (1)
        • 노트북 발열 (1)
        • 전자기기 (2)
        • 중고기기 팔기 (1)
        • 아이패드 필기 어플 (1)
        • 에어팟 (1)
        • 커피 (1)
        • 맥북 (1)
        • lg 그램 (1)
        • 검색엔진에서 내 티스토리 검색 (1)
        • hELLO 다크 모드 없애기 (1)
        • 인터넷 연결 문제 (1)
        • 키보드 문제 해결 (1)
      • 유튜브 (3)
      • 청춘 그리고 추억 (1)
      • 인생 계획표 (2)
        • 2024년 2학기 (1)
        • 2024년 여름방학 (0)
        • 2024년 1학기 (0)
        • 2023년 겨울방학 (1)
      • 다양한 글들 (98)
        • C++ STL (6)
        • Win32 API (24)
        • PushPush 게임 (13)
        • 컴퓨터구조 (1)
        • 자료구조와 알고리즘 (50)
        • 게임의 정의 (3)
        • 영상 회사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Dream
    • 코딩을 시작한 이유
    • 나를 소개합니다!
    • 블로그 공부법
    • IT & 가치 있는 일들
  • 인기 글

  • 태그

    첨단바이오공학부
    배열
    스택
    포인터
    리눅스
    자료구조
    심리학
    명령어
    컴퓨터 네트워크
    연산자
    AI
    의생명정보알고리즘
    건국대
    의생명공학
    생명공학
    컴퓨터구조
    코딩
    C언어
    알고리즘
    데이터과학
    블렌더
    C++
    생물정보학
    데이터사이언스
    유니티
    생명과학
    인공지능
    unity
    의생명공학과
    함수
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
smile blog
[의생명정보알고리즘] 과제 PA2 실습
상단으로

티스토리툴바