Professional Documents
Culture Documents
Maturski Rad Iz Programiranja
Maturski Rad Iz Programiranja
Нови Сад
2
САДРЖАЈ
Страна
ПРЕДГОВОР.............................................................................................................................2
САДРЖАЈ..................................................................................................................................3
Увод............................................................................................................................................4
1. Вештачка интелигенција..................................................................................................5
2. Игра “connect four”............................................................................................................5
3. Основни програм...............................................................................................................6
3.1. Код основног дела игре.............................................................................................7
3
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
Увод
Пајтон је програмски језик високог нивоа опште намене. Подржава, у првом реду
императивни, објектно-оријентисан и функционални стил програмирања. Синтакса
језика Пајтон омогућава писање веома прегледних програма. Језик се брзо и лако учи.
Програми писани у Пајтон језику се најчешће интерпретирају.
Теорија игара се може дефинисати или као грана примењене математике која се
служи моделима за проучавање међусобног утицаја и дејства формалних импулсивних
структура или као грана економске теорије која се бави анализом процеса одлучивања
мањег броја актера.
4
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
1. Вештачка интелигенција
Вештачка интелигенција (AI) је подобласт рачунарства. Циљ истраживања вештачке
интелигенције је развијање програма (софтвера), који ће рачунарима омогућити да се
понашају на начин који би се могао окарактерисати интелигентним. Истраживања у
вештачкој интелигенцији су фокусирана на следеће компоненте интелигенције: учење,
размишљање, решавање проблема, перцепција и разумевање природног језика.
Вештачка интелигенција као појам у ширем смислу, означава капацитет једне
вештачке творевине за реализацију функција блиских карактеристикама људског
размишљања. Могућност развоја сличног пројекта је будила интересовање људи још од
античког доба; ипак, тек у другој половини двадесетог века таква могућност је добила
прве рачунаре којима се отворио пут за тај подухват.
Конструкција апликација за стварна окружења, довела је до потребе разматрања
аспеката као што су неизвесност, или непрецизност (који се такође јављају приликом
решавања проблема у играма). За решавање ових проблема примењиване су
пробабилистичке методе (теорија пробабилитета, или пробабилистичке мреже) и
развијали други формализми као дифузни скупови (дефинисани од Л. Задеха 1965.
године), или Демпстер-Шаферова теорија (творац теорије је А. Демпстер, 1968., са
значајним доприносом Г. Шафера 1976. године).
5
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
3. Основни програм
Основни програм који је база за имплементацију вештачке интелигенције није
фокус овог рада. Представља једноставну партију игре за два играча са једноставном
графиком користећи Пајтон модул за прављење видео-игара pygame (слика 2).
6
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
BLUE = (0,0,255)
BLACK = (0,0,0)
RED = (255,0,0)
YELLOW = (255,255,0)
ROW_COUNT = 6
COLUMN_COUNT = 7
def create_board():
board = np.zeros((ROW_COUNT,COLUMN_COUNT))
return board
def print_board(board):
print(np.flip(board, 0))
7
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
def draw_board(board):
for c in range(COLUMN_COUNT):
for r in range(ROW_COUNT):
pygame.draw.rect(screen, BLUE, (c*SQUARESIZE, r*SQUARESIZE+SQUARESIZE,
SQUARESIZE, SQUARESIZE))
pygame.draw.circle(screen, BLACK, (int(c*SQUARESIZE+SQUARESIZE/2),
int(r*SQUARESIZE+SQUARESIZE+SQUARESIZE/2)), RADIUS)
for c in range(COLUMN_COUNT):
for r in range(ROW_COUNT):
if board[r][c] == 1:
pygame.draw.circle(screen, RED, (int(c*SQUARESIZE+SQUARESIZE/2), height-
int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)
elif board[r][c] == 2:
pygame.draw.circle(screen, YELLOW, (int(c*SQUARESIZE+SQUARESIZE/2), height-
int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)
pygame.display.update()
board = create_board()
print_board(board)
game_over = False
turn = 0
pygame.init()
SQUARESIZE = 100
RADIUS = int(SQUARESIZE/2 - 5)
screen = pygame.display.set_mode(size)
draw_board(board)
pygame.display.update()
8
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
if event.type == pygame.MOUSEMOTION:
pygame.draw.rect(screen, BLACK, (0,0, width, SQUARESIZE))
posx = event.pos[0]
if turn == 0:
pygame.draw.circle(screen, RED, (posx, int(SQUARESIZE/2)), RADIUS)
else:
pygame.draw.circle(screen, YELLOW, (posx, int(SQUARESIZE/2)), RADIUS)
pygame.display.update()
if event.type == pygame.MOUSEBUTTONDOWN:
pygame.draw.rect(screen, BLACK, (0,0, width, SQUARESIZE))
#print(event.pos)
# упит да унесе први играч
if turn == 0:
posx = event.pos[0]
col = int(math.floor(posx/SQUARESIZE))
if is_valid_location(board, col):
row = get_next_open_row(board, col)
drop_piece(board, row, col, 1)
if winning_move(board, 1):
label = myfont.render("Player 1 wins!!", 1, RED)
screen.blit(label, (40,10))
game_over = True
if is_valid_location(board, col):
row = get_next_open_row(board, col)
drop_piece(board, row, col, 2)
if winning_move(board, 2):
label = myfont.render("Player 2 wins!!", 1, YELLOW)
screen.blit(label, (40,10))
game_over = True
print_board(board)
draw_board(board)
9
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
turn += 1
turn = turn % 2
if game_over:
pygame.time.wait(3000)
10
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
11
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
5. Коначни код
import numpy as np
import random
import pygame
import sys
import math
BLUE = (0,0,255)
BLACK = (0,0,0)
RED = (255,0,0)
YELLOW = (255,255,0)
ROW_COUNT = 6
12
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
COLUMN_COUNT = 7
PLAYER = 0
AI = 1
EMPTY = 0
PLAYER_PIECE = 1
AI_PIECE = 2
WINDOW_LENGTH = 4
def create_board():
board = np.zeros((ROW_COUNT,COLUMN_COUNT))
return board
def print_board(board):
print(np.flip(board, 0))
13
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
for c in range(COLUMN_COUNT-3):
for r in range(ROW_COUNT):
if board[r][c] == piece and board[r][c+1] == piece and board[r][c+2] == piece and
board[r][c+3] == piece:
return True
14
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
if window.count(piece) == 4:
score += 100
elif window.count(piece) == 3 and window.count(EMPTY) == 1:
score += 5
elif window.count(piece) == 2 and window.count(EMPTY) == 2:
score += 2
return score
## хоризонтални поени
for r in range(ROW_COUNT):
row_array = [int(i) for i in list(board[r,:])]
for c in range(COLUMN_COUNT-3):
window = row_array[c:c+WINDOW_LENGTH]
score += evaluate_window(window, piece)
## вертикални поени
for c in range(COLUMN_COUNT):
col_array = [int(i) for i in list(board[:,c])]
15
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
for r in range(ROW_COUNT-3):
window = col_array[r:r+WINDOW_LENGTH]
score += evaluate_window(window, piece)
for r in range(ROW_COUNT-3):
for c in range(COLUMN_COUNT-3):
window = [board[r+3-i][c+i] for i in range(WINDOW_LENGTH)]
score += evaluate_window(window, piece)
return score
def is_terminal_node(board):
return winning_move(board, PLAYER_PIECE) or winning_move(board, AI_PIECE) or
len(get_valid_locations(board)) == 0
16
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
17
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
break
return column, value
def get_valid_locations(board):
valid_locations = []
for col in range(COLUMN_COUNT):
if is_valid_location(board, col):
valid_locations.append(col)
return valid_locations
valid_locations = get_valid_locations(board)
best_score = -10000
best_col = random.choice(valid_locations)
for col in valid_locations:
row = get_next_open_row(board, col)
temp_board = board.copy()
drop_piece(temp_board, row, col, piece)
score = score_position(temp_board, piece)
if score > best_score:
best_score = score
best_col = col
return best_col
def draw_board(board):
for c in range(COLUMN_COUNT):
for r in range(ROW_COUNT):
pygame.draw.rect(screen, BLUE, (c*SQUARESIZE, r*SQUARESIZE+SQUARESIZE,
SQUARESIZE, SQUARESIZE))
18
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
for c in range(COLUMN_COUNT):
for r in range(ROW_COUNT):
if board[r][c] == PLAYER_PIECE:
pygame.draw.circle(screen, RED, (int(c*SQUARESIZE+SQUARESIZE/2), height-
int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)
elif board[r][c] == AI_PIECE:
pygame.draw.circle(screen, YELLOW, (int(c*SQUARESIZE+SQUARESIZE/2), height-
int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)
pygame.display.update()
board = create_board()
print_board(board)
game_over = False
pygame.init()
SQUARESIZE = 100
RADIUS = int(SQUARESIZE/2 - 5)
screen = pygame.display.set_mode(size)
draw_board(board)
pygame.display.update()
19
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
if event.type == pygame.MOUSEMOTION:
pygame.draw.rect(screen, BLACK, (0,0, width, SQUARESIZE))
posx = event.pos[0]
if turn == PLAYER:
pygame.draw.circle(screen, RED, (posx, int(SQUARESIZE/2)), RADIUS)
pygame.display.update()
if event.type == pygame.MOUSEBUTTONDOWN:
pygame.draw.rect(screen, BLACK, (0,0, width, SQUARESIZE))
#print(event.pos)
# упит за унос играча 1
if turn == PLAYER:
posx = event.pos[0]
col = int(math.floor(posx/SQUARESIZE))
if is_valid_location(board, col):
row = get_next_open_row(board, col)
drop_piece(board, row, col, PLAYER_PIECE)
if winning_move(board, PLAYER_PIECE):
20
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
turn += 1
turn = turn % 2
print_board(board)
draw_board(board)
if is_valid_location(board, col):
#pygame.time.wait(500)
row = get_next_open_row(board, col)
drop_piece(board, row, col, AI_PIECE)
if winning_move(board, AI_PIECE):
label = myfont.render("Player 2 wins!!", 1, YELLOW)
screen.blit(label, (40,10))
game_over = True
print_board(board)
draw_board(board)
21
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
turn += 1
turn = turn % 2
if game_over:
pygame.time.wait(3000)
22
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
Закључак
Приказани програм можда није импресиван као све игрице које су изашле
претходних година, али садржи једноставан алгоритам који је донео револуцију у свет
технологије и који га је умногоме улепшао. Теорија игара је веома комплексна наука и
сада сам то осетила на својој кожи. Уз овај рад сам схватила које су то све заблуде
везане за појам вештачке интелигенције, јер је тешко спровести је у програму, а камоли
направити је мало комплекснијом, тако да још дуго нас неће заменити роботи!
23
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
Литература
[1] Wilson , Keil The MIT Encyclopedia of the Cognitive Sciences - одредница AI and
Education
[2] Стојановић, Божо Теорија игара: елементи и примена (Службени гласник
и Институт за европске студије, 2005)
[3] Osborne, Martin J., and Ariel Rubinstein. A Course in Game Theory. Cambridge, MA:
MIT, 1994. Print
Литература са интернета:
[4] A City College Toy Story. CUNY Matters. City University of New York.
http://www1.cuny.edu/events/cunymatters/2001_winter/backmatter.htm (зима 2001)
[5] https://kra.lc/projects/gamevisual/launch.php
Слике
Слика 1. Изглед табле...............................................................................................................5
Слика 2. Изглед програма........................................................................................................6
Слика 3. Приказ победе............................................................................................................6
Слика 4. Илустрација стабла минимакс
алгоритма..............................................................11
Слика 5.Први део минимакс кода..........................................................................................11
Слика 6.Други део минимакс
кода.........................................................................................12
24
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
БИОГРАФИЈА МАТУРАНТА
Теодора Кљаић је рођена 30.6.2002. у Смедеревској Паланци. Похађала је основну
школу „Светозар Марковић-Тоза“ првих шест разреда, а потом је прешла у седмом
разреду при Гимназији „Јован Јовановић Змај“. У седмом разреду је објавила своју
збирку песама „Пјесме из снова“. У основној школи је била носилац Вукове дипломе, а
сад ни близу. 2017. године уписује редовно први разред Гимназије, на смеру „обдарени
ученици у математичкој гимназији“, упркос томе што јој математика не иде. Планира
да упише анимацију на ФТН-у.
Фотографија матуранта
25
Имплементација вештачке интелигенције
у теорији игара попут „connect four“ Теодора Кљаић IV-9
Комисија:
Председник _______________
Испитивач _______________
Члан _______________
Коментар:
26