Inf Lab10

background image

Informatyka - Podstawy Programowania w Języku C++

prow. Sławomir Czarnecki

Zadania na laboratorium nr. 10


1. Zdefiniuj funkcję

void

point(

double

** T,

int

m,

int

n,

int

* a,

int

* b)

inicjalizującą składowe każdego wiersza

(

)

0,1,...,

1

i

i

m

=

T

macierzy

m n

M

×

T

o

wymiarach

m n

×

całkowitymi liczbami pseudolosowymi z przedziału domkniętego

[

]

(

)

,

0,1,...,

1

i

i

a b

i

n

=

będącymi składowymi wektorów

,

n

a b

(

)

i

i

a

b

<

. Parametr m

oznacza żądaną liczbę punktów w przestrzeni

n

ℝ . Funkcja point(...) generuje zatem m

punktów w n wymiarowej przestrzeni Euklidesowej, których współrzędne kartezjańskie
zapisywane są do macierzy T (por. rys.1a).

2.

Zdefiniuj funkcję

double

scalar(

double

* a,

double

* b,

int

n)

która zwraca iloczyn skalarny dwóch wektorów

[

]

[

]

0

1

1

0

1

1

, ,...,

,

, ,...,

T

T

n

n

n

a a

a

b b

b

=

=

a

b

ℝ .


3. Zdefiniuj funkcję

bool

separation(

double

** T,

int

m,

int

n,

bool

positive,

double

* w)

która zwraca wartość

true

jeśli odpowiednio wszystkie m punktów

(

)

0,1,...,

1

n

i

i

m

=

T

w przestrzeni

n

ℝ , reprezentowanych przez składowe macierzy

m n

M

×

T

spełniają warunek

0

i

>

T w

(przypadek positive =

true

) lub jeśli wszystkie te punkty spełniają warunek

0

i

<

T w

(przypadek positive =

false

). W pozostałych przypadkach (positive =

true

oraz

{

}

0,1,...,

1

0

i

i

m

w

∃ ∈

T

lub positive =

false

oraz

{

}

0,1,...,

1

0

i

i

m

w

∃ ∈

T

)

funkcja

separation(...) zwraca wartość

false

. Zakładamy, że wektor klasyfikiujący

n

w

ℝ jest różny

od zera.

4.

Zaimplementuj w postaci funkcji

void

perceptron(

double

** P,

double

** N,

int

pos,

int

neg,

int

n,

long

tmax,

long

tcon)

algorytm uczenia się perceptronu (AUP)
start: Wektor wagowy

0

n

w

ℝ jest generowany losowo. Inicjalizujemy t = 0.

test:

Wektor

P

N

x

jest wybrany losowo,

jeśli

P

x

i

0

t

⋅ >

w x

to idź do test,

jeśli

P

x

i

0

t

⋅ ≤

w x

to oblicz

1

t

t

+

=

+

w

w

x

uaktualnij

1

t

t

= + , idź do test

jeśli

N

x

i

0

t

⋅ <

w x

idź do test,

jeśli

N

x

i

0

t

⋅ ≥

w x

to oblicz

1

t

t

+

=

w

w

x uaktualnij

1

t

t

= + , idź do test

Algorytm AUP dokonuje modyfikacji wektora wagowego

n

w

ℝ w każdym przypadku

kiedy wybrany losowo ze zbioru

P lub N punkt

n

x

ℝ nie został sklasyfikowany poprawnie.

Parametry P i N są tablicami odpowiednio

pos

n

M

×

i

neg

n

M

×

przechowującymi współrzędne

kartezjańskie

pos punktów ze zbioru

n

P ⊂ ℝ i neg punktów ze zbioru

n

N ⊂ ℝ . Zakładamy

przy tym, że zbiory te są rozłączne, tzn.

P

N

= ∅ oraz, że nie zawierają punktu

n

0

ℝ .

Parametr

tmax definiuje maksymalną liczbę iteracji algorytmu i zabezpiecza przed zbyt dużą

liczbą pętli. Można wykazać, że jeśli dwa zbiory

P i N są liniowo separowalne to początkowy

background image

i losowo wygenerowany wektor w będzie modyfikowany w skończonej liczbie kroków (patrz
materiał na stronie

http://wektor.il.pw.edu.pl/~iap/materialy/Perceptron_Uczenie.pdf

).

Opisany powyżej algorytm AUP uzupełnić należy jeszcze, w procedurę sprawdzającą czy
wszystkie punkty zostały sklasyfikowane poprawnie, np. w oparciu o funkcję

separation(...),

której częstotliwość wywoływania definiuje parametr

tcon (funkcję separation(...) można na

przykład wywoływać wtedy kiedy

mod

0

t

tcon =

).


5.

Zdefiniuj (w ciele funkcji main()) dynamicznie dwie macierze

,

m dim

M

×

P N

(m = 100,

dim

= 2) typu

double

, dwa wektory

,

dim

min

max

P

P

oraz dwa wektory

,

dim

min

max

N

N

typu

int

. Składowe wektorów

,

min

max

P

P

oraz

,

min

max

N

N

zainicjalizuj w taki sposób, aby możliwe

było wygenerowanie za pomocą wywołań:

point

(P, m, dim, Pmin, Pmax), point(N, m, dim, Nmin, Nmax)

dwóch zbiorów punktów

2

,

P N ⊂ ℝ , które będą rozłączne (tzn. P

N

= ∅ ) oraz które nie

będą zawierały punktu

2

0

ℝ (por. rys.1b).

x

y

0

P

N

x

y

0

T

a

0

b

0

a

1

b

1

P

min

[0]

P

max

[0]

P

min

[1]

P

max

[1]

N

min

[0]

N

max

[0]

N

min

[1]

N

max

[1]

Rys. 1a

Rys. 1b

Rys.1.

Generowanie punktów na płaszczyźnie


Wywołaj funkcję perceptron(P, N, m, m, dim, tmax) dla tmax = 1000.


Wyszukiwarka

Podobne podstrony:
infa, Inf Lab10 11
infa Inf Lab10 11
Inf Lab10
infa, Inf Lab10 11
INF dec5
BEZPIECZE STWO SYSTEM W INF
Sys Inf 03 Manning w 06
Sys Inf 03 Manning w 19
A dane,inf,wiedza,uj dyn stat proc inf w zarz 2008 9
Sys Inf 03 Manning w 02
INF 6 PRZESTEPSTWA
H Bankowość ele platnosci ele proc inf w zzarz 2008 9
Inf przestrz wekt uklady rown
10Swykl nadwr inf transpl
DIAGNOZOWANIE NIESPRAWNOSCI INF Nieznany
1 Ogolne inf o projektowaniui Nieznany (2)
admin sieci inf

więcej podobnych podstron