Kooperatív és tanuló rendszerek

A VIK Wikiből
A lap korábbi változatát látod, amilyen Bella Jakab (vitalap | szerkesztései) 2016. április 19., 18:06-kor történt szerkesztése után volt. (Formázás javítása, Google Docs link. (Szeretem, ha van külön feladatsor IS és kidolgozás IS))
Kooperatív és tanuló rendszerek
Tárgykód
VIMIA357
Általános infók
Szak
info szak
Kredit
4
Ajánlott félév
6
Keresztfélév
nincs
Tanszék
MIT
Követelmények
Labor
3 alkalom (nincs jelenlét)
NagyZH
1 db
Házi feladat
4 db
Vizsga
írásbeli
Elérhetőségek

Jegyzet

Neurális hálózatok könyv | Epub, pdf formátumok

Zh

Korábbi zh-k:

Házi feladat

A házi feladatok verseny szerű házik, amik végül egymás ellen versenyeznek. A győztesek plusz pontokat szerezhetnek a vizsgákra.

2014. tavaszi házik megoldásai

Ezek a kódok jó eséllyel az idei feladatot már nem oldják meg, de kiindulási alapként hasznosak lehetnek.

2014. tavaszi első házi

Megoldható egy minimális MLP-vel (előtte a megfelelő .mat fájlt be kell tölteni a workspace-be)

Tanítás
tx = x';
ty = y';
net = newff(tx,ty,100);
net = train(net,tx,ty);
save('net', 'net')

Majd ezután a player_i_fight.m tartalma:

player_i_fight.m
function y = player_i_fight(x)
load net;
y = sim(net,x');
return
2014. tavaszi második házi

Ezt a házit is meg lehet még oldani MLP-vel, de itt már érdemes szétszedni tanító és ellenőrző pontokra.

Tanítás
td = d';
txy = xy';
index = randperm(size(xy,1));
traincount = round(length(index)*0.8);
trainP = xy(index(1:traincount),:);
trainT = d(index(1:traincount),:);
testP = xy(index(traincount+1:end),:);
testT = d(index(traincount+1:end),:);
net = newff(txy,td,49);
net = train(net,txy,td);
save('food', 'net');

Ezután a player_i_eat.m megint nagyon egyszerűen néz ki:

player_i_eat.m
function y = player_i_eat(x)
load food.mat;
y = (sim(net,x')>0)*2-1;
return
2014. tavaszi harmadik házi

A harmadik házinak már bonyolultabb a paraméterezése, hosszabb a megírandó fájl. A megoldáshoz SVM-et használtam, ezért fel kell mellé tölteni a toolboxból az svmval, svmreg és svmkernel fájlokat.

Tanítás
train_x=x(1:2000);
test_x=x(1901:2000);

tw = 4;
oszlopok = tw + 1;

tr_sorok = length(train_x) - tw;
train_samples = zeros(tr_sorok, oszlopok);
for i = 1 : tw + 1
    train_samples(:, i) = train_x(i : size(train_samples ,1) + i - 1);
end;

te_sorok = length(test_x) - tw;
test_samples = zeros(te_sorok, oszlopok);
for i = 1 : tw + 1
    test_samples(:, i) = test_x(i : size(test_samples ,1) + i - 1);
end;

% Paraméterek beállítása.
C = 10;
lambda = 1e-6;
epsilon = 0.01;
kerneloption = 0.1;
kernel = 'poly';
verbose = 0;

[xsup,ysup,w,w0] = ...
svmreg(train_samples(1:tr_sorok, 1:oszlopok-1),train_samples(1:tr_sorok, oszlopok), ...
C, epsilon, kernel, kerneloption, lambda, verbose);
% Szimuláció.
ki = svmval(train_samples(:, 1 : oszlopok - 1), xsup, w, w0, kernel, kerneloption);

plot(train_x(tw + 1 : end), 'b');
hold on;
plot(ki, 'r');
hold off;

mse = mean((train_x(tw+1:end) - ki).^2)

%csinálok egy struktúrát a mentéshez
param.xsup = xsup;
param.w = w;
param.w0 = w0;
param.kernel = kernel;
param.kerneloption = kerneloption;

save pred_svm param;

A feltöltendő player_i_step.m is hasonlóan hosszabb lesz

player_i_step.m
function  [from_x,from_y,to_x,to_y,messages_out] = ...
    player_i_step(field, player_color, food_arr_x, food_arr_y, ...
    food_arr_min, food_arr_max, messages_in, player_name_to_color, round_i, step_i)

    load('pred_svm.mat');

players = fieldnames(player_name_to_color);
for my_index = 1 : length(players)
    if (player_name_to_color.(players{my_index}) == player_color)
        break;
    end
end

senders = fieldnames(messages_in);
for sender_i = 1 : length(senders)
    fprintf('I''m %s and got message from %s:\n', ...
            players{my_index}, senders{sender_i});
    messages_from_i = messages_in.(senders{sender_i});
    for msg_i = 1 : length(messages_from_i)
        disp(messages_from_i{msg_i});
    end
end

messages_out = struct();


x_t = food_arr_x(:,1);
x_x = food_arr_x(:,2);

y_t = food_arr_y(:,1);
y_x = food_arr_y(:,2);


[player_x,player_y]= find([field(:,:,1)==player_color]);

field_x = size(field,1);
field_y = size(field,2);

FROM_i = randperm(size(player_x,1));

from_x = player_x(FROM_i(1));
from_y = player_y(FROM_i(1));

%a paraméterek az svm-hez meg a futtatsához
xsup = param.xsup;
w = param.w;
w0 = param.w0;
kernel = param.kernel;
kerneloption = param.kerneloption;
tw = 4;
pred = zeros(5, 2);

%megjósoljuk az x-eket
for i = 1:1:5
    start = i-tw;
    pred(i,1) = svmval([x_x(end+start:end); pred(1:i-1,1)]', xsup, w, w0, kernel, kerneloption);
end

%megjósoljuk az y-okat
for i = 1:1:5
    start = i-tw;
    pred(i,2) = svmval([y_x(end+start:end); pred(1:i-1,2)]', xsup, w, w0, kernel, kerneloption);
end

TO_X = pred(5,1);
TO_Y = pred(5,2);
if (TO_X > food_arr_max) 
    TO_X = food_arr_max; 
end;
if (TO_X < food_arr_min) 
    TO_X = food_arr_min; 
end;
if (TO_Y > food_arr_max) 
    TO_Y = food_arr_max; 
end;
if (TO_Y < food_arr_min) 
    TO_Y = food_arr_min; 
end;

%az 1 és 100 közé normáláshoz
if (TO_X == food_arr_max)
    TO_X = ceil((((TO_X-food_arr_min)/(food_arr_max-food_arr_min))*field_x));
else
    TO_X = ceil((((TO_X-food_arr_min)/(food_arr_max-food_arr_min))*field_x)+0.01);
end;
if (TO_Y == food_arr_max)
    TO_Y = ceil((((TO_Y-food_arr_min)/(food_arr_max-food_arr_min))*field_y));
else
    TO_Y = ceil((((TO_Y-food_arr_min)/(food_arr_max-food_arr_min))*field_y)+0.01);
end;

%ha foglalt a mező amire lépni akar akkor a pálya bleseje felé lép
kozep = ceil(field_x/2);
while (field(TO_X,TO_Y,1) ~= 0)
    TO_X = TO_X+(kozep-TO_X);
end;

to_x = TO_X;
to_y = TO_Y;
return
Negyedik házi

Itt az első hármat kell egybe leadni, dokumentációval kiegészítve, illetve a minimális megoldáshoz a player_i-place.m fájlt hozzá kell másolni a random megoldásból.

Mivel a harmadik háziban nem volt szabad ugyanoda lépni, mint ahol más van, itt pedig harcolni kell a többiekkel, ki kell venni azt a pár sort a feltöltésből

Vizsga

Régebbi vizsgasorok

Régi, kevésbé releváns vizsgák

Kidolgozott ellenőrző kérdések

Tippek

A tárgy nem éppen a legkönnyebb a szakirányon és ezt a zh statisztikából is lehet látni.
Tippek a teljesítéshez:

  • bejárni órákra (jó az elején komolyan venni a dolgokat, zh-ra annál kevesebbet kell készülni)
  • időben nekiállni készülni rá
  • könyvet megtanulni: elég száraz, ahogy le vannak írva a dolgok, de ha szépen kihámozod belőle a lényeget, ami így sem kevés, akkor vagy jó, annál többet nem kérdeznek
  • MLP-t oda-vissza megérteni (tanár úr mondta, hogy régen szóbeli is volt és aki ezt nem tudta annak már repült is a karó )
  • zh-ra és vizsgára is jellemző, hogy van "mentőkérdés", ez az amit nagyjából biztos hogy behúzol, de ez kevés lesz egy ketteshez is
  • tipikus kevésbé trükkösebb feladatok: svm, rbf, cmac, mlp, fir szűrős
  • advanced vagy trükkös feladat általában: oja hálós, pca (ezek zh előtti 1-2 hétben lesznek leadva)
  • ha kritériumfüggvényes feladatmegoldást kérnek, akkor nem elég az hogy így és így csinálnám meg hanem neki kell állni bizony deriválni


Vélemények

Közös tárgyak
Autonóm rendszerek
Intelligens rendszerek