„Kooperatív és tanuló rendszerek” változatai közötti eltérés
| 80. sor: | 80. sor: | ||
==== Harmadik házi ==== | ==== Harmadik házi ==== | ||
A harmadik házinak már bonyolultabb a paraméterezése, hoszabb a megirandó 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. | |||
{{Rejtett | |||
|mutatott=Tanítás | |||
|szöveg= | |||
<source lang="matlab"> | |||
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; | |||
</source> | |||
}} | |||
A feltöltendő ''player_i_step.m'' is hasonlóan hoszabb lesz | |||
{{Rejtett | |||
|mutatott=player_i_step.m | |||
|szöveg= | |||
<source lang="matlab"> | |||
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 | |||
</source> | |||
}} | |||
==== Negyedik házi ==== | ==== Negyedik házi ==== | ||