• Nebyly nalezeny žádné výsledky

Dnes bude dokonˇcen´ı semestru

N/A
N/A
Protected

Academic year: 2022

Podíl "Dnes bude dokonˇcen´ı semestru"

Copied!
34
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

Dnes bude

dokonˇcen´ı semestru

Ud´alostmi ˇr´ızen´e programov´an´ı (kdy jen ˇcek´ame, aˇz pˇrijde ud´alost, na kterou nastav´ıme ovladaˇc),

Tkinter (jakoˇzto knihovna umoˇzˇnuj´ıc´ı tvorbu formul´aˇrov´ych aplikac´ı),

demonstrace knihovny Tkinter k implementaci hry (o ˇstr˚udlu), uk´azka, co vˇsechno lze v Pythonu programovat.

(2)

Ud´ alostmi ˇr´ızen´ e programov´ an´ı

funguje ´uplnˇe jinak, neˇz jsme zvykl´ı

D˚ukladnˇeji bude v l´etˇe v C#, sledujte podobnosti a rozd´ıly v implementaci.

My jsme zvykl´ı program organizovat od zaˇc´atku do konce (co pˇresnˇe kdy se m´a st´at), jenˇze

ˇrada aplikac´ı vyˇzaduje vyplnˇen´ı ´udaj˚u, coˇz by se takto dˇelalo tˇeˇzko,

naopak samo vyplˇnov´an´ı ´udaj˚u n´as nezaj´ım´a, my chceme zaˇc´ıt pracovat, aˇz jsou data pohromadˇe.

O bˇeh programu se tedy chov´a prostˇred´ı, n´as vzbud´ı, aˇz nastane nˇejak´a ud´alost.

Ud´alosti: kliknut´ı myˇsi, pˇr´ıjezd myˇsi, odjezd, kliknut´ı prav´ym tlaˇc´ıtkem, dvojklik,...

(3)

Ud´ alostmi ˇr´ızen´ e programov´ an´ı

z technick´eho hlediska

Obstar´ame si formul´aˇr,

tomu (a jeho element˚um) nastav´ıme funkce jako ovladaˇce ud´alost´ı,

ˇrekneme ”plav”!

(4)

Tkinter

Je knihovna implementuj´ıc´ı ud´alostmi ˇr´ızen´e programov´an´ı

import tkinter

nebo l´epe from tkinter import *

Obsahuje formul´aˇr, tlaˇc´ıtka, textov´a pol´ıˇcka editovateln´a, - a needitovateln´a,...

Pouˇzijeme ji tak, ˇze postav´ıme formul´aˇr objekt tˇr´ıdy Tk, pomoc´ı atribut˚u nastav´ıme jeho vzhled, nastav´ıme ovladaˇce, postav´ıme ovl´adac´ı prvky, atributy jim nastav´ıme vzhled, nastav´ıme ovladaˇce, napl´ac´ame prvky na formul´aˇr, zavol´ame formul´aˇri metodumainloop

(5)

Prvky

kter´e se mezi verzemi nepochybnˇe mˇen´ı

Label (text k v´ypisu) Button (tlaˇc´ıtko) Entry (textov´e ok´enko) Checkbutton, Scale, Text LabelFrame, Canvas, Menu,...

(6)

Tkinter

pˇr´ıklad

from tkinter import *

formular=Tk() # udelej novy formular

formular.geometry("800x600+50+10")# velikost/um´ıstˇen´ı hlaseni=Label(formular,text="Nazdarek!")

hlaseni.pack()# Prilep hlaseni na formular formular.mainloop() # a jedeme!

#Pˇrekreslen´ı: formular.update()

(7)

Rozmist’ov´ an´ı: pack

a souvisej´ıc´ı atributy

pack d´a prvek na formul´aˇr dle defaultn´ıho zarovn´an´ı (na stˇred) co nejv´ıce k defaultn´ı hranˇe formul´aˇre (horn´ı).

Implicitn´ı atributy:

fillvyplnitX, Y, BOTH, potaˇzmotkinter.X, Y, resp.

BOTH.

expandnat´ahnout 0 – ne, jinak – ano (na celou dostupnou ˇ

ast okna)

sidekam pˇrit´ahnoutTOP, LEFT, BOTTOM, RIGHT.

(8)

Rozmist’ov´ an´ı

to skuteˇcn´e

grid vytvoˇr´ı tabulku a prvky strk´a do bunˇek.

Implicitn´ı argumenty:

row, columnberou cel´a ˇc´ısla (kam prvek d´at), rowspan, columnspankolik bunˇek pokr´yt, ...

place dej na urˇcen´e m´ısto.

x, y– kam,

width, heightvelikost prvku,

relx, rely, relheight, relwidth– relativn´ı jednotky (vzhledem k velikosti okna, argumenty jsou necel´e).

(9)

Spoleˇ cn´ e metody

prvk˚u, se kter´ymi budeme pracovat

config(parametr=hodnota) – nastav´ı dan´y atribut na dotyˇcnou hodnotu.

Pˇr´ıklad:l.config(text="Popiska").

Bez parametru vr´at´ı slovn´ık (asociativn´ı pole) vˇsech parametr˚u (s nastaven´ım).

cget("parametr") – zjist´ı hodnotu atributu jako string.

Zbytek n´am prozrad´ıconfig().

(10)

Spoleˇ cn´ e atributy

prvk˚u

zpracov´an´ı ud´alost´ı:mainloop, quit,

wait variable(var), wait visibility(window), wait window(window), update, update idletasks,...

mainloop lze opustit metodou quit, likvidaci okna provede destroy.

funkce s ud´alostmi:bind (udalost, funkce),

unbind(udalost),... nabinduje funkci na ud´alost (resp.

odbinduje).

ˇ

casovaˇce: after(cas, funkce), after idle(funkce), after cancel(id)

spr´ava oken:lift, lower– posunou okno nahoru/dol˚u.

(11)

Udalosti

a n´azory

Ud´alosti sebind/unbindpˇred´avaj´ı jako string.

Moˇzn´e ud´alosti souvisej´ıc´ı s myˇs´ı: <Button-1>,

<B1-Motion>, <ButtonRelease-1>,

<Double-Button-1>, <Enter>, <Leave>,

s kl´avesnic´ı:<Key>, <FocusIn>, <FocusOut>, konkr´etn´ı kl´avesy <Return>, <Control L>, <Alt L>, <Escape>,

<L>,...

Ud´alost souvisej´ıc´ı s myˇs´ı dost´av´a objekt (1. argument) popisuj´ıc´ı souˇradnice (x, y), ud´alosti s kl´avesnic´ı dost´avaj´ı objekt s atributem char (kter´y ud´alost zp˚usobil).

(12)

Moˇ zn´ e prvky

jak se do nich dostat uˇz v´ıme

Button, Canvas, Checkbutton, Entry, Frame, Label, LabelFrame, Listbox, Menu, Menubutton, Message, OptionMenu, PanedWindow, Radiobutton, Scale, Scrollbar, Spinbox, Text, Toplevel

Dialogov´e okno:

tkinter.messagebox.showwarning(’titulek’,’hlaseni’)

(13)

V´ yznaˇ cn´ e prvky – Button

a uk´azka pr´ace s nimi

from tkinter import * import tkinter.messagebox def prikliku():

print("Klikli jsme!") def prikliku2(eventa):

tkinter.messagebox.showwarning(’Ha!’) f=Tk()

b=Button(f,text="Popiska",command=prikliku) b.bind(’<Button-1>’,prikliku2)

b.pack() f.mainloop()

(14)

Checkbutton

a. k. a. Checkbox

from Tkinter import * f = Tk()

pchbx = IntVar()

chbx = Checkbutton(f, text="Vyber", variable=pchbx, onvalue=1, offvalue=0)

chbx.pack() mainloop()

Pˇri kliknut´ı nastavuje promˇennoupchbx, implicitn´ı argumenty onvalue, offvalue– hodnoty je-li vybr´ano resp. ne (pˇriˇrad´ı 1 resp. 0).

(15)

Textov´ e pole

je poˇr´ad stejn´e – ale chov´a se zase jinak...

t=Text(f) t.pack()

Obsah textov´eho pole najdeme v:

t.get(zacatek,konec)

Jenˇze pozor, lze pouˇz´ıt konstantyEND, CURRENT,.. – CURRENT je znak nejbl´ıˇze k myˇsi, ˇr´adek/sloupec: ’radek.sloupec’ , napˇr.

1.0),...

(16)

Radiobutton

aneb v´ybˇery z moˇznost´ı jsou podobn´e jako Checkbuttony

...

pohlavi=IntVar()

r1=Radiobutton(f, text="Muz", variable=pohlavi, value=1)

r1.pack()

r2=Radiobutton(f,text="Zena", variable=pohlavi, value=0)

r2.pack()

#krom IntVar je i StringVar (na stringy)

#hodnotu zjistime pohlavi.get()

(17)

Canvas

slouˇz´ı k malov´an´ı obr´azk˚u

c=Canvas(f,width=100,height=100) c.pack()

c.create line(0,0,100,100,fill="red", dash=(4,4)) c.create rectangle(25,25,75,75,fill="blue")

(18)

Bal´ıˇ cky

jsou dalˇs´ım prostˇredkem dˇelen´ı programu

K´od um´ıme dˇelit do funkc´ı, soubor˚u, modul˚u.

Moduly um´ıme importovat (import jmeno).

Bal´ıˇcek m˚uˇze sest´avat z nˇekolika soubor˚u (m˚uˇze b´yt obsaˇznˇejˇs´ı).

V adres´aˇri vytvoˇr´ıme soubor init .py(klidnˇe pr´azdn´y).

Ten je inicializ´atorem bal´ıˇcku.

V nˇem m˚uˇzeme definovat nˇekter´e poloˇzky a tak´e co se nahraje, ˇrekneme-li from balicek import *:

all =[ "pokus", "druhy pokus"]– v tomto pˇr´ıpadˇe importujeme tyto dvˇe poloˇzky. Ostatn´ı ne.

(19)

Pˇr´ıklad

bal´ıˇcku p

init .py:

all =[ "pokus", "druhy pokus"]

pokus.py:

def f():

print("Nazdarek") druhy pokus.py:

def g():

print("Funkce g") treti pokus.py:

def skrytejsi funkce():

print("Sem se dostat da trochu praci.")

(20)

Pˇr´ıklad

bal´ıˇcku p

program.py from p import * pokus.f()

druhy pokus.g()

#treti pokus.skrytejsi funkce() by spadlo import p.treti pokus

p.treti pokus.skrytejsi funkce()

# Ted uz to projde.

(21)

Hry s ohodnocen´ım

byly

Definition

Hra s ohodnocen´ım je takov´a hra, kdy c´ılov´e stavy jsou

ohodnoceny ˇc´ıslem. Jeden hr´aˇc se pokouˇs´ı v´ysledek maximalizovat, druh´y minimalizovat.

Definition

Hra s nulov´ym souˇctem je takov´a hra, ve kter´e zisk jednoho hr´aˇce je roven ztr´atˇe druh´eho hr´aˇce.

(22)

Nˇ ekter´ e hry

V´ylet s pˇr´ıtelkyn´ı do New Yorku:Chceme navˇst´ıvit co nejv´ıce hostinc˚u a technick´ych pamˇetihodnost´ı, pˇr´ıtelkynˇe chce vidˇet co nejv´ıce muze´ı a kadeˇrnictv´ı. Dohodnete se tud´ıˇz, ˇ

ze se budete stˇr´ıdat v rozhodov´an´ı kam j´ıt na jednotliv´ych kˇriˇzovatk´ach.

Traverzov´an´ı po matici: Prvn´ı hr´aˇc mˇen´ı sloupce, druh´y hr´aˇc mˇen´ı sloupce. Zaˇc´ın´ame v prvn´ım ˇr´adku, prvn´ı hr´aˇc vybere sloupec v prvn´ım ˇr´adku a hodnotu na jeho pozici z´ısk´av´a. Druh´y hr´aˇc vybere ˇr´adek a z´ısk´av´a hodnotu z vybran´eho ˇr´adku ve sloupci vybran´em prvn´ım hr´aˇcem. Takto se stˇr´ıdaj´ı (pˇredem zn´amou dobu).

Spoleˇcn´a ot´azka:Jak hr´at?

(23)

Algoritmus MINIMAX

Algoritmus lze pouˇz´ıt pro hry s ohodnocen´ım.

Postav´ıme strom hry.

Zaˇcneme od koncov´ych vrchol˚u.

Hodnota podstromu je minimum resp. maximum z hodnot syn˚u (podle toho, zda hraje minimalizuj´ıc´ı nebo maximalizuj´ıc´ı hr´aˇc).

(24)

Algoritmus NEGAMAX

Varianta algoritmu MINIMAX pro hry s nulov´ym souˇctem:

ind max

i∈S −f(i) = ind min

i∈S f(i).

Jde vlastnˇe o tot´eˇz, je ovˇsem jednoduˇsˇs´ı na naprogramov´an´ı.

(25)

Demonstrace Negamaxu

na hˇre o ˇstrudlu

Str˚ˇ udl bereme z kraje (lev´eho nebo prav´eho), chceme ho sn´ıst co nejv´ıce.

Vyzkouˇs´ıme vˇsechny moˇznosti a pod´ıv´ame se, co vyjde l´epe.

Pˇredvedeno pˇr´ımo na m´ıstˇe.

(26)

Heuristiky

Obvykle se pokouˇs´ıme neprohled´avat zbyteˇcnˇe vˇsechno, pokud najdeme jednu moˇznost v´yhry, nemus´ıme hledat i vˇsechny ostatn´ı.

α-β-proˇrez´av´an´ı: Um´ıme-li v nˇejak´em synu S vyhr´at aspoˇn α a najdeme v nˇekter´em n´asleduj´ıc´ım synu T, ˇze protihr´aˇc n´as um´ı dotlaˇcit na m´enˇe, nem´a smysl vrchol T d´ale zkoumat.

Pro opaˇcn´y pˇr´ıpad se pouˇz´ıv´a β: Pokud n´as nepˇr´ıtel um´ı zatlaˇcit na nejv´yˇsβ a v jin´em synu mu uteˇceme pˇres, nem´a smysl ten druh´y syn zkoumat d´ale.

(27)

Re´ aln´ e hry

ˇSachy, d´ama, halma, ml´yn...

M˚uˇzeme postavit strom hry, ten je ale pˇr´ıliˇs velk´y.

Nasad´ıme proto vˇselijak´e heuristiky. Ty dosavadn´ı ale stejnˇe daleko nevedou.

Statick´a ohodnocovac´ı funkce: Funkce, kter´a se pokouˇs´ı odhadnout, zda je pozice perspektivn´ı (dobr´a) nebo ne.

Prohled´av´ame strom hry jen po nˇejakou dobu (do nˇejak´e hloubky). Na nalezen´e (netermin´aln´ı) pozice nasad´ıme statickou ohodnocovac´ı funkci.

U ˇsach˚u napˇr´ıklad m˚uˇzeme poˇc´ıtat materi´aln´ı pˇrevahu a body za ohroˇzen´e figurky (Colossus na Atari kolem roku 1985).

(28)

Horizont, statick´ a ohodnocovac´ı funkce

Horizont stanov´ı, do jak´e hloubky graf hry (zpravidla realizovan´y stromem) prohled´av´ame.

Statick´a ohodnocovac´ı funkce nastoup´ı, pokud se dostaneme na horizont.

Dalˇs´ıho zrychlen´ı lze (zkusit) dos´ahnout tak, ˇze napˇred

prohled´av´ame perspektivn´ı vrcholy (kde statick´a ohodnocovac´ı funkce d´av´a lepˇs´ı v´ysledky).

Jde ovˇsem jen o heuristiku, kter´a nˇekdy funguje, jindy se dostane do probl´em˚u!

(29)

Koment´ aˇr k re´ aln´ ym hr´ am

Typicky stav´ıme strom hry. Graf stav´ıme aˇz v z´avˇereˇcn´e f´azi hry, do t´e doby budujeme strom (a ignorujeme moˇznost, ˇze nˇekter´e stavy se uˇz vyskytly).

Heuristick´e algoritmy lze pojmout dvˇema zp˚usoby:

Metoda, kter´a se pokouˇs´ı naj´ıt optimum co nejrychleji, metoda, jak naj´ıt aspoˇn nˇejak´e (suboptim´aln´ı) ˇreˇsen´ı.

Zat´ım bylo to prvn´ı. Jak pouˇz´ıt heuristiku k nalezen´ı suboptim´aln´ıho ˇreˇsen´ı?

(30)

α − β proˇrez´ av´ an´ı jako heuristika

Jsou dva moˇzn´e zp˚usoby:

Metoda ok´enka: Stanov´ıme krajn´ı hodnotyα a β a v´ysledky leˇz´ıc´ı mimo tento interval oˇreˇzeme.

Kask´adn´ı varianta – strom rozˇsiˇrujeme po hladin´ach (protoˇze pokud bychom ho stavˇeli prohled´av´an´ım do hloubky,

prozkoum´ame typicky nezaj´ımav´e vˇetve a zaj´ımav´e tahy n´am uniknou).

(31)

Minimaxov´ e vˇ ety

Vrat’me se k maticov´ym hr´am (stylu Al-Capone a Babinsk´y na sebe ud´avaj´ı).

M´a smysl uvaˇzovat nejen o deterministick´e variantˇe (tzv. ˇcist´a strategie – obzvl´aˇst’ pokud hr´aˇci t´ahnou nez´avisle, tedy na sebe nevid´ı), ale m´a smysl definovat pravdˇepodobnostn´ı distribuci (a podle t´e hr´at). Tomu ˇr´ık´ame mixovan´a strategie.

Theorem

Pro kaˇzdou kombinatorickou hru s nulov´ym souˇctem s koneˇcn´ymi strategiemi existuje hodnota V a mixovan´a strategie pro kaˇzd´eho hr´aˇce takov´a, ˇze:

Pokud podle sv´e strategie hraje druh´y hr´c, prvn´ı hr´c nem˚ze vyhr´at v´ıce neˇz V .

Pokud podle sv´e strategie hraje prvn´ı hr´c, druh´y hr´c nem˚ze vyhr´at v´ıce neˇz−V .

(32)

Nash equilibrium

Definition

Nashovou rovhov´ahou nazveme sadu mixovan´ych strategi´ı (pro kaˇzd´eho hr´aˇce jednu) v koneˇcn´ych hr´ach aspoˇn dvou

nespolupracuj´ıc´ıch hr´aˇc˚u, kde ˇz´adn´y z hr´aˇc˚u si nem˚uˇze pomoci t´ım, ˇze strategii zmˇen´ı.

Theorem (J. Nash)

Pro kaˇzdou hra n hr´aˇc˚u, kde kaˇzd´y hr´aˇc m´a koneˇcnˇe moˇzn´ych strategi´ı, existuj´ı strategie urˇcuj´ıc´ı Nashovu rovhov´ahu.

(33)

Programov´ an´ı robota

ze kter´eho tu drze prom´ıt´am slidy a na kter´em hrajeme hru o ˇstr˚udlu

Na Raspberry pi lze instalovat Linux (nejl´epe Raspbian).

Jak se pohybovat v UNIXu by mˇelo b´yt pˇredneseno na speci´aln´ım kurzu,

Linuxy b´yvaj´ı vybaven´e interpretem Pythonu.

Raspberry pi m´a nav´ıc GPIO, k ovl´ad´an´ı periferi´ı.

Do Pythonu je v Raspbianu vyveden bal´ık RPivybaven´y bal´ıkem GPIO, tedy jen ˇrekneme import RPi.GPIO as GPIO a m´ame dalˇs´ı knihovnu (ve kter´e jsou funkce tentokr´at pro vyp´ın´an´ı, pouˇstˇen´ı a mˇeˇren´ı proudu).

Pˇredv´est a okomentovatrobot tk.py,

a n´aslednˇe dalˇs´ı skripty (stop.py, robot manual.py, robot ir.py, robot sonar.py)

(34)

Konec

Dˇekuji za pozornost...

Odkazy

Související dokumenty

Existenci konkr´ etn´ı moˇ znosti (ze zn´ am´ e mnoˇ ziny) uk´ aˇ zeme, pokud poˇ cet moˇ znost´ı, kter´ e nemohou nastat je menˇs´ı neˇ z celkov´ y poˇ cet

Existenci konkr´ etn´ı moˇ znosti (ze zn´ am´ e mnoˇ ziny) uk´ aˇ zeme, pokud poˇ cet moˇ znost´ı, kter´ e nemohou nastat je menˇs´ı neˇ z celkov´ y poˇ cet

Potom uk´ aˇ zeme, jak vypad´ a obecn´ e ˇreˇsen´ı line´ arn´ı homogenn´ı rekurentn´ı rovnice ˇr´ adu k s konstantn´ımi koeficienty,. a nakonec uk´ aˇ zeme, jak vypad´

Bakal´ aˇ rsk´ a pr´ ace se vˇ enuje rozboru a implementaci serverov´ e strany webov´ e aplikace TK21 pro spr´ avu tenisov´ ych klub˚ u, hr´ aˇ c˚ u a souvisej´ıc´ıch

Bakal´ aˇ rsk´ a pr´ ace se vˇ enuje rozboru a implementaci klientsk´ e strany webov´ e aplikace TK21 pro spr´ avu tenisov´ ych klub˚ u, hr´ aˇ c˚ u a souvisej´ıc´ıch

Student splni´l zad´ an´ı bakal´ aˇ rsk´ e pr´ ace a dle pˇ riloˇ zen´ eho dopisu jsou uˇ zivatel´ e jeho pr´ ace v´ıce neˇ z spokojeni.. Ot´ azky k

Pokud uˇ zivatel po pˇ rihl´ aˇ sen´ı zvol´ı v menu tlaˇ c´ıtko M´ e, aplikace odeˇ sle poˇ zadavek na server k z´ısk´ an´ı vˇ sech seznam˚ u, kter´ e kdy dan´ y

Byl navrˇ zen algoritmus pro optimalizaci poˇ c´ ateˇ cn´ı trajektorie zaloˇ zen´ y na efektivn´ım v´ ypoˇ ctu funkce vzd´ alenosti od pˇrek´ aˇ zek pro 3D